1.4. Inheritance와 Polymorphism

약 6분

본문 듣기
읽기 설정

글자 크기

줄 간격

글꼴

1.4. Inheritance와 Polymorphism

객체지향 프로그래밍(OOP)에서 **Inheritance(상속)**와 **Polymorphism(다형성)**은 코드 재사용성과 유연성을 높이기 위해 중요한 개념입니다. 이러한 구조가 필요한 이유는 주로 소프트웨어의 유지보수성과 확장성을 개선하기 위함입니다. 예를 들어, 공통된 속성이나 기능을 가진 여러 클래스가 있을 때, 상위 클래스에서 이를 정의하고 하위 클래스에서 상속받음으로써 중복 코드를 줄일 수 있습니다.

Inheritance는 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 것을 말합니다. 상속을 통해 새로운 클래스를 만들 때, 기존 코드를 재사용하는 효과를 얻을 수 있습니다. Polymorphism은 한 메서드나 객체가 여러 형태를 가질 수 있다는 의미로, 주로 메서드 오버로딩과 메서드 오버라이딩의 형태로 나타납니다. 이를 통해 더 유연한 코드를 구현할 수 있습니다.

이 두 가지 개념은 객체지향 프로그래밍의 중요한 원칙 중 하나인 DRY(Don't Repeat Yourself)를 충족시키는 데 중점을 두고 있습니다.

예제

이제 Inheritance와 Polymorphism을 사용한 간단한 예제를 살펴보겠습니다. 먼저, 기본적인 클래스 구조를 정의해보겠습니다.

// 상위 클래스
class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

// 하위 클래스
class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("Cat meows");
    }
}

이 코드에서 Animal 클래스는 기본적인 동물의 동작을 정의하고 있습니다. DogCat 클래스는 Animal을 상속받아 각자 고유한 소리를 출력하도록 오버라이딩합니다. 이를 통해 Animal 클래스 타입의 참조 변수를 사용하여 다형성을 적용한 예제를 확인할 수 있습니다.

코드 java
// 다형성을 사용한 메서드
public class Main {
    public static void makeSound(Animal animal) {
        animal.sound(); // animal이 어떤 클래스의 인스턴스인지에 따라 다르게 출력됨
    }
    
    public static void main(String[] args) {
        Animal dog = new Dog(); // Dog 객체 생성
        Animal cat = new Cat(); // Cat 객체 생성
        
        makeSound(dog); // Dog barks 출력
        makeSound(cat); // Cat meows 출력
    }
}

실습

  1. Animal 클래스를 상속받는 새로운 클래스 Bird를 만들어보세요. Bird 클래스의 sound() 메서드는 "Bird chirps"라는 메시지를 출력해야 합니다.
  2. 다형성을 활용하여 makeSound() 메서드를 호출할 때, Bird 객체를 사용하여 새가 내는 소리를 출력해보세요.

프로젝트

학생관리 프로그램에서 학생의 다양한 정보를 처리할 때, 각 학생의 유형(예: 일반학생, 특기학생 등)에 따라 클래스 구조를 설계해보세요. 상위 클래스를 정의하고, 각 학생 유형에 대한 하위 클래스를 만들어서 상속과 다형성을 구현해보세요. 이 과정에서 코드의 재사용성과 확장성을 고려해야 합니다.

정리

Inheritance와 Polymorphism은 객체지향 프로그래밍의 핵심적인 부분으로, 코드의 재사용성과 확장성을 높이는 데 큰 역할을 합니다. 상속을 통해 클래스를 정의하고, 다형성을 통해 다양한 형태의 객체를 처리할 수 있는 유연성을 제공합니다. 이러한 개념들은 나중에 Spring Boot와 같은 프레임워크를 공부할 때에도 매우 유용하게 사용될 것입니다.

댓글 0

댓글을 남기려면 로그인하세요.

아직 댓글이 없습니다. 첫 댓글을 남겨보세요.