반응형
이번 글에서는 인터페이스 타입으로 선언된 필드를
다양한 구현 객체로 교체하면서 사용하는 구조를 학습합니다.
이 방식을 통해 코드를 수정하지 않고 객체만 바꿔서 다른 동작을 실행할 수 있어요.
📦 인터페이스 (Tire.java)
package ch08.sec11.exam01;
public interface Tire {
void roll();
}
📦 구현 클래스 – 한국 타이어 (HankookTire.java)
package ch08.sec11.exam01;
public class HankookTire implements Tire {
public void roll() {
System.out.println("한국 타이어가 굴러갑니다.");
}
}
📦 구현 클래스 – 금호 타이어 (KumhoTire.java)
package ch08.sec11.exam01;
public class KumhoTire implements Tire {
public void roll() {
System.out.println("금호 타이어가 굴러갑니다.");
}
}
📦 자동차 클래스 (Car.java)
package ch08.sec11.exam01;
public class Car {
Tire tire1 = new HankookTire(); // 초기에는 한국 타이어 장착
Tire tire2 = new HankookTire();
void run() {
tire1.roll();
tire2.roll();
}
}
📌 실행 클래스 (CarExample.java)
package ch08.sec11.exam01;
public class CarExample {
public static void main(String[] args) {
Car car = new Car(); // 기본 타이어 : Hankook
car.run();
car.tire1 = new KumhoTire(); // Kumho로 교체
car.tire2 = new KumhoTire();
car.run();
}
}
💻 실행 결과
한국 타이어가 굴러갑니다.
한국 타이어가 굴러갑니다.
금호 타이어가 굴러갑니다.
금호 타이어가 굴러갑니다.
💬 코드 설명
- Car 클래스는 Tire 인터페이스 타입으로 필드를 선언
- 객체를 생성할 때는 HankookTire로 초기화되어 있음
- 이후 tire1, tire2에 KumhoTire 객체를 대입하면
→ 메서드 호출 코드는 그대로지만, 다른 실행 결과가 출력
📌 간단 정리
타이어 종류 | 실행 결과 출력 |
HankookTire | "한국 타이어가 굴러갑니다." |
KumhoTire | "금호 타이어가 굴러갑니다." |
💡 포인트 정리
- 인터페이스 타입으로 선언하면,
다양한 구현 클래스를 유연하게 교체할 수 있다. - 실행 코드는 바꾸지 않고, 객체만 바꿔서 동작 변경 가능
- 유지보수가 쉬워지고, 확장성 높은 설계 구조를 만들 수 있다.
- 실무에서는 전략 패턴(Strategy Pattern)처럼
기능 교체가 필요한 상황에 매우 유용하게 사용됨.
📌 정리하자면,
인터페이스는 한 가지 틀에 여러 동작을 넣는 유연한 설계 방법이고,
구현체를 쉽게 바꾸면서도 코드는 수정 없이 실행 방식만 바꿀 수 있는 장점이 있습니다.
'Java > 자바 정리' 카테고리의 다른 글
80. 인터페이스와 람다식 – 익명 객체 대신 사용하는 간결한 표현 (2) | 2025.05.12 |
---|---|
79. instanceof와 패턴 매칭 – 안전한 형변환과 실행 흐름 제어 (0) | 2025.05.09 |
78. 인터페이스 매개변수 활용 – 다양한 객체를 받아들이는 구조 (0) | 2025.05.09 |
76. 강제 타입 변환(Casting) – 인터페이스로 묶고 다시 풀기 (0) | 2025.05.09 |
75. 인터페이스 타입 변환(Promotion) – 구현 객체는 모두 인터페이스로 본다 (0) | 2025.05.09 |
74. 인터페이스 상속 – 인터페이스도 다중 상속이 된다! (0) | 2025.05.09 |