반응형
1. 내부클래스
- 내부클래스는 클래스 내에 클래스가 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다.
- 내부클래스는 사용빈도가 높지 않으므로 내부 클래스의 기본 원리와 특징을 이해하는 정도만 알아보자.
- 내부클래스는 클래스 내에 선언된 클래스로서 두 클래스가 서로 긴밀한 관계에 있기 때문에 사용한다.
- 내부 클래스의 장점은 다음과 같다.
- 내부클래스에서 외부클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.
2. 내부클래스의 종류와 특징
- 내부클래스의 종류는 변수의 선언 위치에 따른 종류와 같다.
- 내부클래스는 마치 변수를 선언하는 것과 같은 위치에 선언할 수 있으며, 변수의 선언 위치에 따라 인스턴스 변수, 클래스변수, 지역변수로 구분되는 것과 같이 내부클래스도 다음과 같이 구분되어진다.
내부클래스 종류 특징 인스턴스 클래스
( instance class )외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의 인스턴스처럼 다뤄진다.
주로 외부클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다.스태틱 클래스
( static class )외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의 static멤버처럼 다루어진다.
주로 외부클래스의 static멤버, 특히 static 메소드에서 사용될 목적으로 선언된다.지역 클래스
( local class )외부클래스의 메소드에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.
3. 내부클래스의 제어자와 접근성
- 인스턴스 클래스와 스태틱 클래스는 외부클래스의 멤버변수와 같은 위치에 선언되며, 또한 멤버변수와 같은 성질을 가진다.
- 즉, 내부클래스가 외부클래스의 멤버와 같이 간주되고 인스턴스 멤버와 static 멤버 간의 규칙이 내부클래스에서도 똑같이 적용된다.
O/X 퀴즈
- 인스턴스 메소드에서 스태틱변수( 클래스변수 )를 사용할 수 있다. ==> O
- 스태틱 메소드에서 인스턴스 변수를 사용할 수 있다. ==> X
- 내부클래스 중에서 스태틱 클래스만 static 멤버를 가질 수 있다.
- 다만 final과 static이 동시에 붙은 변수는 상수이므로 모든 클래스에 정의가 가능하다.
- 인스턴스 멤버는 같은 클래스에 있는 인스턴스 멤버와 static멤버 모두 직접 호출이 가능하지만, static멤버는 인스턴스 멤버를 직접 호출할 수 없는 것처럼 인스턴스 클래스는 외부클래스의 인스턴스 멤버를 객체 생성 없이 바로 사용할 수 있지만 스태틱 클래스는 외부클래스의 인스턴스 멤버를 객체생성없이 사용할 수 없다.
- 마찬가지로 인스턴스 클래스는 스태틱 클래스의 멤버들을 객체생성없이 사용할 수 있지만, 스태틱 클래스에서는 인스턴스 클래스의 멤버들을 객체생성없이 사용할 수 없다.
4. 익명클래스
- 익명클래스는 특이하게도 다른 내부클래스들과 달리 이름이 없다.
- 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한 번만 사용될 수 있고 오직 하나의 객체만을 사용할 수 있는 일회용 클래스이다.
- 이름이 없기 때문에 생성자도 가질 수 없으며, 조상클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하기 때문에 하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다.
- 오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있다.
* 한 번씩만 쓰고 버릴 때 사용 - 익명클래스는 앞에 있는 생성자의 클래스를 상속 받고 있는 이름 없는 자식 클래스이다. 생성자의 클래스를 상속 받고 있기 때문에 업캐스팅이 되는 것이다. 그래서 익명클래스에 새로 추가하는 것들은 의미가 없다.
반응형
'웹개발 > JAVA' 카테고리의 다른 글
[JAVA] Object, String, Math, Wrapper 클래스 (0) | 2022.01.29 |
---|---|
[JAVA] 예외처리( exception handing ) (0) | 2022.01.28 |
[JAVA] 인터페이스( interface ) (0) | 2022.01.26 |
[JAVA] 추상클래스( abstract class ) (0) | 2022.01.26 |
[JAVA] 다형성( polymorphism ) (0) | 2022.01.25 |