JAVA

내부 클래스

스물훈 2020. 4. 21. 11:24

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. 생성 문법

Inner Class

 

static inner class

 

Local Inner Class

6. 클래스(인터페이스)를 상속받아서 사용하는 방법

- 상속받는 클래스를 만들고 그 클래스의 인스턴스를 만들어서 사용

- 클래스를 만들어 두었기 때문에 여러 개의 인스턴스를 생성할 수 있음

- 클래스는 정적 메모리 영역을 사용하기 때문에 프로그램 내에서 단 한번만 사용하는 클래스의 경우

   메모리 낭비가 발생

 

7. 익명 클래스를 이용하는 방법

- 클래스를 마들지 않고 바로 인스턴스를 만들기 때문에 1개의 인스턴스만 생성 가능

- 클래스를 만들지 않기 때문에 정적 메모리 영역을 사용하지 않음.

   필요한 순간에만 코드가 만들어짐.