Programing_Java

Section#13 _ 내부 클래스 본문

MENTOR JAVA

Section#13 _ 내부 클래스

Joyfullyever 2025. 1. 20. 19:43

#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