Java/자바 정리

77. 인터페이스 교체 – 유연한 구조 설계의 핵심

코딩하는냥이 2025. 5. 9. 12:28
반응형

이번 글에서는 인터페이스 타입으로 선언된 필드를
다양한 구현 객체로 교체하면서 사용하는 구조를 학습합니다.
이 방식을 통해 코드를 수정하지 않고 객체만 바꿔서 다른 동작을 실행할 수 있어요.


📦 인터페이스 (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)처럼
    기능 교체가 필요한 상황에 매우 유용하게 사용됨.

📌 정리하자면,
인터페이스는 한 가지 틀에 여러 동작을 넣는 유연한 설계 방법이고,
구현체를 쉽게 바꾸면서도 코드는 수정 없이 실행 방식만 바꿀 수 있는 장점이 있습니다.