본문 바로가기
Java_language

다형성

by 헬로제이콥 2025. 12. 3.

 

🎭 다형성 (Polymorphism)

다형성은 '여러 가지 모습'이라는 뜻이에요. 그리스어로 'Poly'는 '많다'는 뜻이고, 'Morph'는 '모양'이라는 뜻이거든요.

다형성의 개념

똑같은 이름을 가진 능력이더라도, 그것을 사용하는 대상에 따라 다르게 행동하는 것을 말해요.

  • 똑같은 명령!  다른 행동!

다형성 예제: '말하기' 능력

위의 '동물' 예제에 '말하기'라는 능력을 추가해 볼게요.

  1. 부모 (동물): '말하기' 능력이 있어요.
  2. 자식 1 (개): '말하기'를 하면 "멍멍!" 소리를 내요.
  3. 자식 2 (고양이): '말하기'를 하면 "야옹!" 소리를 내요.
  4. 자식 3 (사람): '말하기'를 하면 "안녕하세요!"라고 인사해요.

 모두 '말하기'라는 똑같은 이름을 가진 능력을 사용했지만, 개, 고양이, 사람에 따라서 결과가 완전히 다르죠? 이것이 바로 다형성이에요.

  • 선생님이 여러분에게 "뛰어!"라고 명령하면,
    • 친구는 운동장으로 달려갈 것이고,
    • 로봇청소기는 방을 청소하며 움직일 것이고,
    • 물에 띄운 배물 위를 미끄러져 갈 거예요.

똑같은 '뛰어!'라는 명령이 상황에 따라 다르게 해석되는 것과 같아요. 다형성을 이용하면 프로그램을 더 유연하고 똑똑하게 만들 수 있답니다!

🧑‍🏫 다형성 (Polymorphism) 쉬운 자바 예제: '인사하기' 능력

제공해주신 '말하기' 예제와 똑같은 구조로, 다형성의 핵심 개념인 '하나의 명령, 여러 가지 행동'을 보여주는 짧고 쉬운 자바 코드를 만들어보겠습니다.

1. 부모 클래스: Animal (동물) 🐾

모든 동물이 가져야 할 기본적인 능력으로 sayHello() (인사하기) 메서드를 정의합니다.

Java
 
// 👑 부모 클래스: Animal (동물)
class Animal {
    public void sayHello() {
        System.out.println("... (동물이 인사를 할 수 있지만, 무슨 소리를 낼지는 아직 몰라요)");
    }
}

2. 자식 클래스: Dog, Cat, Person 정의 🐶🐱🧑

Animal 클래스를 상속받아 sayHello() 메서드를 각자의 방식으로 재정의(Override)합니다.

Java
 
// 🐶 자식 클래스 1: Dog (개)
class Dog extends Animal {
    @Override
    public void sayHello() {
        System.out.println("멍멍! 짖으며 인사합니다.");
    }
}

// 🐱 자식 클래스 2: Cat (고양이)
class Cat extends Animal {
    @Override
    public void sayHello() {
        System.out.println("야옹! 하며 인사합니다.");
    }
}

// 🧑 자식 클래스 3: Person (사람)
class Person extends Animal {
    @Override
    public void sayHello() {
        System.out.println("안녕하세요! 라고 말하며 인사합니다.");
    }
}

3. 실행 예제: 똑같은 명령 sayHello() 🗣️

Java

 
public class HelloPolymorphismNoArray {
    public static void main(String[] args) {
        
        // --- 🐶 다형성 적용: 부모 타입(Animal) 변수에 자식 객체를 할당 ---
        
        // Animal 타입 변수가 Dog 객체를 가리킴
        Animal dog = new Dog();
        
        // Animal 타입 변수가 Cat 객체를 가리킴
        Animal cat = new Cat();
        
        // Animal 타입 변수가 Person 객체를 가리킴
        Animal person = new Person();
        
        System.out.println("--- 모든 객체에게 'sayHello()' 명령! ---");

        // 1. dog.sayHello() 호출: 실제 Dog 객체의 sayHello() 실행
        dog.sayHello();

        // 2. cat.sayHello() 호출: 실제 Cat 객체의 sayHello() 실행
        cat.sayHello();

        // 3. person.sayHello() 호출: 실제 Person 객체의 sayHello() 실행
        person.sayHello();
        
    }
}

실행 결과

--- 모든 객체에게 'sayHello()' 명령! ---
멍멍! 짖으며 인사합니다.
야옹! 하며 인사합니다.
안녕하세요! 라고 말하며 인사합니다.

이처럼 a.sayHello()라는 하나의 명령이 개, 고양이, 사람 각자의 행동을 유발하는 것이 바로 다형성입니다!

'Java_language' 카테고리의 다른 글

추상화란  (0) 2025.12.03
오버라이딩 (Overriding)  (0) 2025.12.03
상속  (0) 2025.12.03
상속이란?  (0) 2025.12.01
자바의 import  (0) 2025.12.01