공부하는 다락방

열혈강의 Java프로그래밍 Round 12 본문

Java

열혈강의 Java프로그래밍 Round 12

권파인 2014. 12. 17. 16:16

# 중첩 클래스 (Inner Class)
- 클래스 내부에 또 다른 클래스를 가짐으로 클래스 관리의 효율을 높인 것(static 포함불가)
    * Inner클래스는 그 자체만으로도 공유의 개념을 가지고 있음. 그러기 때문에 Outer클래스의 멤버필드가 private으로 되어있어도 공유해서 사용 가능.

# 중첩 클래스의 형식과 생성파일
- 형식) class Outer{ class Inner{...}}
- 생성파일) Outer.class, Outer$Inner.class

# 중첩 클래스 객체 생성
- Outer.Inner oi = new Outer().new Inner();
    ex) Outer ot = new Outer(); //Outer 클래스의 객체생성
         Outer.Inner oi = ot.new Inner(); //Inner 클래스 객체생성은 Outer클래스 객체를 통해서 생성시켜야 함.

=================================================================================

# 정적 중첩 클래스 (static Inner Class)
- 중첩 클래스 내부에 static 멤버를 포함할 수 있는 형태(Outer의 non-static 멤버 포함 불가)
    * Outer클래스의 멤버필드 중 static 예약어가 있는 변수만 사용할 수 있음. Inner클래스 내부에 선언되어있는 변수는 static이던 아니던 상관없음.

# 정적 중첩 클래스의 형식과 생성파일
- 형식) class Outer { static class Inner {...}}
- 생성파일) Outer.class, Outer$Inner.class

# 정적 중첩 클래스 객체 생성
- Outer.Inner oi = new Outer.Inner();
   * static 은 전체 공유이기 때문에 개별적으로 묶어서 공유할 필요가 없음. 따라서 Outer클래스로 객체 생성.
   ex) Outer1.Inner1 oi = new Outer1.Inner1();

   * 만약 내부클래스의 static 변수가 밖에서 접근 가능한 경우 출력하고 싶을 때 System.out.println("b ==>" + Outer1.Inner1.b); 클래스로 바로 접근 해서 출력.

   *** static Inner클래스에 메인메서드를 선언할 수 있음. 실행하기 위해선 그 메인 메서드가 포함되어있는 모든 클래스 경로를 적어줘야 함. 
   ex) EX_03$Sub (메인메서드가 있는 클래스까지 경로 적어야 함.)

=================================================================================

# 지역 중첩 클래스 (Local Inner Class) => 익명Inner클래스의 전신, 메서드 안에 클래스가 들어갈 수 있음.
- 메서드 실행 시에 사용되는 클래스를 정의한 형식으로 접근자나 지정어를 가질 수 없음.

# 지역 중첩 클래스의 형식 및 생성 파일
- 형식) class Outer{
            method() { class Inner{ ... }}}
- 생성파일) Outer.class, Outer$숫자Inner.class

# 객체 생성은 외부에서 할 수 없음.

=================================================================================

# 익명 중첩 클래스 (Anonymous Inner Class)
- 기존 클래스의 특정 메서드를 오버라이딩 하여 원하는 형태로 재정의 하여 사용하는 방식
- 외부 멤버 중 final만 포함 할 수 있음.
    * 주로 이벤트, GUI 파트에서 사용.
   ** 다른 클래스의 있는 멤버필드를 객체 생성시 재정의해서 사용 가능. 
   *** 또 다른 메서드를 만들 수 는 있지만 호출은 불가. 멤버필드를 재정의한 메소드에서 호출 가능.

# 익명 중첩 클래스의  형식 및 생성파일
- 형식) class Inner{...}
            class Outer{ method() { new Inner(){...}}}
- 생성파일) Outer.class, Outer$숫자.class

# new Inner() 자체가 객체 생성임.

 

Comments