[JAVA] 자바 - static 중첩 클래스 & 내부 클래스(member class)
by mini_min[JAVA]
자바 - static 중첩 클래스 & 싱글턴 & 내부 클래스(member class)
✔️ static 중첩 클래스
클래스 안에 클래스의 멤버로 선언된 static 클래스
외부 클래스의 객체 생성과 상관없이 객체를 생성할 수 있는 class를 말한다.
해당 클래스는 컴파일하면 "외부클래스명$중첩클래스명.class(Test1$User1.class)" 파일이 생성된다.
🏷️ 형식
[접근 제어자] class 외부클래스명 {
[접근제어자] static class 중첩클래스명 {
}
}
🏷️ static 중첩 클래스 특징
- 외부 클래스의 클래스 변수와 클래스 메소드는 바로 접근하여 사용이 가능하지만, 외부 클래스의 인스턴스 변수와 메소드는 static 중첩 클래스 안에서 바로 접근이 불가능하다.
⭕ 외부 클래스의 객체를 생성해야 접근할 수 있음! (인스턴스 변수/메소드니까)
- 외부 클래스의 객체 생성 없이 static 중첩 클래스는 다른 클래스에서 객체 생성하여 접근 가능
💡 다른 클래스에서 static 중첩 클래스 객체 생성
외부클래스명.중첩클래스명 객체 = new 외부클래스명.중첩클래스명();
class Test1 {
int a = 10;
static int b = 100;
public void print() {
System.out.println("a :" + a + ", b: " + b);
}
public static void sub() {
}
static class User1 {
int x = 50;
public void write() {
System.out.println(b); //
}
public void disp() {
Test1 tt = new Test1();
System.out.println(tt.a);
}
}
}
//외부에서 static 중첩 클래스 객체 생성하는 방법
//Test1 안에 User1
Test1.User1 u = new Test1.User1();
u.write();
💡 static 중첩 클래스에 있는 메소드에서 외부 클래스에 있는 '인스턴스 변수 a' 는 호출 불가. 외부 클래스의 객체가 아직 생성되지 않았기 때문이다. 접근하고 싶으면 외부 클래스 객체 생성해서 메모리 할당 시켜야함
✔️ 내부 클래스(member class)
멤버 클래스란? 클래스 안에 클래스의 멤버로 선언된 내부 멤버 클래스! (인스턴스 클래스다.)
🏷️ 형식
[접근 제어자] class 외부클래스명 {
[접근제어자] class 중첩클래스명 {
}
}
🏷️ 특징
- 외부 클래스의 클래스 변수, 메소드는 바로 접근 가능해 사용 가능하다.
- 외부 클래스의 인스턴스 변수, 메소드도 바로 접근 사용 가능!
(역으로)
- 외부 클래스의 메소드에서 멤버 클래스를 접근하려면 멤버 클래스의 객체를 생성하여 접근해야한다.
- 외부 클래스의 객체가 생성되어야 객체를 생성할 수 있다.
= 외부에서 멤버 클래스 단독으로 객체 생성 불가
💡 다른 클래스에서 내부 멤버 클래스 객체 생성
외부클래스명 객체1 = new 외부클래스명();
외부클래스명.멤버클래스명 객체2 = 객체1.멤버클래스명();
외부클래스명.멤버클래스명 객체 = new 외부클래스명().new멤버클래스명();
class Test4{
int a = 10;
static int b = 20;
public void print(){
System.out.println(a + "," + b);
}
public void sub(){
User4 u = new User4();
u.write();
}
//내부클래스
//외부 객체가 생성되어야 객체를 생성할 수 있는 클래스
class User4{
int x = 100;
public void write(){
System.out.println(a);
}
}
}
Test4 tt = new Test4(); //외부꺼 만들었음
Test4.User4 uu = tt.new User4(); //멤버 클래스 객체 .하는 경우 드물다.
uu.write();
💡 외부 클래스 객체가 생성되어야 내부 클래스 객체도 생성 가능하다.
이제 1)외부 클래스 객체 생성 2)멤버 클래스 객체 생성
'Java' 카테고리의 다른 글
[JAVA] 자바 - 컬렉션(Collection) 개념과 List 인터페이스 (0) | 2022.07.28 |
---|---|
[JAVA] 자바 - 예외 처리(Exception) & 예외 넘기기(throws) ⭐⭐ (0) | 2022.07.27 |
[JAVA] 자바 - 익명 구현(anonymous) (인터페이스 익명 구현) (0) | 2022.07.27 |
[JAVA] 자바 - 인터페이스와 추상 클래스 (2) (0) | 2022.07.26 |
[JAVA] 자바 - 인터페이스 (interface) 정의 (1) (0) | 2022.07.26 |
블로그의 정보
개발자 미니민의 개발로그
mini_min