추상 클래스
- `class` 앞 `abstract` 키워드 사용
- 추상 메서드를 포함한 클래스
- 그러나 추상 메서드를 포함하지 않더라도 abstract 키워드를 통해 추상 클래스 처리가 가능하다. ( -> 인스턴스 생성 불가하도록 만들 수 있음)
- 기존 클래스처럼 멤버변수와 메서드, 생성자를 가질 수 있음
- 인스턴스를 생성할 수 없음
- 추상 클래스를 상속받는 클래스는
- 모든 추상 메서드를 구현하여 인스턴스 생성이 가능한 `클래스`가 되거나,
- 모든 추상 메서드를 구현하지 않은 경우 `추상 클래스`가 된다.
인터페이스
- 오직 `추상 메서드`와 `상수`만을 멤버로 가진다 ( *default/static 메서드 예외 )
- 모든 메서드는 `public abstract`
- 모든 멤버 변수는 `public static final`
- 인스턴스를 생성할 수 없음
- 인터페이스 구현 시 `implements` 키워드 사용
- 인터페이스끼리 다중 상속이 가능하다.
- 클래스는 여러 인터페이스를 구현할 수 있다. (다중 구현 가능)
- 인터페이스를 구현한 클래스가
- 모든 추상 메서드를 구현하지 않은 경우 `추상 클래스`가 된다.
- default 메서드
- `default` 키워드를 통해 구현체를 가진 일반 메서드를 선언할 수 있다.
- 인터페이스를 구현한 모든 클래스를 수정할 필요없이 구현된 메서드를 새로 추가할 수 있다.
- 필요한 클래스만 오버라이딩 - 재정의해서 사용하면 된다.
추상 클래스와 인터페이스의 사용 목적
추상 클래스와 인터페이스 모두 추상 메서드를 통해 특정 작업의 구현을 강제하는 점에서는 공통적이다.
그렇지만 ! 둘의 사용의 목적이 다르다.
추상 클래스
'클래스의 확장'에 목적이 있다.
사실 일반 클래스를 상속하는 목적과 동일하다.
그렇지만 여기에 '반드시 재정의 하도록 강제하여야 하는 메서드'가 있을 때 추상 클래스를 사용하는 것이다.
* 공통(중복) 데이터를 정의하고, 하위 클래스가 반드시 구현하도록 강제하여야 하는 메서드가 있을 때, 추상 클래스를 사용한다.
추상 클래스와 이를 상속 받는 자식 클래스간에는 논리적으로 is - a 관계가 성립한다.
인터페이스
작업 목록을 인터페이스 안에 묶어 정의하고 인터페이스를 구현하여 해당 작업을 수행하도록 한다.
논리적으로 연관된 객체는 아니지만 공통된 작업을 수행하는 경우, 작업을 인터페이스로 묶어 정의하고 같은 인터페이스를 구현하도록 한다.
인터페이스와 이를 구현하는 인터페이스/클래스 간에는 논리적으로 can - do 관계가 성립한다.
=> 인터페이스의 구현을 통해 '특정 작업'이 수행 가능함을 보장한다. (따라서 인터페이스의 이름은 관용적으로 -able인 경우가 많다.)
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java Enum 이놈아 (1) | 2025.01.03 |
---|---|
Java의 예외처리 (함수 너 회피형이야?) (1) | 2025.01.02 |
잠깐 ! JVM 정리하고 갑시다 (1) | 2024.12.31 |
[Java] 문자열(String) 내장 함수 정리 (1) | 2024.01.11 |
[Java] CharSequence란? (0) | 2024.01.11 |