💡 학습 목표
- 포함 관계(**Composition)**에 대한 개념을 이해하자.
- 포함관계(Composition) 사례 연구
1. 포함 관계(Composition)에 대한 개념을 이해하자.
: 자동차와 엔진에 관계를 상속으로 표현하면 맞는 개념일까?
: 포함 관계는 한 클래스가 다른 클래스를 포함하는 관계를 말합니다.
자바에서 포함 관계(Composition)는 한 클래스가 다른 클래스를 자신의 필드(멤버변수)로서 포함하는 것을 말합니다. 이 개념은 "has-a" 관계로도 알려져 있으며, 객체 간의 강한 연관성을 나타냅니다. 즉, 하나의 객체가 다른 객체 없이는 의미가 없을 때 포함 관계를 사용합니다.

package basic.ch18;
import java.security.PublicKey;
public class Car {
String name;
int price;
Engine engine;
//포함(컴포지션) 관계
//객체 안에 필요 관계를 직접 생성할 경우 포함(Composition) 관계라고 한다!
public Car() {
engine = new Engine();
//Car 라는 객체가 생성이 될 때
//Engine 객체도 함께 생성이 된다.
}
public void startCar() {
engine.start();
System.out.println("자동차가 출발합니다");
}
public void stopCar() {
engine.stop();
System.out.println("자동차가 멈춥니다");
}
}
package basic.ch18;
public class Engine {
String name;
int price;
void start() {
System.out.println("엔진이 시작됩니다");
}
void stop() {
System.out.println("엔진이 멈춥니다");
}
}
package basic.ch18;
public class CarMainTest {
public static void main(String[] args) {
Car car1 = new Car();
car1.startCar();
//엔진의 속성인 name 변수에 값을 초기화 해보자
car1.engine.name ="V8";
car1.engine.price = 4000;
System.out.println(car1.engine.name);
System.out.println(car1.engine.price);
}
}
2. 포함관계(Composition) 사례 연구
컴퓨터, CUP (Composition) 으로 설계 하기
package basic.ch18;
public class CPU {
private String name;
void process() {
System.out.println(".... 처리중...");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package basic.ch18;
public class Computer {
private CPU cpu;
public Computer() {
cpu = new CPU(); // 콤포지션 관계
cpu.setName("인텔10");
}
void start() {
System.out.println("컴퓨터가 시작 됩니다.");
cpu.process();
}
// 필요하다면 setter 메서드를 만들 수 있다.
// 외부에서 주입 받을 수 있다.
public void setCPU(CPU cpu) {
this.cpu = cpu;
}
// 외부에서 접근 가능한 getter
public CPU getCPU() {
return cpu;
}
}
package basic.ch18;
public class ComputerTest {
public static void main(String[] args) {
Computer computer = new Computer();
CPU cpu1 = new CPU();
cpu1.setName("AMD");
computer.setCPU(cpu1);
// 우리 컴퓨터에 장착 되어있는 CPU 이름
// 출력하고 싶다면??
System.out.println(computer.getCPU().getName());
}
}
💡 포함 관계 특징 (중요)
- 포함된 객체는 포함하는 객체 안에서만 존재하며, 포함하는 객체가 파괴되면 포함된 객체도 함께 파괴됩니다.
- 이 관계는 객체 간의 강한 의존성을 특징으로 하며, 소유하는 객체가 완전한 책임을 가집니다.
- 포함관계는 연관관계보다 더 강한 연결을 의미합니다
package basic.exercise.test01;
public class MainTest1 {
public static void main(String[] args) {
//문제 1
A a = new A();
// a 참조변수로 시작해서 D에 name 값을
//화면에 출력 하시오.
System.out.println(a.b.c.d.getName());
}
}
package basic.exercise.test01;
public class D {
private String name;
public D() {
name = "나는 D 이다";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package basic.exercise.test01;
public class C extends D {
D d;
public C() {
d = new D();
}
}
package basic.exercise.test01;
public class B extends C {
C c;
public B() {
c = new C();
}
}
package basic.exercise.test01;
public class A extends B {
B b;
public A() {
b = new B();
}
}
'Java' 카테고리의 다른 글
다형성(Polymorphism) (0) | 2024.04.24 |
---|---|
연관, 의존 관계란? (1) | 2024.04.23 |
상속(Inheritance) (1) | 2024.04.23 |
메서드 오버로딩 (0) | 2024.04.23 |
전화번호관리 프로그램 만들기 - {연습문제} (0) | 2024.04.22 |