1. 포함 관계(Composition)에 대한 개념을 이해하자.
: 자동차와 엔진에 관계를 상속으로 표현하면 맞는 개념일까?
: 포함 관계는 한 클래스가 다른 클래스를 포함하는 관계를 말합니다.
자바에서 포함 관계(Composition)는 한 클래스가 다른 클래스를 자신의 필드(속성)로서 포함하는 것을 말합니다. 이 개념은 "has-a" 관계로도 알려져 있으며, 객체 간의 강한 연관성을 나타냅니다. 즉, 하나의 객체가 다른 객체 없이는 의미가 없을 때 포함 관계를 사용합니다.
package com.composition;
public class Engine {
String name;
int price;
void start(){
System.out.println("엔진이 시작됩니다.");
}
void stop(){
System.out.println("엔진을 멈춥니다.");
}
}
package com.composition;
public class Car {
String name;
int price;
//포험 관계(컴포지션)
//car 클래스는 engine 객체를 포함합니다.
Engine engine;
public Car(){
//자동차 객체가 생성될 때 엔진도 함계 생성된다.
//강한 의존성
engine = new Engine();
}
void startCar(){
engine.start();//car 객체를 통해 engine 의 start() 메서드를 호출
System.out.println("자동차가 출발합니다");
}
void stopCar(){
engine.stop();
System.out.println("자동차가 멈춥니다." );
}
//테스트 코드 작성
public static void main(String[] args) {
//TODO**컴포지션 관계는**
//자동차 클래스 내부에서 엔진 객체를 생성시켜야 컴포지션 관계이다.
Car car = new Car();
car.startCar();
car.stopCar();
}//end of main
}
2. 포함관계(Composition) 사례 연구
컴포지션 관계: House는 여러 Room 객체를 소유하며, Room의 생명주기는 House에 종속적입니다.
UML 표기법
- 컴포지션은 채워진 다이아몬드(◆)로 표시.
- House와 Room은 1:N 관계 (하나의 House가 여러 Room을 가짐)
package com.composition;
public class Room {
private String tybe;
public Room(String tybe){
this.tybe = tybe;
}
void describe(){
System.out.println(tybe + "방 입니다.");
}
}
package com.composition;
public class House {
private String address;
Room[] rooms;
public House(String address) {
this.address = address;
this.rooms = new Room[3];// 컴포지션 : House가 Room 배열을 소유하고 있다.
rooms[0] = new Room("거실");
rooms[1] = new Room("침실");
rooms[2] = new Room("주방");
//속성으로 선언되고 내부에서 객체 생성 했기 때문에 컴포지션이라고 할 수 있다.
//room = new Room("안방");
}
void showRooms() {
System.out.println(address + " 에 있는 방 목록");
for (int i = 0; i < rooms.length; i++) {
if (rooms[i] != null) {
rooms[i].describe();
}
}
}
//테스트 작성
public static void main(String[] args) {
House house = new House("부산시 진구");
house.showRooms();
// house 객체가 소멸이 되면 rooms도 Room 객체도 소멸 (GC에 의해 소멸)
house = null;
}
}
728x90
'JAVA 객체 지향 핵심' 카테고리의 다른 글
(JAVA)다형성(Polymorphism) - 17 (0) | 2025.04.22 |
---|---|
(JAVA)연관관계(Association) - 16 (1) | 2025.04.22 |
(JAVA)상속(Inheritance) - 14 (0) | 2025.04.21 |
(JAVA)메서드 오버로딩 - 13 (1) | 2025.04.21 |
(JAVA)전화 번호 관리 프로그램 만들기(연습문제) - 12 (0) | 2025.04.19 |