11.9 다형성 (Polymorphism)
객체지향 프로그래밍의 꽃, 다형성입니다. 인터페이스를 사용하면 프로그램을 수정하지 않고도 부품(구현 객체)을 자유롭게 교체할 수 있습니다. 이것이 자바가 가진 가장 강력한 무기입니다.
💡 핵심 비유: USB 포트와 타이어
“컴퓨터의 USB 포트(인터페이스)에는 마우스, 키보드, 카메라 등 무엇이든 꽂을 수 있다. 꽂히는 게 무엇이냐에 따라 컴퓨터의 기능이 확장된다.”
1. 필드의 다형성 (부품 교체)
자동차 클래스를 만들 때, 타이어를 HankookTire라고 딱 정해놓는 것보다, Tire 인터페이스로 선언해두면 나중에 훨씬 유연해집니다.
class Car {
// 인터페이스 타입으로 선언 (한국타이어든 금호타이어든 다 들어와!)
Tire frontTire = new HankookTire();
void run() {
frontTire.roll(); // 굴러갑니다.
}
}
나중에 성능이 더 좋은 MichelinTire가 나오면?
Car myCar = new Car();
// 코드 수정 없이 타이어만 쏙 교체!
myCar.frontTire = new MichelinTire();
2. 매개변수의 다형성 (만능 입구)
메소드의 매개변수를 인터페이스 타입으로 선언하면, 그 인터페이스를 구현한 어떤 객체든지 매개변수로 받을 수 있습니다.
// 운전자가 운전을 합니다.
void drive(Vehicle vehicle) {
vehicle.run();
}
Driver driver = new Driver();
// 버스 운전
driver.drive(new Bus());
// 택시 운전 (메소드 코드는 그대로인데, 동작이 바뀜!)
driver.drive(new Taxi());
이처럼 “하나의 코드로 다양한 실행 결과가 나오는 성질”이 바로 다형성입니다.
코딩 영단어 학습 📝
코딩에서 영어 단어의 의미만 정확히 이해해도 절반은 성공입니다! 오늘 배운 핵심 영단어들을 다시 한번 짚고 넘어가 볼까요?
Polymorphism: 폴리모피즘, 다형성. (똑같은run()버튼(메소드)을 눌러도, 어떤 타이어나 탈것(구현 객체)을 끼워 넣었냐에 따라 각기 다른 방식으로 부드럽게 돌아가는 마법 같은 성질)Plug and Play: 플러그 앤 플레이. (마치 컴퓨터에 USB 마우스를 꽂으면 수정 없이 바로 작동하듯, 기존 코드는 한 줄도 안 고치고 새로운 부품 객체만 쏙 끼워서 바로 갈아입히는 개발 방식)
서브목차