Java를 공부하면서 다형성(Polymorphism)이라는 개념을 접하게 되었습니다. 저는 실제 사용에 앞서 기본 원칙을 파악하는 경향이 있어서 여기에 해석을 문서화했습니다.
다형성의 원래 의미는 "다양성"입니다. 그러나 이 글의 맥락에서 이는 클래스 상속이나 인터페이스 구현을 통해 관계가 있는 한 오류 없이 다양한 유형의 객체를 보유하는 변수의 능력을 의미합니다.
일반적으로 변수 유형은 참조하는 개체의 유형과 일치합니다.
Animal animal = new Animal();
그러나 객체가 클래스를 확장하는 경우 변수는 슈퍼클래스의 유형으로 처리될 수 있습니다.
Animal animal = new Dog(); // Dog extends Animal
또한 객체가 인터페이스를 구현하는 경우 인터페이스 유형으로 처리할 수 있습니다.
// Interface definition interface Animal { void makeSound(); // Method in the interface } // Classes implementing the interface class Dog implements Animal { public void makeSound() { System.out.println("Woof!"); // Dog-specific implementation } } class Cat implements Animal { public void makeSound() { System.out.println("Meow!"); // Cat-specific implementation } } // Main method public class Main { public static void main(String[] args) { // Assign objects to variables of the interface type Animal myDog = new Dog(); Animal myCat = new Cat(); // Call the interface method myDog.makeSound(); // Outputs "Woof!" myCat.makeSound(); // Outputs "Meow!" } }
이를 통해 서로 다른 클래스를 동일한 유형으로 처리할 수 있어 유연한 코딩이 가능해집니다.
변수 유형과 객체 유형이 어떻게 다른지 논의하는 동안 "유형"이 정확히 무엇인지 묻는 질문이 제기됩니다. 내 분석을 바탕으로 유형이 다음과 같은 용도로 사용된다는 결론을 내렸습니다.
이전 예 참조:
Animal animal = new Dog(); // Dog extends Animal
이는 Dog에 메모리가 할당되었지만 변수는 해당 내용을 Animal로 해석함을 의미합니다. 개념은 다음과 같이 시각화할 수 있습니다.
유형은 필터 렌즈처럼 작동하여 데이터가 인식되는 방식을 결정합니다. 관점을 바꾸면 슈퍼클래스의 일반적인 메서드나 인터페이스를 통한 특정 메서드에 집중할 수 있습니다.
다형성의 장점이 클래스 전체에서 공통 메서드를 처리하는 것이라면 왜 항상 슈퍼클래스로 변수를 선언하지 않는지 궁금할 수도 있습니다. 그 이유는 이러한 경우 슈퍼클래스의 데이터에만 메모리가 할당되기 때문입니다.
하위 클래스를 슈퍼클래스로 캐스팅(업캐스팅)하는 것이 가능하지만 그 반대는 불가능합니다. 이는 하위 클래스가 상위 클래스의 데이터와 자체 고유 데이터를 포함하기 때문입니다. 따라서 하위 클래스에 메모리가 사전 할당되어 업캐스팅을 통해 하위 클래스별 메서드를 사용할 수 있습니다.
인터페이스는 유형으로도 작동하며 객체의 메모리에 저장된 데이터를 처리하기 위한 필터 렌즈로서의 역할은 개념적으로 클래스의 역할과 유사합니다. 인터페이스를 통해 호출되는 메서드는 변수 유형(동적 바인딩)이 아닌 객체 유형에 따라 결정됩니다. 이는 변수 유형이 단지 필터 역할을 하여 필터링된 데이터를 활용할 수 있다는 아이디어를 강화합니다.
다형성은 개별 특성을 활용하면서 공통 프로세스를 통합해야 하는 시나리오에 유용합니다. 탐색을 통해 객체의 메모리 레이아웃은 해당 유형에 따라 결정되지만 변수 유형은 해당 메모리가 해석되는 방식을 제어한다는 사실을 더 잘 이해하게 되었는데, 이는 저에게 중요한 깨달음이었습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3