Skip to content

Latest commit

 

History

History
65 lines (49 loc) · 2.91 KB

nested_class.md

File metadata and controls

65 lines (49 loc) · 2.91 KB

중첩클래스

사용이유

  1. 가독성
  2. 캡슐화
  3. 외부 내부 클래스 자원 공유(긴말한 협력)
  4. 특정 클래스만 사용할 때

Static Nested Class Instance Inner Class 사용목적 차이

  • 외부 클래스의 자원을 사용할 것이냐 여부 차이

Static Nested Class(정적 내부클래스)

  1. Outer와 Inner의 논리적 연관관계 표시
  2. 외부 클래스의 정적 필드 사용 가능
  3. 외부 클래스 객체 생성 필요하지 않음 ↔ 인스턴스 내부 클래스의 경우 외부 클래스 객체 생성 필요
  4. 외부에서 정적 멤버, 인스턴스 멤버로 초기화 가능, 외부의 모든 메소드에서 사용 가능

Instance Inner Class

  1. 외부 객체 생성 필요
  2. 정적 필드로 초기화 불가, 정적 메소드에서 사용 불가
  3. 인스턴스 필드, 인스턴스 메소드에서 사용가능
  4. 생성 방법 - 외부 클래스.내부 클래스 내부 클래스 참조 변수 = 외부 클래스 참조 변수.new 내부 클래스();
  5. 외부 객체의 모든 필드, 메소드 접근 가능
  6. 클래스를 내부에 캡슐화하고 싶을 때 사용
  7. 비서

로컬 클래스

  1. 메소드 내에서 선언 후 사용
  2. 모든 필드, 메소드 사용 가능
  3. 접근제한자 필요X(메소드 내에서만 사용하므로)
  4. 주로 비동기 처리를 위한 쓰레드 객체 만들 때 사용
  5. 로컬 클래스 내에서 사용된 메소드의 지역변수와 매개변수는 final 특성을 가진다
  6. 메소드가 종료되면 메소드의 지역변수와 매개변수는 사라지지만 로컬 객체는 계속해서 사용하는 경우가 있기 때문

익명 객체

  1. 정의
    1. 프로그램에서 한번 사용되고 버려지는 객체
    2. 이름이 없다는 것이 특징이며
    3. 인터페이스를 구현하거나 상속받아야 한다
  2. 특성
    • 단독으로 생성할 수 없다.
    • 클래스를 상속하거나, 인터페이스를 구현해야만 생성가능하다.
    • 필드의 초기값, 로컬 변수의 초기값, 매개변수의 매개값으로 주로 대입된다.
    • UI 이벤트 처리, 스레드 객체를 간편하게 생성할 목적으로 활용된다.
  3. 외부에서 자식 객체에서만 정의된 필드, 메소드 사용 불가
  4. 일회용의 목적
  5. 외부 객체의 필드, 메소드 사용 가능
  6. 외부의 매개/지역 변수 사용 가능하나 익명 객체에서 사용된 매개 변수와 로컬 변수는 모두 final 특성
    1. 메소드 내에서 생성된 익명 객체는 메소드 실행이 끝나도 힙 메모리에 존재해서 계속 사용 가능
    2. 매개/로컬 변수는 메소드 실행이 끝나면 stack에서 사라지기에 문제

중첩 클래스에서 외부 참조 얻기

  • OuterClass.this

중첩 인터페이스

  • 객체 내에 긴밀히 협력할 인터페이스 선언 가능
  • Class A implements Outerclass.InnerInterface