Java

Composition(포함관계)

H_u 2024. 4. 23. 16:20
728x90
반응형
SMALL

💡 학습 목표

  1. 포함 관계(**Composition)**에 대한 개념을 이해하자.
  2. 포함관계(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();

}

}

728x90
반응형
SMALL

'Java' 카테고리의 다른 글

다형성(Polymorphism)  (0) 2024.04.24
연관, 의존 관계란?  (1) 2024.04.23
상속(Inheritance)  (1) 2024.04.23
메서드 오버로딩  (0) 2024.04.23
전화번호관리 프로그램 만들기 - {연습문제}  (0) 2024.04.22