❣️내부 클래스❣️
클래스 내부에 선언한 클래스
class 외부클래스{
class 내부클래스 {
}
}
💌 인스턴스 내부 클래스
인스턴스 변수를 선언할 떄와 같은 위치에 선언
외부 클래스 내부에서만 생성하여 사용하는 객체를 선언할 때 사용 (다른 외부 클래스에서 사용할 일이 없을 때)
인스턴스 외부 클래스 생성 후 인스턴스 내부 클래스 생성됨 (외부 클래스 생성 전 사용 불가)
class 외부클래스{
private 내부클래스 내클;
public 외부클래스(){
내클 = new 내부클래스();
}
class 내부클래스 {
}
public void 내부클래스사용(){
내부클래스.안에든거사용;
}
}
외부 클래스의 private 멤버 내부 클래스에서도 사용 가능
내부 클래스 내부에 정적 변수/메서드 사용 불가
문법적으로는 내부 클래스를 private로 설정하지 않았을 시 타 클래스에서도 사용이 가능하긴 함
💌 정적 내부 클래스
내부 클래스가 외부 클래스 생성과 무관하게 사용할 수 있고 / 정적 변수를 사용할 수 있어야 할 때 사용
class 외부클래스{
int 외부클래스의_인스턴스변수 =0;
static int 외부클래스의_정적변수 =0;
static class 정적내부클래스 {
int 정적내부클래스의_인스턴스변수 =0;
static int 정적내부클래스의_정적변수 =0;
void 정적내부클래스의_일반메서드(){
// 외부클래스의_인스턴스변수 사용불가X
// 외부클래스의_정적변수 사용가능O
// 정적내부클래스의_인스턴스변수 사용가능O
// 정적내부클래스의_정적변수 사용가능O
}
static void 정적내부클래스의_정적메서드(){
// 외부클래스의_인스턴스변수 사용불가X
// 외부클래스의_정적변수 사용가능O
// 정적내부클래스의_인스턴스변수 사용불가X
// 정적내부클래스의_정적변수 사용가능O
}
}
}
다른 클래스에서 외부 클래스의 생성 없이 정적 내부 클래스 생성 가능
외부클래스.정적내부클래스 정내클 = new 외부클래스.정적내부클래스();
다른 클래스에서 외부 클래스의 생성 없이 정적 내부 클래스의 멤버 이용 가능
외부클래스.정적내부클래스.정적내부클래스의_일반메서드();
정적 내부 클래스의 일반 메서드와 정적 메서드가 다른 점이 무엇인가?
정적 내부 클래스의 인스턴스 변수 사용가능여부만 다른 것인가? 무슨 의미가 있지?
둘 다 외부 클래스의 생성과 무관하게 바로 쓸 수 있는 것 아닌가?
💌 지역 내부 클래스
메서드 내에 정의한 클래스
메서드 내에서만 사용 가능
class 외부클래스{
외부클래스의_메소드(매개변수 매개){
int 외부클래스의_메소드의_지역변수 =0;
class 지역내부클래스{
// 외부클래스의_메소드의_지역변수, 매개 사용 -> 상수체인지
}
return new 지역내부클래스();
}
}
외부클래스 외클 = new 외부클래스();
지역내부클래스 지내클 = 외클.메서드();
지내클.지내클의멤버; //사용
외부클래스를 생성하고 지역내부클래스가 있는 메소드의 리턴을 받는 형식으로 사용
메서드의 호출이 끝나면 메서드의 지역변수는 사라지지만, 호출 이후로도 지역내부클래스에서 쓰였던 지역변수는 계속 쓰일 수 있으므로
지역내부클래스에서 쓰인 지역변수는 상수 처리됨 ( 값 변경 불가 )(컴파일시 자동변경)
💌 익명 내부 클래스
클래스 이름을 사용하지 않는 클래스
단 한 번만 인터페이스를 상속한 클래스를 생성하여 사용할 때
class 외부클래스{
외부클래스의_메소드(){
// 1. 클래스 이름을 빼고 클래스를 바로 생성하는 방법
return new 인터페이스(){
// 인터페이스 구현
};
// 2. 인터페이스나 추상 클래스형 변수를 선언하고 클래스를 생성해 대입하는 방법
인터페이스 인터 = new 인터페이스(){
// 인터페이스 구현
};
}
}
- 안드로이드 프로그래밍에서 위젯의 이벤트를 구현하는 핸들러를 구현할 때 사용 , 등
으악
+
정적 메서드에서는 인스턴스 변수 사용 불가! 지만
정적 내부 클래스는 인스턴스 변수를 가질 수 있음.
+
지역 변수는 메서드가 호출될 때 스택 메모리에 생성되고 메서드의 수행이 끝나면 메모리에서 사라짐
끙
'💾 Backend > 자바' 카테고리의 다른 글
💞Static 정적 멤버💞 (0) | 2023.06.10 |
---|---|
💞모듈/패키지💞 (0) | 2023.06.09 |
💖자바 스트림💖 (1) | 2023.06.02 |
💕자바 탐구 - 배틀게임 제작💕 (2) | 2023.05.28 |
💗자바 ArrayList 클래스💗 (1) | 2023.05.26 |