Section#12 _ 추상 클래스와 인터페이스
#1 추상 클래스와 추상 메서드
#1-1. 추상 메서드 (abstract method)
: 선언부만 작성하고 구현부는 작성하지 않고 남겨둔 미완성 메서드
: abstract 키워드를 함께 포기해야함, 선언부 끝에 세미콜론(;) 사용
: 추상 메서드는 반드시 추상 클레스 안에 정의되어야 함 → 추상 메서드를 1개 이상 선언하면, 해당 클래스는 추상 클래스로 선언되어야 함
접근제한자 abstract 반환 타입 메서드 이름 (매개변수1, 매개변수2,...);
#1-2. 추상 클래스 (abstract class)
: 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없음
: 자식 클래스의 생성자에서 super()를 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체 생성
: 추상 클래스를 상속받은 모든 자식 클래스는 반드시 추상 메서드를 오버라이딩 및 재정의하여 구현
→ 하지 않을 시, 컴파일 에러 발생
접근제한자 abstract class 클래스 이름{
// 필드
// 생성자
// 메서드 (추상 메서드 포함)
}
#1-3. 추상 클래스와 추상 메서드의 용도
: 자식 클래스 간의 공통적인 필드와 메서드 이름을 통일 가능
: 반드시 구현해야 하는 메서드를 선언함으로써 공통 규격을 제공
#2 인터페이스 구현 (interface)
: 추상 메서드와 상수로만 이루어짐
: 스스로 객체 생성 불가능
: 구현 클래스들의 기본 틀을 제공하면서, 다른 클래스 코드들과의 사이에서 중간 매개 역할
#2-1. 인터페이스 선언
: 어떠한 형태로도 객체 생성 불가능
: 필드와 생성자를 가지지 않음 → 객체를 생성할 수 없기에, 필드 값 수정 불가능 & 생성자 불필요
: 매개체 역할 → 누구나 접근할 수 있도록 public 접근제한자로 구현
접근제한자 interface 인터페이스 이름{
...
접근 제한자 abstract 메서드 이름(매개변수1, 매개변수2, ...)
...
}
#2-2. 상수 선언
: 영문 대문자로 작성
: 2개 이상의 단어를 조합할 때는 언더바(_)로 연결
#3 인터페이스 사용
: 구현 클래스 → 인터페이스를 구현해주는 클래스
: implements(구현한다의 의미) 키워드를 사용하여 명시할 수 있음
: 구현 클래스에서 추상 메서드를 구현할 때는 반드시 접근 제한자를 public으로 지정
접근제한자 class 클래스 이름 implements 인터페이스 이름{
// 필드
// 생성자
// 구현 메서드(추상 메서드 오버라이딩)
}
#3-1. 인터페이스 장점
1) 실제 구현 클래스의 내용을 보지 않고도 개발 코드로 객체를 사용 가능 → 정보 은닉
2) 구현 클래스들이 독립적으로 구현 & 사용 가능. 개발 코드에서 객체 변경이 필요할 때, 개발 코드 수정 최소화 → 모듈화
#3-2. 다중 인터페이스 구현
선언 방법 : implements 키워드 뒤 이름을 작성시, 콤마(,)를 이용해 여러 개를 붙여서 선언
→ 하지만, 선언한 모든 인터페이스에 대한 추상 메서드를 모두 구현
#4 인터페이스 상속
: 인터페이스끼리 상속 관계를 만들 수 있음
: extends 키워드를 사용하며, 다중 상속이 가능 → 콤마(,)를 이용해서 선언