221028 Nested Class(내포 클래스)-(Embedding)
**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-클래스 안에서 다른 클래스의 인스턴스 사용. 상속이 아님