결합도 판정

컴포지션에서 부품에 의존 중

- 두 사이 결합도는 높냐 낮냐?
Head클래스를 수정해보면 알 수 있음. 이때Robot클래스를 수정해야 한다면 tight coupling

fovAngle 멤버 변수를 새로 추가
따라서 Head 클래스의 생성자도 변경됨

Robot 클래스를 수정하지 않고 컴파일하면 오류 발생
this.head = new Head();Head클래스의 기본 생성자가 사라졌기에 컴파일 오류

Robot 클래스의 코드가 변했음

new Robot() 생성자를 호출하는 다른 곳은 고려하지 않기
지금은 Robot 클래스, Head 클래스 둘의 결합도에 집중

위 원칙대로 판단하면
- tight coupling
결합도를 줄이자

화분의 물주기 예 참고
WaterSpray 클래스의 생성자를 주목
SprayHead,SprayBottle타입을 매개변수로 받음- 외부에서 넣어주는거네?!

미리 외부에서 Head 개체 생성해서 Robot 생성자의 인자로 전달

Head 개체를 생성자의 매개변수로 받는 효과는 Robot 클래스가 Head 클래스 내부 구현을 몰라도 됨
Robot클래스 안에서Head개체 생성에 관여하지 않음- 몰라도 됨
- loose coupling

Robot 클래스의 생성자를 호출하는 곳은 바꾸고 나서 Head 클래스에 fovAngle 멤버 변수와 생성자의 매개변수 목록을 수정한 뒤 Robot 클래스를 바꿔야 하는지 확인해보자.

Robot 클래스의 코드를 바꾸지 않아도 되니 결합도는 낮음
- loose coupling