Search
Duplicate
😀

11. 추상 클래스

태그

추상 클래스, 추상 메서드

추상 메서드

메서드의 시그니쳐(리턴 타입, 메서드명, 매개변수)만 정의
구체적인 행위, 즉 블록({}) 부분은 정의되지 않은 특수한 메서드
abstract 예약어를 통해 선언

추상 클래스

최소한의 수정으로 원하는 객체를 사용하여 유지보수를 편하게 하기 위함
추상 클래스는 일반적으로 하나 이상의 추상 메서드를 포함한다.
추상 메서드가 없는 클래스도 추상 클래스로 선언 가능하다
하지만 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다.
추상 클래스는 객체 생성을 할 수 없다.
추상 클래스를 상속받은 자식 클래스는 부모의 모든 추상 메서드를 Overriding해야한다. (안하면 컴파일 에러)

내부 클래스

클래스가 다른 클래스를 포함하는 경우, 내부에 포함된 클래스를 내부 클래스라고 한다
파일 크기의 최소화, 보안, 성능 향상, 이벤트 처리 등을 쉽게하기 위하여 사용됨
내부 클래스는 정의되는 위치에 따라서 멤버 클래스와 지역 클래스로 나뉨
내부 클래스가 생성되기 위해서는 외부 클래스의 객체가 반드시 필요하다!

내부 클래스 - 멤버 클래스

멤버 변수와 동일한 위치에 선언된 내부 클래스
static 예약어가 붙은 static 멤버와 instance 멤버로 나뉨
동일한 클래스 뿐만 아니라 다른 클래스에서도 활용될 수 있음
클래스의 멤버 변수와 성격이 비슷함
instance 멤버 내부 클래스
클래스의 멤버와 동일한 위치에서 선언되는 내부 클래스
다른 외부의 클래스에서도 사용 가능
내부 클래스의 객체 생성을 위해 외부 클래스의 객체를 생성해야 함
컴파일 하는 경우 2개의 클래스 파일이 생성된다.
Outside.class
Outside$Inside.class → 외부클래스명$내부클래스명.class
static 멤버 내부 클래스
외부 클래스의 객체를 선언하지 않고도 내부 클래스 객체를 생성할 수 있음

내부 클래스 - 지역 클래스

메서드 내에 클래스가 정의되어 있는 경우
지역 클래스(이름이 있음), 무명 클래스(이름이 없음)으로 나뉜다.
활용 범위가 메서드 블록 내부로 제한되는 특징을 갖는 등 지역 변수와 성격이 비슷함
이름이 있는 지역 내부 클래스
클래스의 이름이 명시되는 클래스
지역 변수와 동일한 범위를 가지기 때문에 클래스가 선언된 메서드 블록 내에서만 사용 가능
컴파일 할 시 2개의 .class 파일 생성
Outer.class
Outer$1$Inside.class → 외부클래스명$1$지역 내부클래스명.class
이름이 없는 지역 내부 클래스
이름을 갖지 않는 내부 클래스
new 예약어 뒤에 명시된 클래스가 기존의 클래스인 경우에는 자동적이로 이 클래스의 자식 클래스가 된다.
이름이 없는 지역 내부 클래스는 추상 클래스의 객체를 내부 클래스 형태로 생성할 때 자주 사용
추상 클래스는 추상 메서드를 포함하고 있기 때문에 객체를 생성할 수 없음
추상 클래스를 상속한 클래스가 만들어져 객체를 생성해야 함
간단하게 이름이 없는 지역 내부 클래스로 만들어 사용하는 것이 편리할 수 있음