SlideShare a Scribd company logo
1 of 7
Item 22.
static 멤버 클래스를 많이 사용하자.
Chapter 4. 클래스와 인터페이스
nested class(inner class)
• static 멤버 클래스
• static이 아닌 멤버 클래스
• 익명 클래스
• 지역 클래스
static 멤버 클래스
• 다른 클래스의 static 멤버로 선언
• 외곽 클래스의 모든 멤버들을 사용할 수 있는 클래스
• ex) Map을 구현하는 클래스의 Entry
• instance field에 접근 불가
• private static 멤버 클래스는 외곽 클래스가 나타내는 객체의 컴포넌
트들을 표현하는데 주로 사용
public abstract class AbstractMap<K,V> implements Map<K,V> {
…
public static class SimpleEntry<K,V>
implements Entry<K,V>, java.io.Serializable{ … }
}
static이 아닌 멤버 클래스
• static이 아닌 멤버 클래스의 인스턴스는 자신의 외곽 클래스의 인스
턴스가 있어야만 생성할 수 있다.
• instance field에 접근 가능
• 해당 클래스가 public이나 private이라면 향후 배포판의 바이너리 수
준 호환성을 위해 static과 static이 아닌 클래스를 선택하는 것이 중요
하다.
• 외곽 클래스의 인스턴스를 사용할 필요가 없는 멤버클래스를 선언한
다면 static 멤버 클래스로 만들자.
익명 클래스
• 선언된 곳에서만 인스턴스를 생성
• instanceof 연산자 사용 불가
• 익명 클래스의 클라이언트는 그 클래스의 어떤 멤버 메소드도 호출
불가
• 함수 객체를 생성하는데 많이 사용됨
지역 클래스
• 제일 적게 사용되는 inner class
• {}로 둘러쌓인 메소드나 블록 어디든 선언될 수 있다.
• 지역변수와 동일한 유효범위를 가짐
• 이름을 가질 수 있어 반복적으로 사용가능
• 익명 클래스처럼 외곽 인스턴스를 가지며 static 멤버 포함 불가
• 가독성을 위해 가급적 코드 길이가 짧아야 함
요약.
• nested class (inner class)
– inner class, static inner class, anonymous class, local class
• 메소드 내부에 두기 적합하지 않다면 → 멤버 클래스
• 멤버 클래스의 각 인스턴스가 외곽 클래스의 인스턴스를 참조할 필요가 있다
면 static이 아닌 멤버 클래스, 그렇지 않다면 static 멤버 클래스
• 클래스가 어떤 메소드 내부에 속하고, 한 곳에서만 인스턴스를 생성하고 그
클래스의 특성을 나타내는 타입이 존재하면 익명 클래스, 그렇지 않으면 지역
클래스

More Related Content

More from Sungho Moon

Item 33 서수 인덱스 대신 EnumMap을 사용하자.
Item 33 서수 인덱스 대신EnumMap을 사용하자.Item 33 서수 인덱스 대신EnumMap을 사용하자.
Item 33 서수 인덱스 대신 EnumMap을 사용하자.Sungho Moon
 
Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자Sungho Moon
 
Item 26. 제네릭 타입을 애용하자
Item 26. 제네릭 타입을 애용하자Item 26. 제네릭 타입을 애용하자
Item 26. 제네릭 타입을 애용하자Sungho Moon
 
Item 24. 컴파일 경고 메시지가 없게 하자
Item 24. 컴파일 경고 메시지가 없게 하자Item 24. 컴파일 경고 메시지가 없게 하자
Item 24. 컴파일 경고 메시지가 없게 하자Sungho Moon
 
Item 19. 타입을 정의할 때만 인터페이스를 사용하자.
Item 19. 타입을 정의할 때만 인터페이스를 사용하자.Item 19. 타입을 정의할 때만 인터페이스를 사용하자.
Item 19. 타입을 정의할 때만 인터페이스를 사용하자.Sungho Moon
 
Item10. toString 메소드는 항상 오버라이드 하자
Item10. toString 메소드는 항상 오버라이드  하자Item10. toString 메소드는 항상 오버라이드  하자
Item10. toString 메소드는 항상 오버라이드 하자Sungho Moon
 
item12. Comparable 인터페이스의 구현을 고려하자
item12. Comparable 인터페이스의 구현을 고려하자item12. Comparable 인터페이스의 구현을 고려하자
item12. Comparable 인터페이스의 구현을 고려하자Sungho Moon
 

More from Sungho Moon (7)

