Java Section 12 : 추상 클래스와 인터페이스
01 추상 클래스와 추상 메서드
■ 추상 메서드 : 선언부만 작성하고 구현부는 작성하지 않고 남겨두는 미완성 메서드
- 오버라이딩을 위해 자바에서 지원하는 방법.
- "abstract" 키워드 함께 표기 + ;(세미콜론) 붙이기 (중괄호 x)
[접근 제한자] abstract 반환타입 메서드이름(매개변수1, 매개변수2,..);
- 추상메서드는 반드시 추상 클래스 안에 건언되어야 하며, 추강 메서드를 1개 이상 선언하면, 그 클래스는 추상 클래스로 선언되어야 한다.
■ 추상 클래스 : 하나 이상의 추상 메서드를 포함하는 클래스
[접근제한자] abstract class 클래스이름 {
// 필드
// 생성자
// 메서드(추상 메서드 포함)
}
- 멤버변수, 메서드, 생성자 모두 가능
- 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없음
- 자식 클래스의 생성자에서 super()를 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체를 생성한다.
□ 추상 클래스를 상속받은 모든 자식 클래스는 반드시 추상 메서드를 오버라이딩 및 재정의하여 구현해야 한다.
□ 추상 메서드/클래스를 사용하는 이유 : 자식 클래스 간의 공통적인 필드와 메서드 이름을 통일하고, 반드시 구현해야 하는 메서드를 선언하여 공통 규격을 제공하고자 함.
=> 다형성 구현
02 인터페이스 구현
■ 인터페이스 : 모든 메서드가 추상 메서드인 일종의 추상 메서드
- 추상 메서드와 상수로만 이루어지며, 스스로 객체를 생성할 수 없다.
- 즉, 객체를 사용하는 방법을 제공하는 새로운 블록이라 할 수 있음 => "공통 틀"만 제공
- "interface" 키워드 사용
- 다른 클래스들과의 매개체 역할이므로 항상 public으로 구현
- 모든 필드는 public, static, final이어야 하며, 모든 메서드는 public, abstract이어야 한다.
- 필드 대신 상수 선언 가능. 고정된 값만 선언할 수 있다.
[접근제한자] interface 인터페이스이름 {
public static final 자료형 상수명 = 값;
접근제한자 abstarct 메서드이름(매개변수1, 매개변수2, ..)
..
}
□ 추상 클래스 / 인터페이스 차이점
① 추상 클래스 : 클래스들의 공통적 특징을 추출하고 제공하여, 자식 클래스들이 상속받아 구현하도록 함
② 인터페이스 : 구현 클래스들의 기본 틀을 제공하면서도, 다른 클래스 코드들과의 중간 매개 역할을 함
03 인터페이스 사용
- 인터페이스는 추상 메서드를 구현해 줄 '구현 클래스'가 있어야 함
- "implements" 키워드 사용
[접근제한자] class 클래스이름 implements 인터페이스이름 {
// 필드
// 생성자
// 구현 메서드 (추상 메서드 오버라이딩)
}
- 인터페이스를 구현하려면 모든 추상 메서드를 구현해야 한다.
- 인터페이스의 상수를 가져와 사용할 경우 "인터페이스 이름. 상수 이름"으로 호출
□ 인터페이스 장점
① 정보 은닉 : 실제 구현 클래스 내용을 보지 않고도 개발 코드로 객체 사용 가능
② 모듈화 : 구현 클래스들이 독립적으로 구현되고 사용될 수 있고, 개발 코드에서 객체 변경이 필요할 때, 개발 코드의 수정을 최소화 할 수 있음
□ 하나의 클래스로 여러 인터페이스 구현 가능
- implements 키워드 뒤에 ,(콤마)로 여러 개의 인터페이스 이름을 붙이면 됨
04 인터페이스 상속
□ 인터페이스 간의 상속 관계도 가능
- extends 키워드 사용
(클래스 간 다중 상속은 안됨)