티스토리 뷰

Java

Java(중첩 클래스)

yoooon1212 2024. 5. 6. 21:28

 

class OuterClass{ //외부 클래스
	...
class NestedClass{ // 중첩 클래스
	...
	}
}

외부 클래스: 내부에 클래스를 가지고 있는 클래스

중첩 클래스: 클래스 내부에 포함되는 클래스

 

 

중첩 클래스 종류

 

 

 

정적 중첩 클래스: 앞에 static 이 붙어서 내장되는 클래스

비정적 중첩 클래스: static 이 붙지 않은 일반적인 중첩 클래스

- 내부 클래스: 클래스의 멤버처럼 선언되는 중첩 클래스

- 지역 클래스: 메서드의 몸체 안에서 선언되는 중첩 클래스

- 익명 클래스: 수식의 중간에서 선언되고 바로 객체화되는 클래스

 

 

내부 클래스(inner class)

클래스 안에 클래스를 선언한다.

 

외부 클래스의 인스턴스 변수와 메서드를 전부 사용할 수 있다.

private 로 선언되어 있어도 접근이 가능하다는 장점이 있다.

 

예시)

내부 클래스의 객체는 외부 클래스의 객체가 먼저 생성되어 있어야 생성할 수 있다.

 

지역클래스(local class)

메서드 안에 정의되는 클래스

 

이 메서드는 접근 제어 지정자를 가질 수 없다.

지역 클래스는 abstract 또는 final로만 지정할 수 있다.

외부 클래스의 인스턴스 변수뿐만 아니라 메서드의 지역변수에도 접근할 수 있다.

하지만 지역변수는 반드시 final로 선언되어야 한다.

 

예시)

 

중첩 클래스를 사용하는 이유

  • 중첩 클래스는 외부 클래스의 멤버가 private으로 선언되어 있더라도 접근할 수 있다.
  • 중첩 클래스는 외부에서 보이지 않는다. 즉, 철저하게 감춰진다.
  • 익명 클래스는 콜백 메서드(callback method)를 작성할 때 아주 편리한다.

 

 

익명 클래스

 

클래스를 정의하면서 동시에 객체를 생성한다.

 

이름이 없기 때문에 한 번만 사용이 가능하다.

하나의 객체만 생성하면 되는 경우에 많이 사용된다.

부모 클래스에서 상속을 받아서 작성하거나 인터페이스를 구현하여서 작성한다.

(new 키워드 다음에  부모  클래스 이름이나 인터페이스 이름을 적는다)

Class Car extends Vehicle {...}
Car obj = new Car(); // 이름이 있는 클래스
Vehicle obj = new Vehicle(){}; // 익명 클래스(클래스 정의 동시에 객체 생성)
// 부모 클래스 참조변수 = new 부모 클래스() {클래스 구현}
// 상속 받고자 하는 부모 클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 적는다.

 

익명 클래스도 내부 클래스와 같이 필드와 다른 메서드들을 정의할 수 있다.

다만, 메서드 안에 정의되는 지역 변수 중에서는 final로 선언된 변수만 사용이 가능하다.

주로 GUI의 이벤트 처리기를 구현하는 데 사용된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함