가자미의 개발이야기
자바 네스티드 클래스 본문
-네스티드 클래스 : 클래스 안에 정의된 클래스
--static 여부에 따라 스태틱 네스티드 클래스/이너 클래스로 구분.
---이너 클래스도 멤버/로컬/익명 클래스로 구분
-스태틱 네스티드 클래스(Outer 클래스와 별 상관 없음)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Outer{
private static int num =0; //외부 접근이 불가능한 변수지만 nested1, nested2로는 접근 가능
static class Nested1{
void add(int n) {num+=n;}
}
static class Nested2{
int get() {return num;}
}
}
public class StaticNested {
public static void main(String[] args) {
Outer.Nested1 nst1 = new Outer.Nested1(); //인스턴스 생성 방법 유의
nst1.add(5);
Outer.Nested2 nst2 = new Outer.Nested2(); //인스턴스 생성 방법 유의
System.out.println(nst2.get());
}
}
|
cs |
-멤버 클래스
--멤버 클래스는 아우터 클래스에 종속적인 관계에 있는 이너 클래스이다.
---아우터 인스턴스에 기반으로 멤버 클래스의 인스턴스가 생성된다.
---멤버 클래스를 아우터 클래스 안에 감춘다고 생각하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
interface Printable{
void print();
}
public class Papers {
private String con;
public Papers(String s) {con=s;}
public Printable getPrinter() {
return new Printer();
}
private class Printer implements Printable{
public void print() {
System.out.println(con);
}
}
public static void main(String[] args) {
Papers p = new Papers("서류 내용 : 행복합니다.");
Printable prn = p.getPrinter();
prn.print();
}
}
|
cs |
-로컬 클래스
--멤버 클래스와 유사하나, 아우터 클래스의 메소드 안에 숨긴다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
interface Printable{
void print();
}
public class Papers {
private String con;
public Papers(String s) {con=s;}
public Printable getPrinter() {
class Printer implements Printable{ //메소드 안에 정의
public void print() {
System.out.println(con);
}
}
return new Printer();
}
public static void main(String[] args) {
Papers p = new Papers("서류 내용 : 행복합니다.");
Printable prn = p.getPrinter();
prn.print();
}
}
|
cs |
-익명 클래스
--이너 클래스가 인터페이스의 구현 결과밖에 없다면,
--해당 클래스를 생략하고 인터페이스를 구현한 인스턴스를 정의한다.
---메소드를 전달해야 하는 경우, 클래스를 쓰지 않고 전달하는 방식이라고 이해하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
interface Printable{
void print();
}
public class Papers {
private String con;
public Papers(String s) {con=s;}
public Printable getPrinter() {
return new Printable() { //이름이 없는 클래스
public void print() { //추상메소드 구현
System.out.println(con);
}
};
}
public static void main(String[] args) {
Papers p = new Papers("서류 내용 : 행복합니다.");
Printable prn = p.getPrinter();
prn.print();
}
}
|
cs |
'Java > 자바 기본 문법' 카테고리의 다른 글
자바 다양한 람다식 (0) | 2021.02.04 |
---|---|
자바 람다의 기초 (0) | 2021.02.04 |
자바 매개변수의 가변 인자 선언 & 어노테이션 (0) | 2021.02.03 |
자바 열거형 (0) | 2021.02.03 |
자바 컬렉션 기반 알고리즘 (0) | 2021.02.03 |