인터페이스 다형성 예제

Postato il 2 Ago 2019 in Senza categoria

이 cleanAnObject()메서드는 작동하지만 다형성의 이점에는 참여하지 않습니다. 가장 중요한 것은 이 코드는 다형성을 활용할 수 있는 경우보다 유연성이 낮습니다. 위의 코드를 사용하면 다른 종류의 세척 가능한 객체(예: Bicycle)를 프로그램에 추가하려면 다른 인스턴스 검사를 추가해야 합니다. 이 모든 것이 잘 작동하지만 단일 방법으로 더 다양한 물체를 씻으려면 어떻게해야합니까? 어떤 “씻을 수 있는” 물체를 세탁하는 것이 합리적일지라도 어떤 종류의 물건을 씻을 수 있는 방법을 원한다면 어떨까요? 예를 들어, 컵을 씻는 것 외에도 창문을 씻거나, 차를 씻거나, 개를 씻을 수도 있습니다. 이러한 개체는 동일한 패밀리에 맞지 않는 것처럼 보이므로 다형성 대신 인스턴스를 사용할 수 있습니다. 예를 들어, 다음 클래스를 생각해 보십시오: 이 예제에서는 워시블, 담글 수 있는 및 스크러블은 모두 BubbleBathable의 수퍼 인터페이스입니다. (BubbleBathable은 두 개의 직접 수퍼 인터페이스를 확장합니다. 클래스가 여러 인터페이스를 구현할 수 있는 것처럼 인터페이스는 여러 인터페이스를 확장할 수 있습니다. 따라서 BubbleBathable을 구현하는 클래스는 세척 가능, 담글 수 있는 방법, 스크러블 및 BubbleBathable으로 선언된 메서드에 대한 본문또는 추상선언을 제공해야 합니다. 그림 4-7은 이 인터페이스 패밀리에 대한 상속 계층 구조를 보여 줍니다.

전설 벤캇 수브라마니엄에 따르면, 다형성은 객체 지향 프로그래밍에서 가장 중요한 개념입니다. 다형성 또는 해당 형식에 따라 특수 작업을 실행하는 개체의 기능은 Java 코드를 유연하게 만드는 것입니다. 명령, 관찰자, 장식, 전략, 그리고 4의 갱에 의해 만들어진 많은 다른 사람과 같은 디자인 패턴, 모두 다형성의 어떤 형태를 사용합니다. 이 개념을 마스터하면 프로그래밍 과제에 대한 솔루션을 통해 생각하는 능력이 크게 향상됩니다. 다형성을 사용하여 A 컵인 모든 개체에 대한 참조를 메서드에 전달할 수 있습니다. 컴파일 시간 메서드 오버로드 및 생성자 오버로드 2. 런타임 메서드 재정의 긴급 이 인터페이스에서 선언 된 메서드는 명시적으로 공개 및 추상 선언 되지 않습니다., 기본적으로 공용 및 추상 때문에. 마찬가지로 Washable의 상수는 기본적으로 공용, 정적 및 최종으로 선언되지 않습니다. 인터페이스를 사용하면 모든 것을 하나의 단독 상속 클래스 패밀리에 맞출 필요 없이 다형성의 이점을 얻을 수 있습니다.

위의 예에서 Washable 인터페이스는 세척을 수행하는 표준 방법을 정의하며 모든 클래스에서 이를 구현할 수 있습니다. 인터페이스로 인해 클래스 확장을 사용하여 개체를 모델링할 수 있습니다. 인터페이스 구현을 사용하여 개체가 수행하는 작업을 순수하게 기반으로 다형성을 얻을 수 있습니다. 클래스 확장이 생성하지 않는 원하는 다형성은 인터페이스 구현을 통해 얻을 수 있습니다. 이러한 상황을 개선하기 위해 컵, 자동차, 창문 및 개에게 wash() 메서드를 선언하는 공통 기본 클래스를 제공하기로 결정할 수 있습니다. 이렇게하면 cleanAnObject() 메서드에서 다형성의 모든 이점을 얻을 수 있습니다. 컵, 자동차, 창문, 개 등 네 개의 패밀리가 워셔블오브젝트 패밀리로 결합됩니다: 이 예제에서는 SweetCreator 클래스가 SweetProducer 클래스만 알고 있음을 알 수 있습니다. 그것은 각 달콤한의 구현을 모른다. 이러한 분리를 통해 클래스를 업데이트하고 다시 사용할 수 있는 유연성이 제공되며 코드를 훨씬 쉽게 유지 관리할 수 있습니다. 코드를 디자인할 때는 항상 코드를 최대한 유연하고 유지 관리할 수 있는 방법을 찾아보십시오. 다형성은 이러한 목적을 위해 사용하는 매우 강력한 기술이다.

누군가가 인터페이스를 사용하지 않았다면 컨트롤러를 다시 디자인해야 할뿐만 아니라 컨트롤러 클래스와 나머지 클래스 사이에 매우 강력한 결합이 있기 때문에 잠재적으로 전체 프로젝트를 다시 디자인해야합니다. 이렇게 하면 코드를 이해하는 데 몇 달이 걸리며, 새로운 버그 집합은 말할 것도 없습니다.