개발새발
추상 클래스와 인터페이스 본문
추상화: 구체적인 개념으로부터 공통된 부분들만 추려내어 일반화할 수 있도록 하는 것
추상메소드
메소드 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우, abstract 키워드로 선언되고 중괄호가 없는 메소드 하위 클래스는 반드시 재정의해서 실행 내용을 결정해야 함
abstract public String getName(); // 추상 메소드
abstract public String fail() { return "Good Bye"; } // 추상 메소드 아님. 컴파일 오류
1. 추상클래스 (Abstract Class)
- 개념:
- 공통적인 필드와 메소드를 정의하고, 세부 구현은 하위 클래스에서 정의하도록 강제하는 클래스
- abstract 키워드로 선언되며, 직접 객체를 생성할 수 없고 상속을 통해서만 사용 된다
- 구성요소:
- 추상 메소드 (중괄호 없이 선언, 하위 클래스에서 반드시 구현 필요)
- 일반 메소드
- 필드 (멤버 변수)
- 생성자
- 용도 및 목적:
- 상속을 위한 슈퍼 클래스로 활용하는 것
- 서브 클래스에서 추상 메소드 구현
- 하위 클래스에 규격을 강제.
- 다형성 구현.
abstract class Shape {
public abstract void draw(); // 추상 메소드
}
class Line extends Shape {
@Override
public void draw() {
System.out.println("Line");
}
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("Circle");
}
}
Shape는 추상 클래스이며, draw 메소드를 정의 한다
Line과 Circle 클래스는 Shape를 상속받아 draw 메소드를 구현하여 각자의 출력 내용을 정의 한다
인터페이스 (Interface)
- 개념:
- 클래스가 반드시 구현해야 할 메소드를 명세하는 일종의 계약서 역할.
- interface 키워드로 선언하며, implements 키워드를 사용해 일 클래스에서 구현 한다.
- 인터페이스 멤버들은 모두 묵시적으로 public abstract이다.
- 구현클래스에서 인터페이스를 사용하기 위해서는 implements 예약어를 사용 한다.
- 구현클래스에서 인터페이스를 사용할 경우 반드시 정의된 메소드를 오버라이딩하여 구현해야 한다.
- 인터페이스는 다중 상속이 가능하다.
- 구성요소:
- 상수 필드 (묵시적으로 public static final)
- 추상 메소드 (묵시적으로 public abstract)
- 디폴트 및 정적 메소드 (Java 8부터 추가)
- 특징 및 용도:
- 다중 상속이 가능.
- 구현 객체의 일관된 동작 보장.
interface RemoteControl {
int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
void turnOn(); // 추상 메소드
void turnOff(); // 추상 메소드
void setVolume(int volume); // 추상 메소드
}
class Television implements RemoteControl { // 다중 상속을 받고 있다
private int volume;
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
@Override
public void setVolume(int volume) {
this.volume = Math.min(MAX_VOLUME, Math.max(MIN_VOLUME, volume));
System.out.println("현재 TV 볼륨: " + this.volume);
}
}
추상클래스 vs 인터페이스
- 추상클래스:
- 공통된 코드의 재사용을 위해 설계.
- 상속을 통해 기능을 확장.
- 인터페이스:
- 클래스에 특정 동작을 강제.
- 구현 객체 간의 일관성을 보장.
특징 | 추상 클래스 | 인터페이스 |
선언 키워드 | abstract 클래스 | interface |
구현 키워드 | extends | implements |
다중 상속 가능 여부 | 불가능 | 가능 |
멤버 구성 | 필드, 일반 메소드, 추상 메소드 | 상수, 추상 메소드, 디폴트/정적 메소드 |