클래스 다이어그램

정경섭·2023년 8월 26일
0

Dependency는 클래스 다이어그램에서 일반적으로 제일 많이 사용되는 관계로서,
어떤 클래스가 다른 클래스를 참조하는 것을 말합니다.

클래스 다이어그램에서의 Association은 보통 다른 객체의 참조를 가지는 필드를 의미합니다.

Composition은 Aggregation보다 강한 집합이라고 했습니다.
여기서 강한 집합이란 part가 whole에 종속적이어서 part가 whole의 소유입니다.
반면 Aggregation은 part가 whole에 대해 독립적이어서 whole이 part를 빌려 쓰는 것과 비슷합니다. 이러한 의미 때문에 Aggregation과는 다르게 명확하게 나타나는 점이 있습니다.

첫 번째, part를 가지는 whole 인스턴스가 part 인스턴스의 전체 수명을 책임진다.
두 번째, part에 해당하는 인스턴스는 공유 될 수 없다.
첫 번째의 whole 인스턴스가 part 인스턴스의 전체 수명을 책임진다는 의미는 다음과 같습니다.

whole 인스턴스가 part 인스턴스를 생성
whole 인스턴스가 소멸되면 part 인스턴스도 함께 소멸
whole 인스턴스가 복사되면 part 인스턴스도 함께 복사
두 번째의 part에 해당하는 인스턴스는 공유 될 수 없다는 의미를 먼저 보겠습니다.

추가 설명

  • 합성(Composition)
    만약 둘 사이의 강력한 의존관계가 있어서 하나가 삭제 되었을 때 다른 하나가 존재할 수 없다면,
    이는 합성(Composition)관계이다.
    합성은 포함관계로 설명되기도 한다. 방은 집에 포함되어있다(belongs-to)고 얘기할 수도 있고, 집은 방을 가지고 있다(has-a)고 얘기할 수도 있다.
public class Person {

	private Head head;
	private Body body;
	private List<Leg> legs;
	
	public Person() {
		super();
		this.head = new Head();
		this.body = new Body();
		this.legs = Arrays.asList(new Leg(), new Leg());
	}

	public void growUp() {
		
		head.growUp(1);
		body.growUp(2);
		legs.stream()
			.forEach(leg -> leg.growUp(5));
	}
	
	public void checkLengths() {
		
		System.out.println(head);
		System.out.println(body);
		legs.stream()
			.forEach(System.out::println);
	}
}
  • 집합(Aggregation)
    집합(Aggregation) 관계는 A 클래스가 B를 소유하고 있다거나,
    A 클래스가 B의 부모라거나 하는 것을 가리키는것이 아니다.
    A 클래스의 인스턴스는 B 클래스의 인스턴스와 배타적이지(독립적이지) 않다는것을
    강조하기 위한것이다. Aggregation은 아래처럼 참조만 하면 된다.
public class Car {

	Engine engine;
	List<Wheel> wheels;
}
profile
Keep Building

0개의 댓글