JAVA

221028 Nested Class(내포 클래스)-(Embedding)

주영재 2022. 10. 28. 12:01

**Nested Class(내포 클래스)-(Embedding, 이와 유사한 게 IOT.-인터넷이 되면 IOT, 안되면 임베드) 
=>클래스 안에 존재하는 클래스
=>자바는 클래스 안에 클래스를 생성하는 문법을 지원 
1.Inner Class
=>클래스 안에 존재하는 클래스
=>클래스 내부에서만 사용할 목적으로 생성
=>일반 클래스는 접근 지정자가 package(접근 지정자가 없는 경우)와 public만 가능하지만 inner class에서는 private과 protected도 가능
=>클래스가 컴파일 되었을 때는 외부클래스이름$내부클래스이름.class로 만들어집니다.

2.Static Inner Class
=>class 앞에 static을 붙이는 클래스
=>내포 클래스에 static멤버가 있으면 일반 inner class는 에러가 발생(버전17부터는 에러 발생 x)
=>내포 클래스에 static 멤버가 있는 경우는 인스턴스 생성없이 사용할 수 있도록 static을 붙여주어야 합니다.
=>static이 붙은 클래스는 인스턴스 생성없이 사용 가능합니다.

3.Local Inner Class
=>메서드 안에 만들어지는 내포 클래스
=>메서드 안에서만 사용이 가능합니다.
{}와 유사한 개념

 

 

※단, 최근에는 하나의 클래스 안에는 하나의 클래스만 있도록 권장한다.

4.Annonymous Class
=>이름없는 클래스 또는 객체
=>인터페이스를 구현하거나 클래스를 상속받아야 할 때 별도의 클래스를 만들지 않고 필요한 메서드만 재정의해서 사용하는 문법
=>이벤트 처리할 때 많이 사용됩니다.
=>이 경우에 인터페이스 안에 메서드가 1개인 경우는 람다 표현식으로 작성하는 것이 가능합니다.

5.문법적으로 수업 도중 많이 사용하는 것
=>Annonymous Class입니다.

6.실습

OuterClass

package java_1028.Listed;

public class OuterClass {
	//내포 클래스-다른 클래스 안에 만들어진 클래스
	class Innner{
		public int num;
	}

	//버전17이라 에러 발생하지 않음. 알아서 내부에서 바꿔버림. 11버전에선 내포클래스 안에 static 멤버가 있으면 인스턴스 생성없이 사용할 수 있도록 static을 추가
	class StaticInner{
		public int num;
		public static int share;
	}

	public void method() {
		//메서드 안에 만들어진 클래스-Local Inner
		//메서드 안에서만 사용이 가능한 클래스
		//메서드 안에 만들어 놓고 쓰다가 다른 메서드에서도 필요해지면 그때 꺼내서 inner class로 사용하는 식 
		class LocalInner{
			public int num;
		}
	}
}

 

이걸 사용하는 경우
게시글
-번호
-내용
-작성자
-파일이름->0개이상
-파일생성일->0개이상

Join
게시글 첨부파일
-번호 -파일이름
-내용 -파일생성일
-작성자
-첨부파일[]=>Foreign Key 


NO SQL-Embedded. Join을 하지 않는다.
게시글(클래스)
-번호
-내용
-작성자
-첨부파일 클래스
파일이름
파일생성일

중복된 코드-스파게티 코드를 최대한 줄이기.


상속: 부모->자식이 아님.
sub1(drived)->super(based)
sub2->super이다. 그리고 사람들이 많이 쓰는 super클래스를 만드는 게 framework다.

is a-상속
has a-클래스 안에서 다른 클래스의 인스턴스 사용. 상속이 아님