객체지향 해석(6) - 인터페이스, 다형성? 그냥 갈아 끼우기

응큼한포도·2025년 6월 23일

객체지향 해석

목록 보기
6/7

파인만을 좋아함

나는 파인만을 좋아한다. 물리학과를 나오면 파인만의 빨간책이란 걸 읽는데 읽다보면 그의 전기도 읽는게 보통이다. 파인말 왈 쉽게 표현하면 되는데 뭐하러 어렵게 표현하나.

그래서 파인만은 이론도 그림으로 다이어그램 만들어서 노벨상탐

아무튼 내가 하고 싶은 말은 객체지향 설명하는데 뭐하러 어렵게 설명하는지 이해가 안된다는 말이다.

인터페이스의 장점

인터페이스의 가장 큰 장점은 계약을 소프트웨어적으로 명시하고 강제한다는 점을 강조해왔다. 그 외 좋은점엔 다형성이 있다.

그 전 글에 추상화를 설명하면서 자연스럽게 설명했다.

계약서만 작성하면 그걸 어떻게 구현하든 상관없다는 말이다. 전 글의 비유를 다시 가져오면

"야 차타고 와" 이 계약은 그냥 차에 해당되면 상관없다는 말이다.
내가 택시를 타든, 버스를 타든 내가 알아서 차만 타고 오면 된다는 점이다.
그럼 반대로 생각해보면 내가 차만 타면 되니까 맘대로 바꿔도 되겠네?

원래는 버스를 탈려고 했는데 시간이 늦어서 택시를 타도 상관없다. 내 사정상 맘대로 바꿀 수 있다는 점. 내 맘대로 갈아끼울수 있다는 점이 바로 다형성이다.

다형성이 나오는 이유는 객체지향과 메세지

객체지향의 핵심은 철저한 분업화라고 했다. 각자의 책임만 지고 상대방을 관심없이 메세지만 보내면 되는 방식, 계약만 던져주고 니가 알아서 해와란 방식에서 다형성이 나오는 것이다.

내 맘대로? 계약만 지키면 내 맘대로 할게, 나중에 맘에 안들면 내가 알아서 갈아 끼울게 니는 결과만 받아. 그게 계약이니까

내 맘대로 갈아끼우고 바꾸고 구현해도 계약만 지키서 결과물만 던져주면 철저한 분업화고 성공한 메세지이고 옳은 객체지향이다.

다형성의 장점

프로그래밍에서 다형성의 장점을 그대로 보여주겠다

interface Car {
    void moveTo(String destination);
}
class Person {
	// anyCar 즉, 차면 아무거나 됨
    public void goToAppointment(Car anyCar) {
        anyCar.moveTo("약속 장소");
    }
}
public class Main {
    public static void main(String[] args) {
        // 약속에 가야 하는 '나'
        Person me = new Person();

        // 타고 싶은거 내가 맘대로 만들어서 이용하면 됨
        Car myCar = new MyGenesis();
        Car taxi = new Taxi();
        Car bus = new Bus();

        System.out.println("--- 오늘의 계획 ---");

        // "차 타고 와" 라는 약속(계약)만 지키면 된다.
        // 어떤 '차'를 사용할지는 내 마음대로

        System.out.println("1. 오늘은 내 차로 가볼까?");
        me.goToAppointment(myCar); // 자가용 탈거임

        System.out.println("2. 내일은 택시를 타야지.");
        me.goToAppointment(taxi); // 택시 타야지

        System.out.println("3. 모레는 버스를 타자.");
        me.goToAppointment(bus); // 버스 타야지
    }
}

다형성의 장점이 유연하니, 확장성이 있니 이런 설명이 많은데 이게 더 직관적이지 않나?
계약 사항만 지키면 구현은 내 맘대로 할거니까 당연히 유연하고, 확장성이 있지.

아니 쉽게 말해서 내 맘대로 갈아끼워도 아무 문제가 없는게 가장 큰 장점이다.

프로그래밍에서 나중에 코드를 바꾸고 싶은경우는 크게 2가지

  1. 요구사항과 계약을 바꾼다.
  2. 구현체를 바꾼다.

1번은 그냥 인터페이스를 바꾸면 되는것
2번은 그냥 내 맘대로 구현체를 만들어서 원래 있던거 치우고 갈아끼우기만 하면 되는것

2번에 해당하는 게 다형성이라고 생각한다.

결론

다형성은 객체지향의 분업화와 메세지에서 나오는 것이다. 계약만 지키면 내 맘대로 갈아끼우는게 다형성이다.

0개의 댓글