내부 클래스
Nested Class
- 클래스 안에 만드는 클래스
- 자바는 클래스 안에 클래스를 만드는 것을 지원
- 하나의 파일에 여러 개의 클래스를 만드는 것과는 다른 개념 - 비추천
- 특정 클래스 안에서만 사용되는 클래스가 있다면 굳이 외부에 만들 필요없이 클래스 내부에 만들어서
다른 클래스는 접근할 수 없도록 하자는 취지에서 생성
- 내부 클래스는 클래스 안에서 인스턴스를 생성해서 사용
1. 일반 Inner Class(static이 아니어서 일반이라고 명시)
- 클래스 안에 만들어진 클래스
- static 프로퍼티나 메소드를 소유 불가
- static이 없는 클래스는 인스턴스를 만들기 전까지 메모리 할당을 받지 않기 때문에 static처럼 클래스가 만들어질 때
저장되어야하는 데이터를 사용할 수 없다.
2. static Inner Class
- Inner Class가 static멤버를 가져야 하는 경우 사용하는 클래스
* Inner Class는 class안에 만들어졌지만 컴파일이 될 때는 Outer$Inner.class 파일로 별도로 생성됩니다.
한 번 만들어서 사용을 하게되면 메모리에 계속 load된 상태가 된다.
3. Local Inner Class
- 메소드 안에 만들어지는 클래스
- 메소드 안에서만 사용이 가능
4. Anonymous Class
- 이름없는 클래스
- 클래스를 만들 때 이름없이 생성해서 인스턴스를 만들고 사용하는 방법
*람다: 이름없는 함수
- java 1.7부터 함수형 프로그래밍을 지원하기 위해서 메소드가 1개인 경우는 람다라고 특수한 문법으로 만들수 있도록 함
5. 생성 문법
6. 클래스(인터페이스)를 상속받아서 사용하는 방법
- 상속받는 클래스를 만들고 그 클래스의 인스턴스를 만들어서 사용
- 클래스를 만들어 두었기 때문에 여러 개의 인스턴스를 생성할 수 있음
- 클래스는 정적 메모리 영역을 사용하기 때문에 프로그램 내에서 단 한번만 사용하는 클래스의 경우
메모리 낭비가 발생
7. 익명 클래스를 이용하는 방법
- 클래스를 마들지 않고 바로 인스턴스를 만들기 때문에 1개의 인스턴스만 생성 가능
- 클래스를 만들지 않기 때문에 정적 메모리 영역을 사용하지 않음.
필요한 순간에만 코드가 만들어짐.