2026. 1. 19. 16:58ㆍ대우개발원 수업 내용/Java 정리
중첩 클래스 (nested class)
▪ 클래스 내부에 선언한 클래스
▪ 두 클래스의 멤버들을 서로 쉽게 접근하게 하고, 외부에는 불필요한 관계 클래스 감춤
▪ 코드 복잡성 줄임
중첩 인터페이스 (nested interface)
▪ 인터페이스 역시 클래스 내부에 선언 가능
▪ 해당 클래스와 긴밀한 관계 갖는 구현 클래스 만들기 위함
중첩 클래스
▪ 클래스 내부에 선언한 클래스. 클래스의 멤버를 쉽게 사용할 수 있고 외부에는 중첩 관계 클래스를
감춤으로써 코드의 복잡성을 줄일 수 있음
▪ 멤버 클래스: 클래스의 멤버로서 선언되는 중첩 클래스
▪ 로컬 클래스: 메소드 내부에서 선언되는 중첩 클래스
[중첩 클래스]
중첩 클래스를 컴파일하면 바이트 코드 파일(.class)이 별도로 생성
▪ 멤버 클래스 경우
A $ B .class (A는 바깥 클래스 B는 맴버 클래스)
▪ 로컬 클래스 경우
A $1 B .class (A는 바깥 클래스 B는 로컬 클래스)
인스턴스 멤버 클래스
▪ static 키워드 없이 중첩 선언된 클래스
▪ 인스턴스 필드와 메소드만 선언 가능하고 정적 필드와 메소드는 선언할 수 없음
인스턴스 멤버 클래스
▪ A 클래스의 멤버로 선언된 B 클래스
▪ 인스턴스 멤버 클래스 B는 주로 A 클래스 내부에서 사용되므로 private 접근 제한을 갖는 것이 일반적
예제 코드
실행 사진 및 출력결과
실행코드
package sec01;
/** 바깥 클래스 **/
public class APlus {
public APlus() {System.out.println("A 객체가 생성됨");}
/** 인스턴스 멤버 클래스 **/
public class B {
public B() { System.out.println("B 객체가 생성됨"); }
int field1;
// static int field2;
void method1() {}
// static void method2() {}
}
}
package sec01;
public class APlusEx {
public static void main(String[] args) {
APlus a = new APlus();
// 인스턴스 멤버 클래스 객체 생성
APlus.B b = a.new B();
b.field1 = 3;
b.method1();
}
}
예제코드
실행 사진 및 출력결과
실행코드
package sec01;
/** 바깥 클래스 **/
public class A {
// 인스턴스 멤버 클래스
class B {
// 인스턴스 필드
int field1 =1;
// 정적 필드
static int field2= 2;
// 생성자
B() {
System.out.println("B-생성자 실행");
}
// 인스턴스 메소드
void method1() {
System.out.println("B-metod1 실행");
}
// 정적 메소드(Java 17부터 허용)
static void method2() {
System.out.println("B-method2 실행");
} //Java 17부터 허용
}
// 인스턴스 필드 값으로 B 객체 대입
B field = new B();
// 생성자
A() {
B b = new B();
}
// 인스턴스 메서드
void method() {
B b = new B();
}
// 인스턴스 메서드
void useB() {
//B 객체 생성 및 인스턴스 필드 및 메서드 사용
B b = new B();
System.out.println(b.field1);
b.method1();
//B클래스의 정적 필드 및 메소드 사용
System.out.println(B.field2);
B.method2();
}
}
package sec01;
public class AEx {
public static void main(String[] args) {
// A 객체 생성
A a = new A();
// B 객체 생성
A.B b = a.new B();
// A 인스턴스 메소드 호출
a.useB();
}
}
[정적 멤버 클래스]
정적 멤버 클래스
▪ static 키워드와 함께 A 클래스의 멤버로 선언된 B 클래스
▪ 정적 멤버 클래스는 주로 default 또는 public 접근 제한을 가진다.
[중첩 클래스]
정적 멤버 클래스
▪ static 키워드로 선언된 클래스
▪ 모든 종류의 필드와 메소드 선언 가능
예제코드
실행 사진 및 출력결과
실행코드
package AStatic;
public class AStatic {
//인스턴스 멤버 클래스
static class B {
// 인스턴스 필드
int field1 = 1;
// 정적 필드
static int field2= 2;
// 생성자
B() {
System.out.println("B-생성자 실행");
}
// 인스턴스 메소드
void method1() {
System.out.println("B-method1 실행");
}
// 정적 메소드(Java17부터 허용)
static void method2() {
System.out.println("B-method2 실행");
} // Java17부터 허용
}
// 인스턴스 필드 값으로 B객체 대입
B field1 = new B();
// 정적 필드 값으로 B 객체 대입
static B field2 = new B();
// 생성자
AStatic() {
B b = new B();
}
// 인스턴스 메소드
void method1() {
B b = new B();
}
// 정적 메소드
static void method2() {
B b = new B();
}
}
package AStatic;
public class AStaticEx {
public static void main(String[] args) {
// B객체 생성
AStatic.B b = new AStatic.B();
System.out.println(b.field1);
b.method1();
// B 클래스의 정적 필드 및 메소드 사용
System.out.println(AStatic.B.field2);
AStatic.B.method2();
}
}
[중첩 클래스]
▪ A 클래스 외부에서 정적 멤버 클래스 C 객체 생성할 경우 A 객체 생성 필요하지 않음
예제코드 2
실행 사진 및 출력결과
실행코드
package sec01;
/** 바깥 클래스 **/
public class APlus {
public APlus() {System.out.println("A 객체가 생성됨");}
/** 인스턴스 멤버 클래스 **/
public class B {
public B() { System.out.println("B 객체가 생성됨"); }
int field1;
static int field2;
void method1() {}
static void method2() {}
}
/** 정적 멤버 클래스**/
static class C {
C() { System.out.println("C 객체가 생성됨"); }
int field1;
static int field2;
void method1() {}
static void method2() {}
}
}
package sec01;
public class APlusEx {
public static void main(String[] args) {
APlus a = new APlus();
// 인스턴스 멤버 클래스 객체 생성
APlus.B b = a.new B();
b.field1 = 3;
b.method1();
// 정적 맴버 클래스 객체 생성
APlus.C c = new APlus.C();
c.field1 = 3;
c.method1();
APlus.C.field2 = 3;
APlus.C.method2();
}
}
'대우개발원 수업 내용 > Java 정리' 카테고리의 다른 글
| Java 개념정리 16일차 (0) | 2026.01.21 |
|---|---|
| Java 개념정리 15일차 (0) | 2026.01.20 |
| Java 개념 정리 13일차 (1) | 2026.01.15 |
| Java 개념정리 12일차 (2) | 2026.01.15 |
| Java 개념정리 11일차 (1) | 2026.01.13 |



