본문 바로가기
컴퓨터공학

여러 가지 다형성: 임시 다형성, 파라미터화한 다형성, 서브타입 다형성

by 책 읽는 개발자_테드 2021. 10. 19.
반응형

학습 목표

· 다형성이란?

· 임시 다형성 (ad hoc polymorphism)

· 파라미터화한 다형성 (parametric polymorphism)

· 서브타입 다형성 (subtype polymorphism = overriding)


 

다형성이란?

https://scshim.tistory.com/55

 

임시 다형성 (ad hoc polymorphism)

· 같은 이름의 함수를 매개 변수의 개수 또는 타입을 변경하여, 여러 개의 함수가 서로 다르게 행동할 수 있도록 하는 성질

· 오버로딩

· 컴파일 타임 다형성

 

▶ 예시

class Animal{
    public void move(){
        System.out.println("동물이 움직입니다.");
    }
}

class Human extends Animal{
    public void move(){
        System.out.println("사람이 두 발로 뜁니다.");
    }
}

class Tiger extends Animal{
    public void move(){
        System.out.println("호랑이가 네 발로 뜁니다.");
    }
}

class Eagle extends Animal{
    public void move(){
        System.out.println("독수리가 날아갑니다.");
    }
}

class AnimalTest
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Animal human = new Human();
        Animal tiger = new Tiger();
        Animal eagle = new Eagle();
        
        AnimalTest test = new AnimalTest();
        test.moveAnimal(human);
        test.moveAnimal(tiger);
        test.moveAnimal(eagle);
    }
    
    public void moveAnimal(Animal animal){
        animal.move();
    }
}

 

파라미터화한 다형성 (parametric polymorphism)

· 데이터 타입이나 함수를 범용적으로 작성하여, 세부 타입에 상관없이 동일하게 처리할 수 있는 성질

· 제네릭

· 컴파일 타임 다형성

 

▶ 예시

class Box<T> {
    T item;
    void setItem(T item) { this.item = item;}
    T getItem() {return item;}
}

 

Box<String> b = new Box<String>();
b.setItem("ABC");
String item1 = b.getItem(); //형변환이 필요없음

 

서브타입 다형성 (subtype polymorphism)

· 상속받은 상위 클래스의 메소드를 재정의하여 사용할 수 있는 성질

· 오버라이딩

· 런타임 다형성

 public class Computer {
    public void getInfo() {
        System.out.println("컴퓨터입니다.");
    }
}
public class Mac extends Computer{
    @Override
    public void getInfo() {
        System.out.println("맥 컴퓨터입니다.");
    }
}
public class Main {
    public static void main(String[] args){
        Mac myComputer = new Mac();
        myComputer.getInfo();
    }
}

 

https://en.wikipedia.org/wiki/Polymorphism_(computer_science)

https://yinjae.wordpress.com/2012/04/02/polymorphism/

반응형

댓글