다형성(Polymorphism)이란?
다형성은 '다양한 형태를 가질 수 있는 능력'을 의미합니다.
부모 클래스를 상속받은 여러 자식 클래스들이 같은 메서드나 속성을 다른 방식이나 형태로 사용하는 개념을 말합니다.
예를 들어 '동물' 부모클래스가 있다고 가정해 봅시다. 부모클래스에는 '울음소리()'라는 메서드가 있습니다. 이를 상속받는 자식 클래스 '개'와 '고양이'가 있습니다.
'개'와 '고양이'는 각각 '울음소리()'가 있지만 '개' 클래스에서는 "멍멍"이라고 소리를 내고, '고양이' 클래스에서는 "야옹"이라고 소리를 낼 수 있습니다.
자동 타입 변환
'자동 타입 변환'이란 부모 클래스 타입 변수에 자식 객체 타입을 대입하면 자동으로 타입을 변환해 주는 것입니다.
Cat cat = new Cat();
Animal animal = cat;
//Animal animal = new Cat(); 이와 같이 선언도 가능하다.
위 예제에서는 cat과 animal 변수는 타입만 다를 뿐, 동일한 Cat 객체를 참조합니다.
부모타입으로 자동 형변환 된 변수는 부모클래스에 선언된 멤버에만 접근할 수 있습니다.
단, 자식 클래스에서 재정의(override)된 메서드가 있다면 자식 메서드를 대신 호출합니다.
자동 타입 변환이 필요한 이유
'자동 타입 변환'을 이용하여 필드와 매개변수의 다형성을 구현하기 위함입니다.
자동 타입 변환을 통해 부모 클래스의 참조 변수로 자식 클래스의 인스턴스를 다룰 수 있기 때문에, 코드를 보다 간결하고 유연하게 작성할 수 있습니다.
* 예시에서는 개나 고양이만 설명하였지만 지구상 수백수천 동물들을 프로그래밍 한다고 생각해보세요!
부모 클래스의 참조 변수로 여러 종류의 자식 클래스의 인스턴스를 다룰 수 있기 때문
에, 같은 메서드를 호출하더라도 각각 다른 동작을 수행할 수 있습니다.
* animal 참조변수에 cat을 넣으면 "야옹" dog를 넣으면 "멍멍"으로 동작하는 등.
또한 자동 타입 변환을 통해 부모 클래스를 활용하면, 새로운 자식 클래스를 추가하거나 기존 클래스의 구현을 변경할 때 부모 클래스의 코드를 수정하지 않아도 됩니다.
* "꽥꽥"하고 우는 고양이가 발견되었다고 해도 부모클래스의 울음소리를 고치지 않아도 됩니다!
'Java' 카테고리의 다른 글
[Java/자바] toString() 메서드에 대하여 (0) | 2023.09.05 |
---|---|
[Java/자바] 중첩 클래스에 대하여. (Nested class) (0) | 2023.09.04 |
[Java/자바] StringBuilder와 String의 메서드들에 대하여. (getChars, setLength, append, toString, toCharArray, repeat) (0) | 2023.09.01 |
[Java/자바] 접근 제한자에 대하여. (Access Modifier) (0) | 2023.08.31 |
[Java/자바] String 클래스의 valueOf() 메서드에 대하여 (0) | 2023.08.29 |