CodeGym/Java Blog/무작위의/자바의 다형성
John Squirrels
레벨 41
San Francisco

자바의 다형성

무작위의 그룹에 게시되었습니다
회원
안녕! 오늘 우리는 OOP의 원칙에 대한 일련의 강의를 마칩니다. 이 단원에서는 Java 다형성에 대해 이야기합니다. 다형성은 여러 유형이 동일한 유형인 것처럼 작업할 수 있는 기능입니다. 또한 개체의 동작은 해당 유형에 따라 달라집니다. 이 진술을 자세히 살펴보겠습니다. 첫 번째 부분인 '여러 유형이 동일한 유형인 것처럼 작업할 수 있는 기능'부터 시작하겠습니다. 다른 유형이 어떻게 동일할 수 있습니까? 조금 이상하게 들립니다. 다형성 사용 방법 - 1사실 모든 것이 매우 간단합니다. 예를 들어, 이러한 상황은 일반적인 상속 사용 중에 발생합니다. 어떻게 작동하는지 봅시다. 단일 run() 메서드가 있는 간단한 Cat 부모 클래스가 있다고 가정합니다 .
public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
이제 Cat을 상속하는 세 개의 클래스 인 Lion , TigerCheetah를 만듭니다 .
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
그래서 우리는 3개의 수업을 가지고 있습니다. 그들이 같은 반인 것처럼 그들과 함께 일할 수 있는 상황을 모델로 삼자. 우리 고양이 중 한 마리가 아파서 Dolittle 박사의 도움이 필요하다고 상상해 보십시오. 사자, 호랑이, 치타를 치료할 수 있는 두리틀 클래스를 만들어 봅시다 .
public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
문제가 해결된 것 같습니다. 수업이 작성되었고 시작할 준비가 되었습니다. 하지만 프로그램을 확장하려면 어떻게 해야 할까요? 현재 사자, 호랑이, 치타의 3가지 유형만 있습니다. 하지만 세상에는 40종이 넘는 고양이가 있습니다. manuls, jaguars, Maine Coons, 집 고양이 및 나머지 모든 것에 대해 별도의 클래스를 추가하면 어떻게 될지 상상해보십시오. 다형성 사용 방법 - 2물론 프로그램 자체는 작동하지만 각 유형의 고양이를 치료하기 위해 Dolittle 클래스에 새로운 방법을 지속적으로 추가해야 합니다. 결과적으로 전례 없는 규모로 성장할 것입니다. 여기에서 다형성("여러 유형이 동일한 유형인 것처럼 작업할 수 있는 능력")이 발생합니다. 동일한 작업을 수행하기 위해 셀 수 없이 많은 방법을 만들 필요가 없습니다. 즉, 고양이를 치료하는 것입니다. 하나의 방법으로 모두 충분합니다.
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
healCat () 메서드는 Lion , TigerCheetah 개체를 허용할 수 있습니다 . 모두 Cat 인스턴스입니다 .
public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
콘솔 출력: 환자는 건강합니다! 환자는 건강합니다! 환자는 건강합니다! 그래서 우리 두리틀클래스는 서로 다른 유형이 동일한 유형인 것처럼 작동합니다. 이제 두 번째 부분인 "게다가 개체의 동작은 유형에 따라 달라집니다."를 다루겠습니다. 모두 매우 간단합니다. 자연에서 모든 고양이는 다른 방식으로 달립니다. 최소한 서로 다른 속도로 실행됩니다. 세 마리의 고양이과 중에서 치타가 가장 빠르고 호랑이와 사자는 더 느립니다. 즉, 그들의 행동은 다릅니다. 다형성은 서로 다른 유형을 하나로 사용하는 것 이상을 수행합니다. 또한 각각의 고유한 동작을 유지하면서 차이점을 기억할 수 있습니다. 다음 예는 이를 보여줍니다. 우리 고양이가 성공적으로 회복된 후 약간의 달리기를 즐기기로 결정했다고 가정합니다. Dolittle 클래스 에 다음을 추가합니다 .
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
세 마리의 동물을 치료하기 위해 동일한 코드를 실행해 봅시다.
public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
결과는 다음과 같습니다. 환자는 건강합니다! 사자는 시속 80km로 달린다. 환자는 건강합니다! Tiger는 60km/h로 달립니다. 환자는 건강합니다! Cheetah는 최대 120km/h로 달립니다. 세 마리 동물을 모두 Cat 으로 '일반화'한 후 메서드에 전달했지만 개체의 특정 동작이 보존됨을 분명히 알 수 있습니다 . 다형성으로 인해 Java는 이들이 단순히 고양이 세 마리가 아님을 잘 기억합니다. 사자, 호랑이, 치타인데 각각 달리는 모습이 다릅니다. 이는 다형성의 주요 이점인 유연성을 보여줍니다. 많은 유형이 공유하는 일부 기능을 구현해야 할 때 사자, 호랑이, 치타는 단순히 '고양이'가 됩니다. 모든 동물은 다르지만 어떤 상황에서는 종에 관계없이 고양이가 고양이입니다 :) 다음은 동영상 확인입니다.
이 '일반화'가 바람직하지 않고 대신 각 종이 다르게 행동해야 할 때 각 유형은 고유한 작업을 수행합니다. 다형성 덕분에 다양한 클래스에 대한 단일 인터페이스(메서드 집합)를 만들 수 있습니다. 이것은 프로그램을 덜 복잡하게 만듭니다. 40가지 유형의 고양이를 지원하도록 프로그램을 확장하더라도 40가지 고양이 모두에 대한 단일 run() 메서드 라는 가장 간단한 인터페이스를 갖게 됩니다 .
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다