자바에서 객체 조합은 여러 객체를 조합하여 복잡한 기능을 구현하는 것을 의미합니다.
객체 포함 관계(Composition):
한 객체가 다른 객체를 포함하는 관계입니다. 예를 들어, 자동차 객체가 엔진 객체를 포함하는 경우입니다.
객체 집합 관계(Aggregation):
한 객체가 다른 객체들의 집합을 가지고 있는 관계입니다. 예를 들어, 학교 객체가 학생 객체들의 집합을 가지고 있는 경우입니다.
객체 상속 관계(Inheritance):
한 객체가 다른 객체의 특성을 상속받는 관계입니다. 예를 들어, 자동차 객체가 탈 것 객체의 특성을 상속받는 경우입니다.
객체 의존 관계(Dependency):
한 객체가 다른 객체에 의존하는 관계입니다. 예를 들어, 자동차 객체가 엔진 객체에 의존하는 경우입니다.
객체 조합(Object Composition)은 소프트웨어 설계에서 객체의 기능을 확장하거나 새로운 기능을 추가하기 위해 다른 객체를 포함하거나 참조하는 방법을 말합니다.
이는 상속과 대조적으로, 클래스의 기능을 재사용하고 확장하는 보다 유연한 방법을 제공합니다.
객체 조합을 사용하면 개별 객체가 독립적으로 작동하고, 필요에 따라 동적으로 결합될 수 있습니다.
구성(Composition): 한 객체가 다른 객체를 포함하거나 참조하는 것을 의미합니다. 이를 통해 포함된 객체의 기능을 직접 사용하거나, 새로운 기능을 추가할 수 있습니다.
위임(Delegation): 포함된 객체의 메서드를 호출하여 작업을 수행하는 방식입니다. 즉, 실제 작업은 포함된 객체에 위임됩니다.
public class FilterOutputStream extends OutputStream {
protected OutputStream out;
public FilterOutputStream(OutputStream out) {
this.out = out;
}
@Override
public void write(int b) throws IOException {
out.write(b);
}
// 추가 기능을 제공하는 다른 메서드들...
}
여기서 FilterOutputStream은 OutputStream을 상속받으면서, 내부에 OutputStream 객체(out)를 포함하고 있습니다. 이는 객체 조합의 예로, FilterOutputStream은 OutputStream의 기본 기능을 사용하면서 추가적인 기능을 제공할 수 있습니다.
유연성: 상속과 달리, 객체 조합은 런타임에 객체를 동적으로 변경하거나 확장할 수 있습니다.
재사용성: 동일한 객체를 여러 조합에서 재사용할 수 있습니다.
유지보수성: 새로운 기능을 추가할 때 기존 코드를 변경하지 않고도 확장이 가능합니다.