최신글
hyeonga_code
Java의 신_Chapter 16_Nested Class 본문
반응형
2024.03.28
- 중첩 클래스_Nested Class
-- 클래스 안에 클래스를 선언한 것
-- 코드를 간단하게 표현하기 위함
-- 자바 기반의 UI 처리 시 사용자의 입력에 사용
-- 외부의 이벤트에 대한 처리를 하는 곳에서 사용
-- 종류
---- Static Nested Class
---- 내부클래스_Inner Class
------ 로컬 내부 클래스_Local Inner Class
------ 익명 내부 클래스_Anonymous Inner Class
Nested Class
ㄴStatic nested class
ㄴInner class
ㄴLocal inner class
ㄴAnonymous inner class
-- Static Nested Class 가 필요한 이유
---- 한 곳에서만 사용되는 클래스를 논리적으로 묶어 처리할 필요가 있는 경우
-- Inner Class가 필요한 이유
---- 캡슐화가 필요한 경우(내부 구현을 감추고 싶은 경우)
-- Static Nested Class
더보기
package nestclass.inner;
public class OuterOfStatic {
static class StaticNested {
private int value=0;
public int getValue(){
return value;
} //end getValue()
public void setValue(int value) {
this.value = value;
} //end setValue()
} //end class(StaticNested)
} //end class(OuterOfStatic)
public class NestedSample {
public static void main(String[] args) {
NestedSample sample = new NestedSample();
sample.makeObject();
}
public void makeObject(){
OuterOfStatic.StaticNested staticNested = new OuterOfStatic.StaticNested();
staticNested.setValue(4);
System.out.println(staticNested.getValue(); // 4
}
}
---- OuterOfStaic 클래스를 컴파일하면 내부에 위치한 StaticNested 클래스도 함께 컴파일된다.
OuterOfStatic.class
OuterOfStatic$StaticNested.class
-- Inner Class
더보기
package nestclass.inner;
public class OuterOfInner {
class Inner {
private int value=0;
public int getValue(){
return value;
} //end getValue()
public void setValue(int value) {
this.value = value;
} //end setValue()
} //end class(Inner)
} //end class(OuterOfInner)
public class InnerSample {
public static void main(String[] args) {
InnerSample sample = new InnerSample();
sample.makeObject();
}
public void makeObject(){
OuterOfInner outer = new OuterOfInner();
OuterOfInner.Inner inner = outer.new Inner();
inner.setValue(4);
System.out.println(inner.getValue(); // 4
}
}
---- Outer 객체를 생성한 후, outer 객체를 통해 Inner 객체를 생성해야 한다.
--- GUI_Graphic User Interface 관련 프로그램을 개발하는 경우 많이 사용한다.(리스너)
-- 익명 클래스
더보기
package nestclass.inner;
public class AnonymousButton {
public AnonymousButton() {}
private EventListener listener;
public void setListener(EventListener listener) {
this.listener = listener;
} //end setListener()
public void process(){
if(listener != null)
listener.onClick();
} //end process()
} //end class(AnonymousButton)
public interface EventListener {
public void onClick();
} //end interface(EventListener)
public class AnonymousSample {
public static void main(String[] args) {
AnonymousSample sample = new AnonymousSample();
sample.setButton();
} //end main()
public void setButton() {
AnonymousButton button = new AnonymousButton();
button.setListener(
new EventListener() {
public void onClick(){
System.out.println("onclick button");
} //end onClick()
} //end EventListener()
);
btton.process();
} //end setButton()
} //end class(AnonymousSample)
---- 호출 할 수 없으므로 재사용이 불가능하다.
-- Static Class 는 static으로 선언된 변수만 접근이 가능하다.
-- Inner Class 는 모든 변수에 접근이 가능하다.
반응형
'Java' 카테고리의 다른 글
Java의 신2_Chapter 2_ java.lang 패키지 (0) | 2024.04.02 |
---|---|
Java의 신_Chapter 17_Annotation (0) | 2024.03.29 |
Java의 신_Chapter 15_String (0) | 2024.03.29 |
Java의 신_Chapter 14_Exception (0) | 2024.03.28 |
Java의 신_Chapter 13_Interface, enum (0) | 2024.03.28 |