다형성

정병웅·2024년 2월 19일
0

자바

목록 보기
7/8

인프런 김영한 강사님 강의를 수강한 뒤 작성한 글입니다.
수정 또는 잘못된 부분이 있다면 댓글 부탁드리겠습니다🧐

(내 머릿속) 정의

  • 하나의 객체를 이용해서 다양한 형태로 변형된 객체들을 생성하는 것이다.
  • 하나의 객체에서 하나의 목적을 다양한 형태로 사용할 수 있게 하는 것이다.

사전적 정의

  • 같은 자료형에 여러가지 타입의 데이터를 대입하여 다양한 결과를 얻어내는 것
  • 하나의 객체가 다른 타입으로 이용할 수 있는 것

예시 설명

Animal 이란 클래스는 동물을 추상화한 클래스이고,
상속으로 실제 동물의 울음소리를 구현한 dog, cat, caw 클래스를 선언 할 것이다. 이때 Animal 클래스의 메서드를 오버라이딩 할 것 이다.

Animal 클래스

package poly.Exmaple;

public class Animal {
    public void sound() {
        System.out.println("동물 울음 소리");
    }
}

Cat ,Dog ,Caw 클래스

package poly.Exmaple;

public class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("야옹");
    }
}
========================================
public class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}
========================================
public class Caw extends Animal {
    @Override
    public void sound() {
        System.out.println("음메");
    }
}

Main 클래스

package poly.Exmaple;

public class SoundMain {
    public static void main(String[] args) {
        Animal[] AnimalArr = {new Cat(), new Dog(), new Caw()};

        animalSoundCall(AnimalArr);
    }

    private static void animalSoundCall(Animal[] AnimalArr) {
        for (Animal animal : AnimalArr) {
            System.out.println("***************");
            animal.sound();
            System.out.println("***************");
        }
    }
}

설명

다형성을 사용하지 않고 코드를 작성 했다면, 아래의 예시 처럼 동일한 목적(동물 소리)의 코드를 각각 dog, caw, cat 객체마다 반복하여 작성 했을 것이다.

Cat cat = new Cat();
System.out.println("***************");
cat.sound();
System.out.println("***************");

하지만, 상속을 사용하여 코드의 중복성을 줄였으며, 추후 다른 동물의 객체를 추가 하여도 실질적으로 Animal 타입의 배열에만 추가하면 된다.
그리고 중요한 한 가지를 알 수 있다.

다형성을 구현 하면 메서드를 overide 하게 되는데 이때, 오버라이딩 한 메서드가 우선 권을 가진다!!

public class Animal {
    public void sound() {
        System.out.println("동물 울음 소리");
    }
}

위의 코드를 보면 부모 클래스의 Animal에서 sound 메서드를 정의 하였지만, 자식 클래스의 메서드에서 정의된 함수를 로그에 찍는 것을 보면 알 수 있다.

정리

  1. 오버라이딩 된 메서드가 우선권을 가짐.
  2. 동일한 목적을 추상화 할 수 있다면, 다형성 설계 하는 것을 생각.
  3. 멤버 변수는 오버라이딩 되지 않음.
profile
인생은 IT 노가다

0개의 댓글