1.중첩 클래스
중첩 클래스란 클래스 안의 클래스라고 보면 된다.
중첩 클래스는 바깥의 클래스에 접근하기 용이하고 다른 사람이 읽기에도 좀 더 편리하며
유지 보수에도 효율적이다.
인스턴스, 정적, 로컬 멤버가 있으며 다음 예제를 통해 확인해보자.
package chap07.exam01.overClass; public class Exclass { public Exclass() { System.out.println("외부 클래스 생성"); } // 1. 인스턴스 멤버 - 객체화 해야 사용 할 수 있는 클래스 (클래스 영역에 생성) public class InsClass { public InsClass() { System.out.println("인스턴스 멤버 생성"); } int field = 0; void method() { System.out.println(field + "을 출력하는 메서드"); } } // 2. 정적 멤버 - 객체화를 하면 사용 할 수 없는 클래스 public static class StaticClass{ public StaticClass() { System.out.println("인스턴스 멤버 생성"); } int field = 0; void method() { System.out.println(field + "을 출력하는 메서드"); } static int sfield = 0; static void smethod() { System.out.println(sfield + "을 출력하는 메서드"); } } // 3. 로컬멤버 - 메서드가 실행되어야 사용할 수 있는 클래스 void localMethod() { // 메서드 안에서만 사용 할 수 있는 클래스 // 메서드 안에서 선언 생성 전부 해야한다. class Local{ Local(){ System.out.println("Local 객체 생성"); } int field = 0; void method() { System.out.println(field + "을 출력하는 메서드 실행"); } } Local lo = new Local(); lo.field = 10; lo.method(); } }
package chap07.exam01.overClass; import chap07.exam01.overClass.Exclass.InsClass; public class Main { public static void main(String[] args) { // Exclass에 있는 InsClass 사용 하기 Exclass ex = new Exclass(); Exclass.InsClass ins = ex.new InsClass(); // Exclass를 import를 통해서 명시 하여도 됨 InsClass ins2 = ex.new InsClass(); ins.field = 3; ins2.field = 4; ins.method(); ins2.method(); System.out.println(); // Static 멤버 가져오기, static 멤버의 static도 객체화 하지 않아야 접근 가능 Exclass.StaticClass.sfield = 40; Exclass.StaticClass.smethod(); // field와 method 호출 해 보기 Exclass.StaticClass sta = new Exclass.StaticClass(); sta.field = 99; sta.method(); System.out.println(); // Local member 호출 ex.localMethod(); } }
2.중첩 인터페이스
인터페이스는 중첩 클래스의 인터페이스 버전으로 생각하면 된다.
중첩 클래스와 같이 직관적으로 보이고 특징들은 비슷하다.
예제를 통해 이해해보자.
package chap07.exam02.overInter; public class Element { EventListener listener; void regist(EventListener listener) { // 특정 감시자를 등록 this.listener = listener; } void trigger() { listener.call(); } // Element와 EventListener의 관계가 직관적으로 보인다. interface EventListener{ void call(); // 이벤트 발생 시 호출 할 메소드 구현 } }
package chap07.exam02.overInter; public class Main { // 중첩인터페이스 public static void main(String[] args) { // Element에 Listener 등록 // 이벤트 발생 시 어떻게 되나? Element ele = new Element(); ele.regist(new OnClickListener()); ele.trigger(); Element ele2 = new Element(); ele2.regist(new OnKeyListener()); ele2.trigger(); // 이벤트 발생 시 호출 할 메소드 구현 } }
'개념 및 코딩 > 06.기타' 카테고리의 다른 글
[JAVA]06-06.Generic (0) | 2018.09.03 |
---|---|
[JAVA]06-05.Object (0) | 2018.09.03 |
[JAVA]06-04.String (0) | 2018.09.03 |
[JAVA]06-03.Throw 예외처리, 커스텀 예외처리 (0) | 2018.09.03 |
[JAVA]06-02.예외처리 instance of, try catch (0) | 2018.09.03 |