의존 관계 / 컴포지션 / has-a

Jan 30, 2024
의존 관계 / 컴포지션 / has-a

1. 의존 관계

한 클래스가 다른 클래스를 사용하는 것 자동차 클래스가 엔진 클래스를 사용한다면 자동차 클래스는 엔진 클래스에 의존한다. 자동차 클래스는 엔진 클래스의 기능을 사용하여 동작한다

예시 코드

주문(Order) 클래스가 결제(Payment) 클래스에 의존하는 코드 Order 클래스는 Payment 객체를 멤버 변수(필드) 로 가지고 있다. 이는 의존관계다.
public class Payment { public void processPayment() { System.out.println("Payment processed."); } // 결제에 관련된 기능과 필드들... } public class Order { private Payment payment; public Order(Payment payment) { this.payment = payment; } public void checkout() { // 주문 처리 로직... payment.processPayment(); System.out.println("Order checked out."); } // 주문에 관련된 기능과 필드들... }
public class Main { public static void main(String[] args) { Payment payment = new Payment(); Order order = new Order(payment); order.checkout(); } }
Order 클래스의 checkout() 메서드 내부에서 Payment 객체의 processPayment() 메서드를 호출하여 결제를 처리. 디스패처 클래스의 route() 메서드 내부에서 Controller 객체의 메소드들을 호출하여 처리 위의 코드는 주문과 결제 간의 의존관계를 표현. 주문은 결제를 사용하여 처리되며, 결제 객체에 의존한다. Order 객체는 Payment 객체를 사용하여 동작한다!! 디스패처 객체는 컨트롤러 객체를 사용하여 동작한다
💡
생성자를 통해 Payment 객체를 전달 받으면, Order 객체 내에서 payment 필드를 받고, 해당 Payment 객체를 참조할 수 있게 된다 Order 객체 내에서 payment 필드를 통해 해당 Payment 객체의 메서드를 호출할 수 있다
 

2. 컴포지션

한 클래스가 다른 클래스를 포함하면서 그 클래스의 객체를 생성하고 관리하는 관계 자동차 클래스가 엔진 클래스를 포함하고 있으며, 자동차 객체를 생성할 때 엔진 객체도 함께 생성된다. 자동차 클래스는 엔진 객체를 필드로 가지고 있으며, 엔진 객체를 사용하여 자동차의 동작을 제어

예시 코드

public class Wheel { public void rotate() { System.out.println("Wheel rotating."); } // 휠에 관련된 기능과 필드들... } public class Frame { // 프레임에 관련된 기능과 필드들... } public class Bicycle { private Wheel wheel; private Frame frame; public Bicycle(Wheel wheel, Frame frame) { this.wheel = wheel; this.frame = frame; } public void ride() { wheel.rotate(); System.out.println("Bicycle riding."); } // 자전거에 관련된 기능과 필드들... }
public class Main { public static void main(String[] args) { Wheel wheel = new Wheel(); Frame frame = new Frame(); Bicycle bicycle = new Bicycle(wheel, frame); bicycle.ride(); } }
💡
Bicycle 클래스는 Wheel 객체와 Frame 객체를 멤버 변수로 가지고 있다. > 컴포지션
 

3. has-a 관계

한 클래스가 다른 클래스를 가지고 있는 관계를 의미 자동차 클래스가 엔진 클래스를 가지고 있다면 자동차는 엔진을 가지고 있다고 표현할 수 있다. 자동차 클래스는 엔진 객체를 필드로 가지고 있으며, 엔진 객체를 사용하여 자동차의 동작을 수행
Share article

codingb