Programing_Java
Section#13 _ 내부 클래스 본문
#1 내부 클래스란?
: 클래스 안에 만들어진 또 다른 클래스 == 중첩 클래스
: 두 클래스 멤버들 간에 손쉽게 접근 가능
: 불필요한 클래스를 감춰 코드의 복잡성을 줄일 수 있음
#2 내부 클래스의 종류
: 선언된 위치에 따라 구분하며, 인스턴스, 정적, 지역, 익명 클래스로 구분
메서드 | 설명 | ||||||
인스턴스 | 외부 클래스의 멤버 변수와 같은 위치에 선언 → 외부 클래스의 멤버 변수와 관련된 직업에 사용될 목적으로 선언 | ||||||
정적 | 외부 클래스의 클래스 변수와 같이 static 키워드 부여 | ||||||
지역 | 외부 클래스 메서드 내부에서 선언하여 사용 → 메서드 내부에서만 사용 가능 |
#2-1 인스턴스 클래스
: 인스턴수 변수와 같은 위치에 선언, 외부 클래스의 인스턴스 멤버처럼 다루어짐
: 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언
: 외부 클래스의 인스턴스 변수를 사용할 수 있지만, 정적 변수나 메서드를 호출하는 건 불가능
: 인스턴스 클래스 생성
class Outer{
private String name;
...
class Inner{
private String name;
}
}
: 인스턴스 클래스 선언 → 외부 객체가 생성된 상태에서 객체 생성을 할 수 있음
Outer outer = new Outer();
Outer.Inner in = outer.new Inner();
#2-2 정적 내부 클래스 (static class)
: static 키워드를 사용해 클래스를 선언한 후 정적 내부 클래스 생성
: 외부 클래스의 static 메서드에서 사용될 목적으로 선언
: 클래스에 속하지만 독립적으로 존재
: 외부 클래스의 존재와 상관없이 정적 변수 사용 가능 → 외부 클래스의 인스턴스 변수 or 메서드를 정적 내부 클래스에서 사용 불가
: 정적 내부 클래스 생성 → 인스턴스 멤버와 동일한 위치
class Outer{
private String name;
...
static class Inner{
private String name;
}
}
: 정적 내부 클래스 선언 → 외부 클래스 객체를 선언하지 않아도 선언 가능
Outer.Inner in = new Outer.Inner();
#2-3 지역 클래스 (local class)
: 외부 클래스의 메서드 내에서 선언되어 사용 → 메서드 내에서만 사용 가능, 메서드의 실행이 끝나면 해당 클래스도 사용 종료
: 접근 제한자와 static을 붙일 수 없음
: 지역 클래스 생성
class LocalClass{
...
void print(){
...
class A{
...
}
A a = new A();
}
}
#3 내부 클래스의 접근 제한
#3-1 접근 제한자
: 접근 제한자를 통해 외부에서의 접근 제한 가능
: 인스턴스 클래스를 private으로 선언 → getter & setter를 통해 클래스를 사용하도록 제한
#3-2 지역 클래스의 접근 제한
: 메서드 내에서 선언되어 사용
: 지역 클래스에서 메서드 내의 변수를 사용할 때는 변수를 복사해 사용 → 해당 변수가 변경되면 오류 발생
#4 익명 클래스
: 이름이 없는 클래스 → 클래스 선언과 객체의 생성을 동시에 함 → 단 한번만 사용 가능 → 하나의 객체만 생성할 수 있는 일회용
: 생성자 선언 불가능, 둘 이상의 인터페이스 구현 불가능
: 단 하나의 클래스 상속 or 하나의 인터페이스 구현
: 인터페이스의 기능을 구현할 때 사용 → 인터페이스를 익명 클래스로 선언하여 기능을 직접 구현
: 추상 클래스 or 인터페이스를 상속을 통해 구현하지 않고 직접 구현할 때 주로 사용
→ 추상 클래스 or 인터페이스는 구현되지 않은 추상 메서드가 있기 때문에 객체 선언 불가능
: 익명 클래스 선언 형식을 이용하여 상속 없이 구현
: 익명 클래스 선언 → 클래스 생성자 뒤에 코드 블록 추가 → 해당 클래스가 가진 메서드들을 Override 하여 구현
// 객체 생성
Person p = new Person();
@Override
void method(){
}
...
};
→ 클래스 자체를 재정의하여 구현 : 구현된 문법 마지막에 세미콜론(;)
'MENTOR JAVA' 카테고리의 다른 글
Section#15 _ 기본 API 클래스 (0) | 2025.01.22 |
---|---|
Section#14 _ 예외 처리 (1) | 2025.01.21 |
Section#11 _ 다형성과 타입 변환 (1) | 2025.01.18 |
Section#10 _ 상속 (0) | 2025.01.17 |
Section#9 _ 생성자 (0) | 2025.01.16 |