인프런 커뮤니티 질문&답변

크림코딩님의 프로필 이미지
크림코딩

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

다형성

나도코딩님 객체부분에서 다형성의 의미를 알고싶습니다

작성

·

525

5

메인 메소드에서

부모클래스 객체이름 = new 부모클래스 이런식으로 메모리가 형성되었는데

ex)

Camera camera = new Camera();

Camera factorycamera = new Camera();

Camera speedcam = new Camera();

다형성이기에 부모클래스 객체이름 = new 부모클래스or자식클래스 이런식으로 쓸수도있다

ex)

Camera camera = new Camera();

Camera factorycamera = new Factorycamera();

Camera speedcam = new Speedcam();

라고 강의에서 말씀하셨는데요. 둘의 차이가

그냥 뒤에 자식클래스 이름을 쓸수있다는건데

이게 무슨 변화가 있는건가요?



답변 1

8

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
쉬운 동물 클래스를 예시로 설명을 드려볼게요. 다음과 같은 Animal 클래스가 있다고 가정하겠습니다.

class Animal{ 
    public void speak() {
        System.out.println("크앙");
    }
}

그리고 이 클래스를 상속하는 Dog 클래스와 Cat 클래스가 각각 있으며 이들은 speak() 메소드를 오버라이딩합니다.

class Dog extends Animal{ 
    public void speak() {
        System.out.println("멍");
    }
}
class Cat extends Animal{ 
    public void speak() {
        System.out.println("냥");
    }
}

메인 클래스에서 Dog 와 Cat 객체를 각각 만들어보겠습니다. 이때 다형성은 이용하지 않는 경우라고 가정합니다.

Dog dog = new Dog();
Cat cat = new Cat();

그리고 이들을 전달 받아서 speak() 메소드를 호출하는 메소드를 만든다고 해보겠습니다. 아마 아래와 같이 2개의 메소드를 만들어야 하겠죠.

public void makeDogSound(Dog dog) {
    dog.speak();
}

public void makeCatSound(Cat cat) {
    cat.speak();
}

서로 다른 형태의 객체이기 때문에 메소드도 Dog, Cat 에 대해 각각 정의를 해야 하며, 메소드를 호출할 때도 아래와 같이 dog, cat 에 대해 각각 다른 메소드를 호출하도록 해야합니다.

makeDogSound(dog);
makeCatSound(cat);

 

같은 상황에서 다형성을 이용하면 어떨까요?

Animal dog = new Dog();
Animal cat = new Cat();

dog 객체나 cat 객체 모두 Animal 이라는 클래스로 정의할 수 있습니다.
이 두 객체의 speak() 메소드를 호출하는 메소드는 아래와 같이 하나의 메소드로 충분할 겁니다.

public void makeAnimalSound(Animal animal) {
    animal.speak();
}

그리고 위 메소드를 호출할 때도 아래와 같이 할 수 있겠네요.

makeAnimalSound(dog);
makeAnimalSound(cat);


다형성이 없었다면 동물이 추가될 때마다 똑같은 메소드를 수없이 추가해야 할 겁니다. 메소드를 호출할 때도 신경을 써줘야 하구요. 하지만 다형성 덕분에 Animal 클래스를 상속하는 모든 클래스는 makeAnimalSound() 메소드 하나로 모두 같은 동작을 처리할 수 있습니다.

답변이 다소 길었는데 다형성을 어떻게 활용할 수 있는지 이해하시는데 도움이 되었으면 합니다.
감사합니다 😊

크림코딩님의 프로필 이미지
크림코딩
질문자

대박이네요.. 이것도 강의에 넣으셨으면 어땟을까 싶을정도로 설명이 좋습니다

감사합니다!!

나도코딩님의 프로필 이미지
나도코딩
지식공유자

크림코딩님께서 이렇게 구체적으로 좋은 질문들을 해주시니, 다른 분들께도 보충 학습 자료 삼아서 공부하시는데 도움이 될 것 같네요 😊

크림코딩님의 프로필 이미지
크림코딩
질문자

감사합니다ㅠㅠ 다른분들께도 도움될수있도록 만약 더 질문 생기면 가독성 좋게 올려볼게요!

키야.. 좋은 질문 및 답변 감사드립니다.

크림코딩님의 프로필 이미지
크림코딩

작성한 질문수

질문하기