반응형
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 |