2020-09-08 TIL ing

less than 1 minute read

중첩 클래스

탑 레벨 클래스와 접근제어

static nested class

  • 하나의 소스 파일에 탑 레벨 클래스가 2개 이상일 때 하나만 퍼블릭 클래스가 될 수 있고 퍼블릭 클래스의 이름으로 소스 파일을 저장해야 한다.
    • 나머지는 퍼블릭이 될 수 없다.

스태틱 중첩 클래스

  • this 변수를 가지고 있지 않다.

이너 클래스

  • 인스턴스 메서드의 경우
    • this 변수를 가지고 있다.
      • 0번째 로컬 변수가 this 이다.
    • 그 클래스의 인스턴스 변수 주소를 담는다.
    • 인스턴스 메서드에 있는 this 변수는 인스턴스 메서드를 호출할 때 객체 주소를 저장한다.
  • 이너 클래스의 경우
    • 바깥 클래스의 인스턴스 주소를 저장하기 위해 다음과 같이 코드를 작성해야 한다.
      • 바깥클래스명.this
    • 바깥 클래스의 인스턴스 주소는 바깥 클래스의 인스턴스를 가지고 이너 클래스의 인스턴스를 생성할 때 저장한다.
      • 즉 이너 클래스의 생성자를 호출할 때 바깥 클래스의 인스턴스 주소를 파라미터로 전달한다.
      • 이를 위해 컴파일러는 이너 클래스를 컴파일 할 때 생성자를 변형한다.

로컬 클래스

  • 메서드 안에 정의하는 클래스를 로컬 클래스라 한다.
  • 특정 메서드 안에서만 사용되는 경우 로컬 클래스로 정의한다.
    • 노출을 줄이면 유지 보수에 좋다.
  • 로컬 클래스는 메서드가 로딩되면 그 메서드 안에서 계속 사용할 수 있다.

Categories:

Updated: