abstract 클래스와 interface, implements, 다중 구현, default 메서드를 다룬다.
인터페이스와 추상클래스
인터페이스와 추상클래스는 "무엇을 해야 하는가"를 약속으로 정해 두고, "어떻게 하는가"는 구현 클래스에 맡기는 설계 도구입니다. 이를 통해 서로 다른 구현을 같은 방식으로 다룰 수 있습니다.
학습 목표
- 추상클래스와 추상 메서드를 이해한다.
- 인터페이스를 정의하고
implements로 구현한다. - 여러 인터페이스를 동시에 구현한다.
default메서드의 쓰임을 안다.
추상클래스
abstract로 선언한 클래스는 직접 객체를 만들 수 없고, 상속받아 사용합니다. 본문이 없는 추상 메서드를 두어 자식이 반드시 구현하도록 강제합니다.
public abstract class Animal {
String name;
abstract void sound(); // 본문 없음, 자식이 구현
void sleep() { // 일반 메서드도 가능
System.out.println(name + " 잠듭니다");
}
}
public class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
⚠️ 주의 — 추상 메서드를 가진 클래스는 반드시
abstract로 선언해야 합니다. 자식이 추상 메서드를 모두 구현하지 않으면 그 자식도 추상클래스가 됩니다.
인터페이스
인터페이스는 구현 없이 메서드의 형태(약속)만 정의합니다. implements로 구현하며, 구현 클래스는 모든 메서드를 작성해야 합니다.
public interface Drawable {
void draw(); // public abstract가 기본
}
public class Circle implements Drawable {
@Override
public void draw() {
System.out.println("원을 그립니다");
}
}
인터페이스 타입으로 객체를 다룰 수 있어 다형성을 활용하기 좋습니다.
Drawable d = new Circle();
d.draw();
다중 구현
클래스는 하나만 상속할 수 있지만, 인터페이스는 여러 개를 동시에 구현할 수 있습니다.
public interface Flyable {
void fly();
}
public interface Swimmable {
void swim();
}
public class Duck implements Flyable, Swimmable {
public void fly() { System.out.println("날기"); }
public void swim() { System.out.println("헤엄"); }
}
💡 TIP — "할 수 있는 능력"을 표현할 때 인터페이스가 잘 어울립니다.
Flyable,Comparable처럼-able로 끝나는 이름이 많은 이유입니다.
default 메서드
인터페이스에 기본 구현을 제공하는 메서드입니다. 구현 클래스가 따로 작성하지 않아도 그대로 사용할 수 있습니다.
public interface Greeter {
String name();
default void greet() {
System.out.println(name() + "님 안녕하세요");
}
}
public class Member implements Greeter {
public String name() {
return "홍길동";
}
// greet()는 default 구현을 그대로 사용
}
추상클래스 vs 인터페이스
| 구분 | 추상클래스 | 인터페이스 |
|---|---|---|
| 다중 상속 | 불가 (1개) | 가능 (여러 개) |
| 필드 | 일반 필드 가능 | 상수만 |
| 용도 | "~의 한 종류" | "~할 수 있는 능력" |
요약
- 추상클래스는 직접 생성할 수 없고 상속해서 사용하며 추상 메서드 구현을 강제합니다.
- 인터페이스는 메서드의 약속만 정의하고
implements로 구현합니다. - 클래스는 하나만 상속하지만 인터페이스는 여러 개 구현할 수 있습니다.
default메서드로 인터페이스에 기본 구현을 줄 수 있습니다.- 능력 표현에는 인터페이스, 종류 표현에는 추상클래스가 어울립니다.
연습문제
- 추상 메서드
area()를 가진 추상클래스Shape를 만드세요. Shape를 상속한Rectangle에서area()를 구현하세요.draw()를 가진 인터페이스Drawable을 만들고Rectangle이 함께 구현하게 하세요.default메서드info()를 가진 인터페이스를 만들어 구현 클래스에서 그대로 사용하세요.
힌트 — 사각형 넓이는
가로 * 세로입니다. 한 클래스가 상속과 구현을 동시에 할 수 있습니다.
💡 연습문제 풀이
불러오는 중…
댓글 0
“Java” 강좌에 대한 댓글입니다.