기본 콘텐츠로 건너뛰기

0.12 Static, Final, Abstract, Interface

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)은 여러 개로 할 수 있음