class 개요
: class 안의 class를 innerclass
: class 안의 method 안의 class를 local inner class
inner class
inner class 예시
User 내부의 this는 당연히 user 클래스에서 생기는 this 객체이지만
앞에 상위 클래스명. This를 붙이면 상위 클래스를 포함한다. (MyUtl.this처럼)
내부 class(객체) 생성
내부 class 생성법 (new class().new inner class())
잘못된 예시
상위 클래스의 MyUtil의 정보가 부족해 단독 생성이 불가함
내부 class(객체) 장점
내부 클래스를 사용하는 이유
- 외부 클래스와 내부 클래스가 긴밀한 관계를 맺을 때 사용한다.
- 내부 클래스에서 외부 클래스의 멤버에 쉽게 접근할 수 있다.
- 서로 관련있는 코드를 묶어서 코드의 캡슐화를 증가시킨다.
- 외부에서는 내부 클래스에 접근할 수 없기 때문에 코드의 복잡성을 줄일 수 있다.
- 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적
inner class vs Static inner class
inner class
당연히 다른 객체가 나온다.
static inner class
static이란 공유 성질에 의해 같은 참조라 생각될 수 있지만 다름
외부 클래스에서 객체 생성 없이 사용할 수 있다는 점이 중요
inner vs static inner 예시
static은 class 선언 없이 사용할 수 있기에
에러가 난다.
Static을 사용해야하는 이유
static이 붙지 않았을 때 단점
- 참조값을 담아야 하기 때문에, 인스턴스 생성시 시간적, 공간적으로 성능이 낮아진다
- 외부 인스턴스에 대한 참조가 존재하기 때문에, 가비지 컬렉션이 인스턴스 수거를 하지 못하여 메모리 누수가 생길 수 있다.
만약 static키워드를 사용하고 싶지 않다면 내부 클래스 보다는 별개의 클래스로 만드는 것이 좋다.
Static 함수
내부함수가 static함수면 내부 클래스도 static이여야 같이 static영역으로 가서 클래스를 구성할 수 있다.