폴리모피즘에 대하여



설명 할 때 항상 읽으므로 요약

폴리모피즘이란?



메시지를 보내는 방법을 공통으로 만드는 것
  • 부모 클래스 생성시에 아이 클래스에 건네주는 메세지를 공통으로 하는 구조
  • 인터페이스를 사용하여 (Java의 경우) 메시지를 공통화하는 메커니즘
  • 코드 중복을 제거하고 다목적 부품을 만드는 메커니즘 중 하나
  • 객체 지향 삼대 요소 중 하나
  • 의역하면 다태성

  • 특징



    개념적 측면 (현실 세계)



    상위 및 하위 개념 각각의 동사로 성립

    공통 동사가 성립
  • 예를 들면 「동물」과 「인간」과 「개」
  • "동물"(상위)이 "먹는다"
  • "인간"(하위)이 "먹는다"
  • "개"가 (하위) "먹는다"


  • 커트를 하나로 하고 있다
  • 하나의 옵션 (추가 정보)으로 고유의 거동이 성립한다
  • 예를 들면 「동물」과 「인간」과 「개」
  • "동물"이 "먹는다"-> 어떤 느낌으로 먹을지 정해지지 않았다
  • "동물"의 "인간"(선택 사항)이 "먹는다"-> 음식을 손으로 입에 가깝게 먹는다
  • "동물"의 "개"(선택 사항)가 "먹는다"-> 음식에 머리를 가까이 입으로 먹는다


  • 기술적 측면 (프로그래밍)



    인수를 받은 인스턴스가 클래스에 따라 다르게 동작합니다.

    공통의 메소드명으로 성립한다
  • 슈퍼 클래스와 서브 클래스 각각의 메소드로서 성립한다
  • 예를 들면 「Animal」과 「human」과 「dog」와 「chef」(eater)
  • 요리사가 "동물"(먹는 군)에게 제공하고 "동물"(먹는 군)이 그것을 "먹는다"
  • '동물'(먹는 군)을 바꾸는 것만으로 팍팍 먹거나 볶는 먹거나 한다


  • 프로그래밍 기술에 있어서의 「상속」을 이용한 경우



    Animal.java
    public abstract class Animal {
        public abstract void eat();
    }
    

    Human.java
    public class Human extends Animal {
        public void eat() {
            System.out.println("ぱくぱくたべる");
        }
    }
    

    Dog.java
    public class Dog extends Animal {
        public void eat() {
            System.out.println("がぶがぶたべる");
        }
    }
    

    Chef.java
    public class Chef {
        public void serve(Animal animal) {
            System.out.println("どうぞー");
            System.out.println(animal.eat());
        }
    }
    

    프로그래밍 기술에서 "인터페이스"를 이용한 경우



    Eater.java
    public interface Eater {
        public void eat();
    }
    

    Human.java
    public class Human implements Eater {
        public void eat() {
            System.out.println("ぱくぱくたべる");
        }
    }
    

    Dog.java
    public class Dog implements Eater {
        public void eat() {
            System.out.println("がぶがぶたべる");
        }
    }
    

    Chef.java
    public class Chef {
        public void serve(Eater eater) {
            System.out.println("どうぞー");
            System.out.println(eater.eat());
        }
    }
    

    포인트


  • 상속의 기능을 사용한 것도 인터페이스의 기능을 사용한 것도 공통해 말할 수 있는 것은 호출 방법이 종류 관계없이 같다(여기서 말하면 셰프가 제공하는 상대)라고 하는 부분
  • 인터페이스는 폴리 모피즘을 실현하기위한 것입니다.
  • interface의 기능은 언어적으로 지원하지 않는 것도있다 (Ruby 등은 그렇다)

  • 관련 기사



    객체 지향으로 왜 만드는지 정리

    책 정보



    히라자와 장 (저) 오브젝트 지향으로 왜 만드는지 제 2 판
    htps : // 아 mz 응. 및 / 2VSr

    잡감



    디자인 패턴이나 리팩토링에서도 이 시점을 가지고 있으면 잘 적용할 수 있다

    좋은 웹페이지 즐겨찾기