Java

다형성(polymorphism)

ZIAHO 2021. 9. 30. 17:14

다형성(polymorphism)

1. 다형성 : 여러가지 형태를 가질 수 있는 능력. java에서는 상속을 통해 부모클래스 타입의 참조변수로 자식클래스의 객체를 참조할 수 있도록 한것을 말한다.

2. 클래스의 형변환

    1) Up Casting

        : 상속관계에 있는 부모, 자식 클래스 간에 부모타입의 참조형 변수가 모든 자식 타입의 객체 주소를 받을 수 있음

// Dog 클래스는 Animal클래스의 자식
Animal a = new Dog();
// Dog클래스 형에서 Animal클래스형으로 바뀐다.
// 자식객체의 주소를 전달받은 부모타입의 참조변수는 원래 부모타입이었던 멤버만 참조가 가능하다.

    2) Down Casting

        : 자식객체의 주소를 받은 부모 참조형 변수를 가지고 자식의 멤버를 참조해야 할 경우 부모클래스 타입의 참조형 변수를 자식클래스 타입으로 형변환 하는것. 자동으로 처리되지 않기 때문에 ⭐반드시 후손 타입을 명시해서 형변환한다.

// Dog클래스는 Animal클래스의 후손
Animal a = new Dog();
((Dog)t).moveDog();
// 클래스간의 형변환은 ⭐반드시 상속관계에 있는 클래스끼리만 가능하다.

3. 객체배열과 다형성

    1) 다형성을 이용하여 상속관계에 있는 하나의 부모클래스 타입의 배열공간에 여러 종류의 자식클래스를 저장 할 수 있다.

Animal[] aniArr = new Animal[3];

aniArr[0] = new Dog();
aniArr[1] = new Cat();
aniArr[2] = new Monkey();

4. 매개변수와 다형성

    1) 다형성을 이용하여 메소드 호출 시 부모타입의 변수 하나만 사용하여 자식타입의 객체를 받을 수 있다.

 

5. instanceof 연산자

    : 현재 참조형 변수가 어떤 클래스 형의 객체 주소를 참조하고 있는지 확인 할 때 사용하는 연산자. 클래스 타입이 맞으면 true, 맞지 않으면 false를 반환한다.

if(a instanceof Dog) {
	((Dog)a).moveDog();
} else if(a instanceof Cat) {
	((Cat)a).moveCat();
}

// ⭐어떤 타입에 대한 instanceof 연산의 결과가 true라는 것은
// 검사한 타입으로 형변환이 가능하다는 것을 뜻한다.⭐

 

 

<참고>

✔ 바인딩 : 실제 실행할 메소드 코드와 호출할 코드를 연결 시키는 것.

               1) 동적 바인딩 : 컴파일 시 정적 바인딩 된 메소드를 실행할 당시의 객체 타입을 기준으로 바인딩 되는 것.

               2) 상속관계로 이루어져 다형성이 적용된 경우, 메소드 오버라이딩이 되어있으면 정적으로 바인딩 된 메소드 코드보다 오버라이딩 된 메소드 코드를 우선적으로 수행한다.