본문

160108P(금)

Java Chapter 16 - 네스티드 클래스와 네스티드 인터페이스

 

자바는 클래스나 인터페이스 안에 클래스를 선언하거나 인터페이스를 선언하는 문법 지원

한 클래스만을 위해서 작성된 별도의 클래스는 네스티드 클래스로 선언하는것이 편리하다.

 

// 인클로징 클래스

class ExamResult {

String name;

ItemResult result[];

 

// 네스티드 클래스

class ItemResult {

String subject;

int points;

}

}

 

네스티드 클래스

1. 정적 네스티드 클래스(static nested class)

클래스와 인터페이스 안에 선언 가능

 

class ExamResult {

String name;

ItemResult result[];

 

static class ItemResult {

String subject;

int points;

}

}

 

사용방법은 이너클래스와 같으나, 인클로징 클래스 외부에서 정적 네스티드 클래스 객체를 생성하는 방법은 전혀 다르다.

 

인클로징 클래스 외부에서 정적 네스티드 클래스의 객체를 생성

정적 클래스이기 때문에 이너 클래스처럼 인클로징 객체와 연관관계를 맺지 않는다.

Line.Point point = new Line.Point(100, 200);

 

 

 

2. 이너 클래스(inner class)

static이 붙지 않는 클래스

클래스 안에만 선언할 수 있고, 인터페이스 안에는 선언 불가

 

class ExamResult {

String name;

ItemResult result[];

 

class ItemResult {

String subject;

int points;

}

}

 

이너클래스 선언

Cart.Item item = cart.getItem(cnt);

인클로징 클래스의 이름.이너클래스의 이름 item = cart.getItem(cnt);

 

item.name

item.getPrice();

 

인클로징 클래스 외부에서 이너클래스 객체 생성

Cart cart = new Cart();

Cart.Item item = cart.new Item("꽃다발", 1, 50000);

∴ 이너 클래스 객체와 인클로징 객체간의 연관관계는 이너클래스 객체가 생성될 때 정해진다.

 

이너 클래스 안에서는 인클로징 클래스의 구성요소를 직접 사용 가능

 

3. 로컬 이너 클래스(local inner class)

메소드 안에서 클래스 선언

로컬 이너 클래스를 사용하는 다른 명령문보다 앞에 와야 하므로, 항상 맨 처음에 선언 해주는것이 좋다.

 

class MyProgram {

public static void main(String args[]) {

class NamedValue {

String name;

int value;

}

NamedValue obj = new NamedValue();

.

.

.

}

}

 

이름없는 이너 클래스

메소드 밖에 있는 다른 클래스를 상속받는 서브 클래스로 선언도 가능하다.

 

class MyProgram {

public static void main(String args[]) {

class NamedValue extends MessageSender {

String name;

int value;

}

NamedValue obj = new NamedValue();

.

.

.

}

}

 

로컬 이너 클래스를 선언하는 목적이 슈퍼클래스의 메소드를 오버라이드하기 위한 것이고, 서브 클래스의 객체를 딱 하나만 생성할 필요가 있는 경우, 이름없는 이너 클래스를 사용한다.

생성자를 가질 수는 없다.

인터페이스도 마찬가지로 사용한다.

 

class MyProgram {

public static void main(String args[]) {

MessageSender obj = new MessageSender() {

String name;

int value;

};

.

.

.

}

}

 

네스티드 인터페이스

abstract 클래스나 인터페이스 안에 선언된 인터페이스

 

정적 네스티드 인터페이스

PlayerFactory.Player player = factory.createPlayer();

'Programming > Java' 카테고리의 다른 글

160117P(일)  (0) 2016.01.17
160109P(토)  (0) 2016.01.10
160107P(목)  (0) 2016.01.07
160103P(일)  (0) 2016.01.04
151220P(일)  (0) 2015.12.20

공유

댓글