ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상속(Inheritance)이란?
    Design Pattern/객체지향 2024. 4. 12. 21:46
    반응형

     상속은 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 원칙 중 하나로, 코드 재사용성을 높이고, 복잡성을 관리할 수 있게 돕습니다. 하지만, 잘못 사용하면 유지보수의 어려움을 초래할 수 있습니다. 이 글에서는 Java와 Go 언어를 통해 상속의 개념을 설명하고, 상속의 사용을 피해야 하는 이유에 대해서도 논의해 보겠습니다.

    1. 상속이란 무엇인가?

     상속은 한 클래스(부모 클래스)의 속성과 메서드를 다른 클래스(자식 클래스)가 받아 사용할 수 있게 하는 기능입니다. 이를 통해 공통의 코드를 재사용하고 확장할 수 있으며, 계층적인 클래스 구조를 만들어 관리할 수 있습니다.

    2. Java에서의 상속

     Java에서는 extends 키워드를 사용하여 클래스 간 상속을 구현합니다. 자식 클래스는 부모 클래스의 모든 public 및 protected 멤버를 상속받습니다.

    예시 코드:

    class Vehicle {
        public void move() {
            System.out.println("The vehicle is moving.");
        }
    }
    
    class Car extends Vehicle {
        @Override
        public void move() {
            super.move();
            System.out.println("The car is driving.");
        }
    }

     

    3. Go에서의 상속(혹은 그 대안)

     Go는 전통적인 상속 구조를 지원하지 않습니다. 대신, 구조체 임베딩을 통해 유사한 기능을 구현할 수 있습니다. 이 방법은 명시적이며, is-a 관계보다는 has-a 관계를 더 자연스럽게 표현합니다.

    예시 코드:

    type Vehicle struct {
        // Vehicle-specific fields
    }
    
    func (v Vehicle) Move() {
        fmt.Println("The vehicle is moving.")
    }
    
    type Car struct {
        Vehicle // Embedding Vehicle
    }
    
    func (c Car) Move() {
        c.Vehicle.Move()
        fmt.Println("The car is driving.")
    }

     

    4. Java와 Go의 상속 비교

    • Java: 명시적인 상속 구조와 강력한 다형성을 제공하며, 클래스 간의 계층적 관계를 쉽게 형성할 수 있습니다.
    • Go: 전통적인 상속 대신 구조체를 임베딩하여 유사한 기능을 제공합니다. 이는 코드의 명확성을 유지하며, 더 느슨한 결합을 가능하게 합니다.

    5. 상속의 단점과 왜 잘 안 쓰이는가?

    상속은 유용한 도구이지만, 다음과 같은 이유로 인해 문제를 일으킬 수 있습니다:

    • 강한 결합: 부모 클래스의 변경이 모든 자식 클래스에 영향을 미칠 수 있습니다.
    • 리스코프 치환 원칙 위배: 자식 클래스가 부모 클래스의 기능을 적절히 확장하지 않고 오버라이드할 때, 프로그램의 예측성이 떨어집니다.
    • 유지보수의 어려움: 크고 복잡한 상속 체계는 이해하고 관리하기 어렵습니다.

    6. 결론

     상속은 객체지향 프로그래밍에서 코드 재사용과 확장성을 높이는 강력한 메커니즘입니다. 그러나, 상속의 복잡성과 유지보수의 어려움을 고려할 때, 구성과 같은 다른 패턴을 사용하는 것이 더 적합할 수 있습니다. 프로그래밍 설계 시에는 상속과 구성 중 어떤 것이 문제를 해결하는 데 더 효과적인지 신중하게 고려해야 합니다.

     

    반응형
Designed by Tistory.