객체지향 프로그래밍(33강 - 41강)
05 Jan 2020추상클래스
- 추상 메서드: 구현 코드가 없이 선언부만 있는 메서드
- 추상 클래스 : 추상메서드를 포함한 클래스
- 하위 클래스에 구현의 책임 위임
- abstract 예약어 사용
- new로 인스턴스화 할 수 없음
구현
public abstract class Example {
public abstract void test();
public abstract void test2();
}
- 메서드와 클래스에 abstract 키워드 사용
- 추상 메서드가 포함된 클래스는 추상 클래스로 선언
- 모든 메서드가 구현되었어도 클래스에 abstract 키워드를 사용하면 추상 클래스
사용
- 주로 상속의 상위 클래스로 사용
- 추상메서드: 하위 클래스가 구현해야 하는 메서드
- 구현된 메서드: 하위 클래스가 공통으로 사용하는 기능의 메서드로 재정의 가능
템플릿 메서드
템플릿 메서드
- 추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)를 정의한 메서드
- final로 선언하여 재정의 할 수 없게 함
템플릿 메서드 패턴
- 디자인 패턴의 일종으로 프레임 워크에서 많이 사용되는 설계 패턴
- 추상 클래스로 선언된 상위 클래스에서 추상 메서드를 이용하여 전체 구현의 흐름 정의
- 구체적인 각 메서드 구현은 하위 클래스에 위임
- 하위 클래스가 다른 구현을 했다고 해도 템플릿 메서드에 정의된 시나리오 대로 수행됨
final 예약어
- final 변수는 값이 변경될 수 없는 상수로 한 번만 값을 할당할 수 있음
- final 메서드는 하위 클래스에서 재정의 할 수 없음
- final 클래스는 더이상 상속되지 않음
public static final 상수
- 프로젝트 구현 시 여러 파일에서 공유해야 하는 상수값은 하나의 파일에 선언하여 사용
인터페이스
요소
- 추상 메서드: 모든 메서드는 추상 메서드
- 상수: 선언된 모든 변수로 상수로 처리됨
- 디폴트 메서드: 기본 구현을 가지는 메서드로 구현하는 클래스에서 재정의 가능(Java 8)
- 정적 메서드: 인스턴스 생성과 상관없이 인터페이스 타입으로 호출하는 메서드(Java 8)
- private 메서드: 인터페이스 내에서 사용하기 위해 구현한 메서드로 구현하는 클래스에서 재정의 할 수 없음(Java 9)
구현
public interface Calculator {
// 인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환
double PI = 3.14;
int ERROR = -999999999;
// 인터페이스에서 선언한 메서드는 컴파일 과정에서 추상 메서드로 변환
int add(int num1, int num2);
int substract(int num1, int num2);
int multiply(int num1, int num2);
int divide(int num1, int num2);
}
- 인터페이스를 구현한 클래스는 인터페이스 타입으로 변수를 선언하여 인스턴스 생성 가능
- 인터페이스는 구현 코드가 없으므로 타입 상속이라고도 함
- 하나의 클래스가 여러 인터페이스 구현 가능
- 디폴트 메서드의 이름이 중복 되는 경우에는 재정의
역할
- 클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는 명세(specification) 또는 약속
- 한 객체가 어떤 인터페이스의 타입이면 그 인터페이스의 메서드를 구현했다는 의미
- 클라이언트 프로그램은 실제 구현 내용을 몰라도 인터페이스 정의만 알면 객체 사용 가능
- 인터페이스를 구현해 놓은 다양한 객체 사용 가능(다형성)
상속
- 구현이 없으므로 extends 뒤에 여러 인터페이스 상속 가능
- 타입 상속(type inheritance)라고도 함