Day 36

ChangWoo·2023년 5월 11일
0

자바의 정석

목록 보기
36/71

ch 7-45~50 내부 클래스의 제어자와 접근성

내부 클래스의 제어자와 접근성

내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일

  • 원래 클래스 앞에는 (default) 또는 public만 가능하다.
  • 그러나, 내부 클래스 앞에는 private, protected가 가능하다.

내부 클래스의 제어자와 접근성 - 예제 1

  • 인스턴스 내부 클래스
  • static 내부 클래스 : static 멤버를 가질 수 있는 것은 static 멤버 단 하나다.
  • 지역내부 클래스
  • 내부 클래스를 정의했는데 static 멤버가 필요할 때, 내부 클래스가 static 내부 클래스여야 한다.
  • static 멤버는 객체 생성 없이 사용가능 해야한다.
  • 그런데, static이 아니면, 객체를 생성해야 사용할 수 있으므로 모순이 발생한다.
  • 그래서 내부클래스에서 static 멤버를 가지려면, 무조건 static 내부 클래스여야 한다.
  • static 내부 클래스에서는 외부 클래스의 인스턴스 멤버에 접근할 수 없다.
  • 상수인 경우에는, 인스턴스 내부 클래스와 지역 내부 클래스에서 static 멤버를 가질 수 있다.
  • 내부클래스이름.상수로 사용할 수 있다.

내부 클래스의 제어자와 접근성 - 예제 2

  • 인스턴스 멤버 -> static 멤버 : 항상 가능
  • statict 멤버 -> 인스턴스 멤버 : 불가능

내부 클래스의 제어자와 접근성 - 예제 3

  • outerIv가 private 타입이지만, 내부 클래스인 InstanceInner 에서 접근할 수 있다.
  • 원래 private은 클래스 내에서만 사용 가능하지만, 내부 클래스에서도 사용 가능하다.
  • 내부 클래스에서는 외부 클래스의 private 멤버도 접근 가능하다.
  • 지역 내부 클래스에서는 변수X, 상수O (변수는 메서드 종료와 함께 소멸 된다.)
  • 내부클래스의 객체가 지역변수보다 더 오래 존재 가능
  • 외부 클래스의 지역변수는 final이 붙은 변수(상수)만 접근 가능하다.

내부 클래스의 제어자와 접근성 - 예제 4

  • 외부 클래스의 객체를 선 생성해야 내부 클래스를 후 생성할 수 있다.
  • static 내부 클래스는 외부 클래스의 객체를 생성하지 않아도 생성할 수 있다.
  • 컴파일 시 5개의 클래스가 생성된다.
  • 아래 3개의 클래스는 내부클래스
  • 외부클래스이름 $ 가 앞에 붙는다.
  • 그런데, 지역변수는 외부클래스이름 $ 숫자가 붙는데, 메서드는 여러 개 사용할 수 있는데 이름이 같은 클래스가 있을 수 있기 때문에

내부 클래스의 제어자와 접근성 - 예제 5

  • value라는 똑같은 이름의 변수가 존재하는데 각각 외부클래스의 iv, 외부클래스의 iv, lv다.
  • 지역변수와 iv를 구분하기 위해 this를 사용하는데, 그 this는 iv를 의미한다.
  • 외부클래스의 iv는 외부 클래스의 이름을 붙여주면 된다.

ch 7-51,52 익명 클래스

익명 클래스 (anonymous class)

  • 이름이 없는 일회용 클래스. 정의와 생성을 동시에
new 조상클래스이름() {
	// 멤버 선언
}
	또는
new 구현인터페이스이름() {
	// 멤버 선언
}
  • 원래는 1.클래스정의 2.객체생성인데, 이름이 없는 클래스이기 때문에 조상클래스이름 혹은 구현인터페이스이름을 적는다.

  • 이름이 없는 클래스라서 컴파일 시, 숫자가 뜬다.
  • 내부 클래스라서 외부 클래스 이름이 붙는다.

익명 클래스 예제

  • AWT(Java의 윈도우 프로그래밍)
  • 대부분 1회성 클래스, 그래서 익명클래스로 만든다.
  • 조상클래스 이름을 대신 적어준다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글