추상 클래스, 추상 메서드
추상 메서드
•
메서드의 시그니쳐(리턴 타입, 메서드명, 매개변수)만 정의
•
구체적인 행위, 즉 블록({}) 부분은 정의되지 않은 특수한 메서드
•
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 예약어 뒤에 명시된 클래스가 기존의 클래스인 경우에는 자동적이로 이 클래스의 자식 클래스가 된다.
•
이름이 없는 지역 내부 클래스는 추상 클래스의 객체를 내부 클래스 형태로 생성할 때 자주 사용
•
추상 클래스는 추상 메서드를 포함하고 있기 때문에 객체를 생성할 수 없음
◦
추상 클래스를 상속한 클래스가 만들어져 객체를 생성해야 함
◦
간단하게 이름이 없는 지역 내부 클래스로 만들어 사용하는 것이 편리할 수 있음