- 가독성
- 캡슐화
- 외부 내부 클래스 자원 공유(긴말한 협력)
- 특정 클래스만 사용할 때
- 외부 클래스의 자원을 사용할 것이냐 여부 차이
- Outer와 Inner의 논리적 연관관계 표시
- 외부 클래스의 정적 필드 사용 가능
- 외부 클래스 객체 생성 필요하지 않음 ↔ 인스턴스 내부 클래스의 경우 외부 클래스 객체 생성 필요
- 외부에서 정적 멤버, 인스턴스 멤버로 초기화 가능, 외부의 모든 메소드에서 사용 가능
- 외부 객체 생성 필요
- 정적 필드로 초기화 불가, 정적 메소드에서 사용 불가
- 인스턴스 필드, 인스턴스 메소드에서 사용가능
- 생성 방법 -
외부 클래스.내부 클래스 내부 클래스 참조 변수 = 외부 클래스 참조 변수.new 내부 클래스();
- 외부 객체의 모든 필드, 메소드 접근 가능
- 클래스를 내부에 캡슐화하고 싶을 때 사용
- 비서
- 메소드 내에서 선언 후 사용
- 모든 필드, 메소드 사용 가능
- 접근제한자 필요X(메소드 내에서만 사용하므로)
- 주로 비동기 처리를 위한 쓰레드 객체 만들 때 사용
- 로컬 클래스 내에서 사용된 메소드의 지역변수와 매개변수는 final 특성을 가진다
- 메소드가 종료되면 메소드의 지역변수와 매개변수는 사라지지만 로컬 객체는 계속해서 사용하는 경우가 있기 때문
- 정의
- 프로그램에서 한번 사용되고 버려지는 객체
- 이름이 없다는 것이 특징이며
- 인터페이스를 구현하거나 상속받아야 한다
- 특성
- 단독으로 생성할 수 없다.
- 클래스를 상속하거나, 인터페이스를 구현해야만 생성가능하다.
- 필드의 초기값, 로컬 변수의 초기값, 매개변수의 매개값으로 주로 대입된다.
- UI 이벤트 처리, 스레드 객체를 간편하게 생성할 목적으로 활용된다.
- 외부에서 자식 객체에서만 정의된 필드, 메소드 사용 불가
- 일회용의 목적
- 외부 객체의 필드, 메소드 사용 가능
- 외부의 매개/지역 변수 사용 가능하나 익명 객체에서 사용된 매개 변수와 로컬 변수는 모두
final
특성- 메소드 내에서 생성된 익명 객체는 메소드 실행이 끝나도 힙 메모리에 존재해서 계속 사용 가능
- 매개/로컬 변수는 메소드 실행이 끝나면
stack
에서 사라지기에 문제
- OuterClass.this
- 객체 내에 긴밀히 협력할 인터페이스 선언 가능
- Class A implements Outerclass.InnerInterface