Inheritance와 Composition (클래스 간의 관계)

2024. 12. 7. 09:24·Language/Java
반응형

Inheritance

정의

Inheritance(상속)은 객체지향 프로그래밍에서 상위 클래스(부모)의 속성과 메서드를 하위 클래스(자식)가 물려받는 개념이다.

`is-a`관계를 나타낸다. 

 

장단점

장점

  • 재사용성
    부모 클래스의 기능을 자식 클래스에서 재사용 할 수 있다.

  • 계층구조
    클래스 간 상속관계를 통해 계층 구조를형성할 수 있다.

  • 다형성(오버라이딩)
    자식 클래스에서 부모 클래스의 메서드를 오버라이딩(재정의)하여 다형성을 구현할 수 있다.
  • 유지보수 용이
    공통 기능을 상위 클래스에 두고 관리할 수 있어 유지보수가 쉬워진다.

 

단점

 

  • 결합도 증가
    부모 클래스의 기능을 자식 클래스에서 재사용 할 수 있다.

  • 유연성 부족
    자식 클래스는 부모 클래스에 강하게 의존하게 되어 유연성이 떨어진다.

  • 다중 상속 불가
    Java는 다중 상속을 지원하지 않는다.

 

 

예시

// 부모 클래스
class Animal {
    public void makeSound() {
        System.out.println("Some generic animal sound");
    }
}

// 자식 클래스
class Dog extends Animal {
    // 메서드 오버라이딩
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

// 자식 클래스
class Cat extends Animal {
    // 메서드 오버라이딩
    @Override
    public void makeSound() {
        System.out.println("Meow");
    }
}

// Main 클래스
public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();
        
        myDog.makeSound();  // Bark
        myCat.makeSound();  // Meow
    }
}

`Dog`와 `Cat`클래스는 `Animal`클래스를 상속 받아 `Dog is-a Animal`, `Cat is-a Animal` 관계를 나타낸다.

 

 

 


Composition

정의

Composition은 객체지향 프로그래밍에서 하나의 클래스가 다른 클래스의 객체를 멤버 변수로 포함하는 방식으로 클래스 간의 관계를 나타낸다.

`has-a`관계를 나타낸다.


장단점

장점

  • 재사용성
    기존 클래스 기능을 재사용 할 수 있다.

  • 유연성 (낮은 결합도)
    결합도가 낮아, 변경 사항이 발생할 때, 영향을 받는 클래스 범위를 최소화 할 수 있다.

  • 캡슐화
    내부 구현을 숨기고 외부에 노출되지 않도록 한다.

  • 다중 상속 문제 해결
    Java에서는 다중 상속을 지원하지 않지만, Composition을 사용하면 여러 클래스의 기능을 결합할 수 있다.

 

단점

  • 복잡성 증가
    구성 요소가 많아질수록 클래스 간 관계가 복잡해질 수 있다.

  • 더 많은 코드 작성
    상속에 비해 객체 생성과 메서드 호출을 위한 추가 코드가 필요하다.

 

예시

// Engine 클래스
class Engine {
    public void start() {
        System.out.println("Engine started.");
    }

    public void stop() {
        System.out.println("Engine stopped.");
    }
}

// Car 클래스
class Car {
    private Engine engine;

    // Car 생성자에서 Engine 객체를 초기화
    public Car() {
        engine = new Engine();
    }

    // Car 메서드에서 Engine 객체의 메서드를 호출
    public void startCar() {
        engine.start();
        System.out.println("Car started.");
    }

    public void stopCar() {
        engine.stop();
        System.out.println("Car stopped.");
    }
}

// Main 클래스
public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.startCar();  // Engine started. Car started.
        car.stopCar();   // Engine stopped. Car stopped.
    }
}

`Car`클래스는 `Engine` 객체를 포함하고 있어 `Car has-a Engine` 관계를 나타낼 수 있다.

 

 

 

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

Error & Exception  (1) 2024.12.09
가비지 컬렉션 (GC; Garbage Collection)  (0) 2024.12.08
오토박싱(Autoboxing)/언박싱(Unboxing)  (0) 2024.12.06
Promotion(자동형변환)과 Casting(명시적형변환), Upcasting vs Downcasting  (0) 2024.12.05
String Interning  (0) 2024.12.04
'Language/Java' 카테고리의 다른 글
  • Error & Exception
  • 가비지 컬렉션 (GC; Garbage Collection)
  • 오토박싱(Autoboxing)/언박싱(Unboxing)
  • Promotion(자동형변환)과 Casting(명시적형변환), Upcasting vs Downcasting
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DFS
    ncp200
    lcs
    백트래킹
    ncp202
    다익스트라
    벨만포드
    분할정복
    BFS
    해시
    Spring Boot
    CI/CD
    완전탐색
    다이나믹프로그래밍
    프로그래머스
    Network
    집합
    백준
    github actions
    ncp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
Inheritance와 Composition (클래스 간의 관계)
상단으로

티스토리툴바