질문했던 내용
* 클래스 관계
상속 (Inheritance):
상속은 한 클래스가 다른 클래스의 특성과 동작을 상속받는 관계입니다. 상속은 일반적으로 "is-a" 관계로 표현됩니다.
class Car {
// 자동차 클래스의 특성과 동작
}
class DumpTruck extends Car {
// 덤프트럭 클래스의 특성과 동작
}
예를 들어, 자동차와 덤프트럭이라는 두 클래스가 있다고 가정해봅시다. 자동차는 덤프트럭이라는 특수한 유형의 자동차이므로, 덤프트럭 클래스는 자동차 클래스를 상속받을 수 있습니다. 이렇게 상속을 통해 덤프트럭 클래스는 자동차 클래스의 특성과 동작을 상속받아 사용할 수 있습니다.
연관 (Association):
연관은 한 클래스가 다른 클래스와 관련성을 가지고 상호 작용하는 관계입니다.
연관은 일반적으로 "has-a" 관계로 표현됩니다.
class Person {
private Phone phone;
// 사람 클래스의 특성과 동작
}
class Phone {
// 핸드폰 클래스의 특성과 동작
}
예를 들어, 사람과 핸드폰이라는 두 클래스가 있다고 가정해봅시다. 사람은 핸드폰을 가지고 사용할 수 있으므로, 사람 클래스와 핸드폰 클래스는 연관 관계를 가질 수 있습니다. 이 관계에서 사람은 핸드폰을 가지고 있으므로 핸드폰 객체를 참조하거나 사용할 수 있습니다.
포함 (Aggregation):
포함은 한 클래스가 다른 클래스를 포함하고 있는 관계로, 전체와 부분 간의 관계를 표현합니다.
포함은 일반적으로 "has-a" 관계로 표현되며, 전체 객체의 생명 주기에 따라 부분 객체도 생성되고 소멸됩니다.
class Computer {
private Keyboard keyboard;
private Mouse mouse;
// 컴퓨터 클래스의 특성과 동작
}
class Keyboard {
// 키보드 클래스의 특성과 동작
}
class Mouse {
// 마우스 클래스의 특성과 동작
}
예를 들어, 컴퓨터는 키보드와 마우스를 포함하고 있으므로, 컴퓨터 클래스와 키보드, 마우스 클래스는 포함 관계를 가질 수 있습니다. 이 관계에서 컴퓨터를 생성하면 키보드와 마우스도 함께 생성되며, 컴퓨터가 소멸하면 키보드와 마우스도 함께 소멸됩니다.
복합 관계(Composition)
클래스가 다른 클래스를 포함하면서 더 강한 종속성을 가지는 관계입니다.
복합 관계는 전체와 부분 간의 관계로서 전체 객체가 부분 객체를 포함하며, 부분 객체는 전체 객체에 속하고 전체 객체의 생명 주기에 종속적입니다.
복합 관계는 "whole-part" 관계로도 알려져 있으며, 일반적으로 "has-a" 관계로 표현됩니다.
클래스의 구성 요소인 부분 객체는 전체 객체와 논리적으로 강하게 연결되어 있습니다.
부분 객체는 전체 객체의 일부분이며, 전체 객체의 생명 주기에 따라 생성되고 소멸됩니다.
class Engine {
// 엔진 클래스의 특성과 동작
}
class Car {
private Engine engine;
// 자동차 클래스의 특성과 동작
}
위의 예시에서는 자동차와 엔진 간의 복합 관계를 보여줍니다. 자동차 클래스는 Engine 클래스를 포함하고 있으며,
Engine 객체는 자동차 객체에 종속적입니다. 자동차가 생성될 때 엔진도 함께 생성되며, 자동차가 소멸될 때 엔진도 함께 소멸됩니다.
복합 관계는 클래스 간의 강한 종속성을 표현하고, 객체 지향 설계에서 더 세부적인 구성 요소를 표현하기 위해 사용됩니다. 이를 통해 클래스 간의 복잡한 관계를 모델링하고 객체들 사이의 구조를 명확하게 표현할 수 있습니다.
합성(Composition)
클래스가 다른 클래스를 포함하면서 더 강한 종속성을 가지는 관계입니다. 합성 관계는 전체와 부분 간의 관계로, 전체 객체가 부분 객체를 구성하는 관계입니다. 부분 객체는 전체 객체의 일부분이며, 전체 객체의 생명 주기에 종속적입니다.
합성 관계는 "whole-part" 관계로도 알려져 있으며, 일반적으로 "has-a" 관계로 표현됩니다. 클래스의 구성 요소인 부분 객체는 전체 객체와 논리적으로 강하게 연결되어 있으며, 전체 객체의 생성과 소멸에 따라 부분 객체도 함께 생성되고 소멸됩니다.
class Engine {
// 엔진 클래스의 특성과 동작
}
class Car {
private Engine engine = new Engine();
// 자동차 클래스의 특성과 동작
}
위의 예시에서는 자동차와 엔진 간의 합성 관계를 보여줍니다. 자동차 클래스는 Engine 클래스를 포함하고 있으며, Car 클래스의 인스턴스가 생성될 때 Engine 객체도 함께 생성됩니다. 엔진 객체는 자동차의 일부분이며, 자동차의 생성과 소멸에 따라 함께 생성되고 소멸됩니다.
합성 관계는 클래스 간의 강한 종속성을 표현하고, 객체 지향 설계에서 객체들 간의 구성을 표현하기 위해 사용됩니다. 이를 통해 클래스들 간의 복잡한 구조와 의존성을 명확하게 표현할 수 있습니다. 합성 관계는 전체와 부분 간의 관계를 강조하며, 전체 객체가 부분 객체를 구성하는 구조를 나타냅니다.
의존(Dependency) 관계
한 클래스가 다른 클래스에 의존하여 해당 클래스의 기능을 사용하거나 상호 작용하는 관계입니다. 의존 관계는 한 클래스가 다른 클래스의 인스턴스를 사용하는 것을 의미하며, 이를 통해 클래스 간의 상호 작용과 협력을 구현할 수 있습니다.
의존 관계는 일반적으로 "uses-a" 관계로 표현되며, 한 클래스가 다른 클래스의 객체를 사용하여 작업을 수행합니다. 의존 관계에서는 의존하는 클래스는 의존 대상 클래스에 종속적이며, 대상 클래스의 변경이 의존하는 클래스에 영향을 줄 수 있습니다.
의존 관계의 예시를 살펴보겠습니다:
class Logger {
public void log(String message) {
// 로그 메시지를 기록하는 기능
}
}
class OrderProcessor {
private Logger logger = new Logger();
public void processOrder(Order order) {
// 주문 처리 로직
logger.log("주문이 처리되었습니다.");
}
}
위의 예시에서는 OrderProcessor 클래스가 Logger 클래스에 의존하고 있습니다. OrderProcessor는 주문 처리 로직을 수행하는데, 주문 처리가 완료되면 Logger 객체를 사용하여 로그 메시지를 기록합니다. 이 경우, OrderProcessor 클래스는 Logger 클래스의 기능을 사용하여 동작을 수행하므로, OrderProcessor 클래스는 Logger 클래스에 의존성을 가지고 있습니다.
의존 관계를 통해 클래스들 간의 협력과 상호 작용을 구현할 수 있습니다. 의존 관계는 한 클래스가 다른 클래스의 기능을 사용하거나 협력하여 작업을 수행하는 방식으로 객체 지향 프로그래밍에서 중요한 개념입니다. 의존 관계를 적절하게 설계하고 관리함으로써 유연하고 확장 가능한 코드를 작성할 수 있습니다.