Item 33 서수 인덱스 대신 EnumMap을 사용하자.
Item 33 서수 인덱스 대신EnumMap을 사용하자.Item 33 서수 인덱스 대신EnumMap을 사용하자.
Item 33 서수 인덱스 대신 EnumMap을 사용하자.
 
Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자Item 30 int 상수 대신 enum을 사용하자
Item 30 int 상수 대신 enum을 사용하자
 
Item 26. 제네릭 타입을 애용하자
Item 26. 제네릭 타입을 애용하자Item 26. 제네릭 타입을 애용하자
Item 26. 제네릭 타입을 애용하자
 
Item 24. 컴파일 경고 메시지가 없게 하자
Item 24. 컴파일 경고 메시지가 없게 하자Item 24. 컴파일 경고 메시지가 없게 하자
Item 24. 컴파일 경고 메시지가 없게 하자
 
Item 19. 타입을 정의할 때만 인터페이스를 사용하자.
Item 19. 타입을 정의할 때만 인터페이스를 사용하자.Item 19. 타입을 정의할 때만 인터페이스를 사용하자.
Item 19. 타입을 정의할 때만 인터페이스를 사용하자.
 
Item10. toString 메소드는 항상 오버라이드 하자
Item10. toString 메소드는 항상 오버라이드  하자Item10. toString 메소드는 항상 오버라이드  하자
Item10. toString 메소드는 항상 오버라이드 하자
 
item12. Comparable 인터페이스의 구현을 고려하자
item12. Comparable 인터페이스의 구현을 고려하자item12. Comparable 인터페이스의 구현을 고려하자
item12. Comparable 인터페이스의 구현을 고려하자
 

Recently uploaded

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Recently uploaded (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

Item 22. static 멤버 클래스를 많이 사용하자

  • 1. Item 22. static 멤버 클래스를 많이 사용하자. Chapter 4. 클래스와 인터페이스
  • 2. nested class(inner class) • static 멤버 클래스 • static이 아닌 멤버 클래스 • 익명 클래스 • 지역 클래스
  • 3. static 멤버 클래스 • 다른 클래스의 static 멤버로 선언 • 외곽 클래스의 모든 멤버들을 사용할 수 있는 클래스 • ex) Map을 구현하는 클래스의 Entry • instance field에 접근 불가 • private static 멤버 클래스는 외곽 클래스가 나타내는 객체의 컴포넌 트들을 표현하는데 주로 사용 public abstract class AbstractMap<K,V> implements Map<K,V> { … public static class SimpleEntry<K,V> implements Entry<K,V>, java.io.Serializable{ … } }
  • 4. static이 아닌 멤버 클래스 • static이 아닌 멤버 클래스의 인스턴스는 자신의 외곽 클래스의 인스 턴스가 있어야만 생성할 수 있다. • instance field에 접근 가능 • 해당 클래스가 public이나 private이라면 향후 배포판의 바이너리 수 준 호환성을 위해 static과 static이 아닌 클래스를 선택하는 것이 중요 하다. • 외곽 클래스의 인스턴스를 사용할 필요가 없는 멤버클래스를 선언한 다면 static 멤버 클래스로 만들자.
  • 5. 익명 클래스 • 선언된 곳에서만 인스턴스를 생성 • instanceof 연산자 사용 불가 • 익명 클래스의 클라이언트는 그 클래스의 어떤 멤버 메소드도 호출 불가 • 함수 객체를 생성하는데 많이 사용됨
  • 6. 지역 클래스 • 제일 적게 사용되는 inner class • {}로 둘러쌓인 메소드나 블록 어디든 선언될 수 있다. • 지역변수와 동일한 유효범위를 가짐 • 이름을 가질 수 있어 반복적으로 사용가능 • 익명 클래스처럼 외곽 인스턴스를 가지며 static 멤버 포함 불가 • 가독성을 위해 가급적 코드 길이가 짧아야 함
  • 7. 요약. • nested class (inner class) – inner class, static inner class, anonymous class, local class • 메소드 내부에 두기 적합하지 않다면 → 멤버 클래스 • 멤버 클래스의 각 인스턴스가 외곽 클래스의 인스턴스를 참조할 필요가 있다 면 static이 아닌 멤버 클래스, 그렇지 않다면 static 멤버 클래스 • 클래스가 어떤 메소드 내부에 속하고, 한 곳에서만 인스턴스를 생성하고 그 클래스의 특성을 나타내는 타입이 존재하면 익명 클래스, 그렇지 않으면 지역 클래스