abstract
- abstract 키워드는 클래스와 메서드에 적용된다.
- 추상(abstract) 클래스는 실체 클래스들의 멤버변수와 메서드들의 이름을 통일할 목적으로 사용한다.
- 추상(abstract) 메서드가 있는 클래스는 반드시 추상 클래스여야 한다.
- 추상 클래스에 반드시 추상 메서드만 선언할 필요는 없고 일반 메서드도 선언할 수 있습니다.
abstract 클래스
- 추상 클래스는 new 키워드를 이용해서 객체를 만들지 못하고 오직 상속을 통해서 자식 클래스로 구체화 시켜야 한다.
- 추상 클래스도 일반 클래스와 마찬가지로 멤버변수, 생성자, 메서드를 선언할 수 있다.
- new를 사용하여 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 때 super()를 호출하여 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.
package abstract_.abs;
public abstract class PopupStore {
/*
* 1.메서드에 abstract를 붙이면 해당 메서드는 추상메서드가 되고
* 이 메서드는 반드시 오버라이딩해야만 합니다.
* 2. 추상메서드는 상속을 목적으로 선언한 메서드이지 실행을 목적으로
* 선언된 메서드가 아니기 때문에 메서드의 몸체({}) 부분이 없고
* 선언 마무리도 세미콜론(;)으로 합니다.
* 3. 일반 클래스에는 추상 메서드를 선언할 수 없습니다.
* 추상 메서드가 하나 이상 존재하면 무조건 추상클래스로 선언해야 합니다.
* 4. 추상 클래스 내부에서는 추상메서드가 하나 이상 존재한다면
* 일반메서드 선언도 여전히 가능합니다.
*/
public abstract void orderApple();
public abstract void orderOrange();
public abstract void orderGrape();
public void refund() {
System.out.println("제품에 문제가 있어서 환불합니다.");
}
}
abstract 메서드
- 추상 메서드는 추상 클래스 내에서만 선언할 수 있다.
- 추상 메서드는 메서드의 선언부만 있고 메서드 실행 내용이 들어가는 중괄호 {}가 없는 메서드를 말한다.
- 추상 클래스를 설계할 때 자식 클래스가 반드시 실행 내용을 채우도록 강요하고 싶은 메서드가 있을 경우, 해당 메서드를 추상 메서드로 선언한다.
- 자식 클래스에서 반드시 부모 추상클래스의 추상 메서드를 재정의하여 실행 내용을 작성해야 한다. 그렇지 않으면 컴파일 에러가 난다.
package abstract_.abs;
public class ConvenientStore extends PopupStore {
@Override
public void orderApple() {
System.out.println("가당 사과주스를 4000원에 팝니다.");
}
@Override
public void orderGrape() {
System.out.println("가당 포도주스를 4500원에 팝니다.");
}
@Override
public void orderOrange() {
System.out.println("가당 오렌지주스를 3500원에 팝니다.");
}
}
- 일반메서드 : 오버라이드 가능, 오버라이드 안하기 가능
- 추상메서드 : 오버라이드 강제, 오버라이드 안하기 불가능
- final메서드 : 오버라이드 불가능, 무조건 안하고 써야함
interface
다중 상속과 관련된 문제를 해결하고, 클래스 간의 일관된 인터페이스를 제공하기 위한 추상화의 한 형태이다.
인터페이스를 이용하 다중 상속의 효과를 낼 수 있다.
1. interface 선언
: interface 키워드를 사용해 선언. 추상메서드, 상수, 디폴트메서드, 정적메서드등을 가질 수 있다.
2. interace 구현
: implements 키워드를 사용해 클래스에서 인터페이스를 구현한다. 여러 인터페이스를 동시에 구현하는 것도 가능하다.
인터페이스 vs 추상클래스
- 대표적으로 인터페이스는 다중 상속이 가능하고, 추상클래스는 단일 상속이 가능하다는 차이점이 있다.
- 인터페이스는 다양한 클래스 간에 공통된 행동을 정의하고, 클래스가 여러 인터페이스를 구현해 다중 상속을 통해 다양한 기능을 제공하고자 할 때 사용한다.
- 추상 클래스는 공통된 코드를 재사용하고 상속 관계에서 공통적인 기능을 제공할 때 사용된다.
'LANG.. > JAVA' 카테고리의 다른 글
API (0) | 2024.01.19 |
---|---|
예외처리(checked exception / unchecked exception) (0) | 2024.01.18 |
final (0) | 2024.01.17 |
[디자인 패턴] 템플릿 메소드 패턴 (Template Method Pattern) (1) | 2024.01.16 |
[디자인패턴] 싱글톤 패턴(Singleton Pattertn) (0) | 2024.01.16 |