Static, Final, Abstract, Interface
0. 개요
1. static
2. final
3. abstract
4. interface
0. 개요
static / final / abstract
1. static
- 필드(속성)과 메서드(행위) 선언 시에 static 키워드를 붙여 사용
- 원칙적으로 클래스 이름으로 접근
- 객체 생성없이 사용할 수 있으므로 생성자에서 초기화 작업을 안 함
- static 메서드와 필드에서 instance 필드, 메서드를 이용하려면 객체 생성 후
참조 변수로 접근해야 함
1) 필드
- 필드에서 객체마다 가지고 있을 필요가 없는 공용적인 속성의 경우 static으로 선언
예) 계산기로 원의 넓이를 구할 때 π는 계산기 객체마다 존재 - static으로 선언
2) 메서드
- 외부에서 주어진 매개값들을 이용하는 경우라면 static method로 선언
예) 계산기 클래스의 덧셈, 뺄셈 기능은 static으로 선언
2. final
- final 필드는 프로그램 실행 도중에 수정이 불가능 (불변)
- final 클래스는 하위 클래스를 만들 수 없음 = 상속이 불가능
- final 메서드의 경우 최종적인 메서드이므로 overriding이 불가능
3. abstract
- 구체적인 실체가 아닌, 실체들의 공통된 속성을 가진 것 = 추상
- 공통적인 특성을 추출해 선언한 클래스 = 추상 클래스
- 추상 클래스(상위)와 실체 클래스(하위)는 상속 관계
- 추상 클래스는 실체 클래스의 공통되는 필드와 메서드를 추출해 만듦
= 객체를 직접 생성해서 사용할 수 없음 = new 연산자를 통한 인스턴스 생성 불가능
= 상속을 통한 자식 클래스에 의해서 사용가능
- 하위 객체가 생성될 때 super 메서드를 이용하여 추상 클래스를 호출
= 추상 클래스도 반드시 생성자가 있어야
- 추상 클래스는 추상 메서드를 선언할 수 있고 추상 클래스는 메서드 선언부만 존재
= { }가 없는 메서드
- 하위 클래스는 반드시 추상 메서드를 overriding해야한다
4. interface
- 추상(abstract)과 많이 겹치는 개념
- 단, abstract class가 overriding을 강요하는 수준이라면 interface의 경우 무조건 overriding을 해야함 (overriding을 더욱 강제)
- 클래스 간의 커플링 정도를 낮추고 응집도를 높일 수 있음
- 자바가 다중 상속을 금하고 있지만 interface 구현(implements)은 여러 개로 할 수 있음