개발 일지/Java

[Java] 다형성(Polymorphis)

미숫가루설탕많이 2022. 12. 30. 11:44

 다형성(polymorphis)은 상속, 캡슐화, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나이며,  '하나의 객체가 여러 가지 타입을 가질 수 있는 것'을 의미한다.

 

 자바 프로그래밍에서 다형성은 한 타입의 참조 변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미한다. 즉, 상위 클래스 타입의 참조 변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것이라고 할 수 있다.

 

package Practice;

class Animal {
    public void animalInfo() {
        System.out.println("저는 동물입니다.");
    }
}

class Dog extends Animal {
    public void animalInfo() {
        System.out.println("저는 강아지입니다.");
    }
}

class Cat extends Animal {
    public void animalInfo() {
        System.out.println("저는 고양이입니다.");
    }
}

public class HelloJava {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = new Dog();
        Animal cat = new Cat();

        animal.animalInfo();
        dog.animalInfo();
        cat.animalInfo();
    }
}

 

 위 코드에서 참조 변수 animal과 dog 모두 각각 Animal과 dog라는 타입과 일치하는 참조 변수 타입을 사용하는 것을 확인할 수 있다. 하지만 다음 라인에서는 cat 클래스의 인스턴스를 생성하고 그것을 Animal 타입의 참조 변수 cat에 할당하고 있다.

 

 이 경우에는 상위 클래스를 참조 변수의 타입으로 지정했기 때문에 참조 변수가 사용할 수 있는 멤버의 개수는 상위 클래스의 멤버의 수가 된다. 이것이 '상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조하는 것'이자 다형성의 핵심적인 부분이라 할 수 있다.

 

 참고로, 하나의 상위 클래스의 타입으로 하위 클래스의 객체를 참조하는 것은 가능하지만 그 반대는 성립하지 않는다. 실제 객체의 멤버 개수보다 참조 변수가 사용할 수 있는 멤버의 개수가 더 많기 때문이다.

 

 

 

 

참조 변수의 다형성


 자바 프로그래밍에서는 다형성을 위해 상위 클래스 타입의 참조 변수로 하위 클래스 타입의 인스턴스를 참조할 수 있도록 하고 있다. 이때, 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 같거나 적어야 참조할 수 있다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] instanceof 연산자  (0) 2022.12.30
[Java] 참조 변수의 타입 변환  (0) 2022.12.30
[Java] getter과 setter 메서드  (2) 2022.12.29
[Java] 캡슐화(Encapsulation)  (0) 2022.12.29
[Java] Object 클래스  (0) 2022.12.29