내부 클래스

yshjft·2022년 9월 10일
0

Java, OOP

목록 보기
2/27

내부 클래스란?

클래스나 인터페이스 내부에서 선언되는 클래스

내부 클래스의 장점

  • 코드의 복잡섭을 줄일 수 있다.(캡슐화)
    • 외부에 불필요한 클래스를 감춘다.
  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
    • 외부 클래스의 private 필드와 메서드에도 접근할 수 있다.

내부 클래스 종류

class Outer {
   class InstanceInner { … } // 인스턴스 내부 클래스
   static class StaticInner { … } // 스태틱 내부 클래스
   
   void method1() {
       class LocalInner { … } // 지역 내부 클래스
   }
}
  • 인스턴스 내부 클래스
  • 스태틱 내부 클래스(정적 내부 클래스)
  • 지역 내부 클래스
  • 익명 내부 클래스

참고

https://pridiot.tistory.com/52
https://siyoon210.tistory.com/141

왜 인스턴스 내부 클래스에서는 static 메서드를 사용하지 못할까?

  • 내부 클래스의 인스턴스는 외부 클래스의 인스턴스와 연관 있기 때문에 스스로 어떠한 static 메서드를 정의하지 못한다.
    • 인스턴스 내부 클래스에서는 인스턴스 생성과 상관없이 사용할 수 있는 정적 변수 또는 정적 메서드를 사용할 수 없다.
    • 인스턴스 내부 클래스의 사용은 외부 클래스의 생성이 선행되어야 한다.
  • 내부 클래스가 외부 클래스와 무관하고 내부 클래스 내에 정적 변수 또는 메서드가 필요하다면 정적 내부 클래스를 사용한다.
  • 정말 외부에 내부 클래스를 노출시키고 싶지 않다면 private 키워드를 사용해야 한다.

참고

https://codevang.tistory.com/110
https://poew.tistory.com/441

왜 내부 클래스는 static으로 선언할 것을 추천할까?

  • 인스턴스 내부 클래스 사용시 외부 클래스와 내부 클래스의 관계는 멤버 클래스의 인스턴스 안에 만들어지며(외부 참조), 메모리를 차지하며 생성도 느리다.
  • 바깥 클래스 인스턴스의 참조를 멤버 클래스가 갖고 있으므로(외부 참조), 바깥 클래스 인스턴스가 GC 대상에서 빠지게 되어 메모리 누수 문제를 발생시킬 수 있다.
  • 멤버 클래스에서 외부 인스턴스에 접근할 일이 없다면 무조건 static을 붙이자. 시간과 메모리 공간을 절약할 수 있으며 발생 가능성 있는 문제를 해결할 수 있다.

참고

https://johngrib.github.io/wiki/java-inner-class-may-be-static/
https://siyoon210.tistory.com/141
https://tecoble.techcourse.co.kr/post/2020-11-05-nested-class/

profile
꾸준히 나아가자 🐢

0개의 댓글