- 팩토리 패턴으로 불필요한 의존성을 없애서 결합 문제를 해결하는 방법을 알아봅시다.
new와 구상클래스
- new를 사용하면 구상클래스의 인스턴스가 만들어지고 인터페이스가 아닌 특정 구현을 사용하는것임
- 구상클래스를 바탕으로 코딩하면 나중에 코드를 수정해야 할 가능성이 커지고 유연성이 떨어짐
- sol) if문을 활용하여 오리를 나타내는 클래스는 여러 개가 있지만 컴파일 하기 전까지는 어떤 것의 인스턴스를 만들어야 하는지 알 수 없게 하는 방법 → 실행 시 주어진 조건에 따라 결정되는 것이고 코드를 변경하거나 확장해야할 때는 코드를 다시 확인하고 새로운 코드를 추가하거나 기존 코드를 제거해야함, 코드의 관리와 갱신이 어려워지고 오류가 생길 가능성도 높아짐
- 다형성 : 인터페이스를 바탕으로 만들어진 코드는 어떤 클래스든 특정 인터페이스만 구현하면 사용할 수 있음
- 구상 클래스를 많이 사용하면 새로운 구상 클래스가 추가될 때마다 코드를 고쳐야 하므로 수많은 문제가 생길 수 있음, 즉 변경에 닫혀 있는 코드가 되는 것임
- 새로운 구상 형식을 써서 확장해야 할 때는 다시 열 수 있도록 만들어야 함
최첨단 피자 코드 만들기
- 바뀌는 부분을 찾아야함
- 피자 종류는 바뀜
- 메소드 인자로 피자 종류를 전달하고 피자 종류를 바탕으로 올바른 구상 클래스의 인스턴스를 만들고 피자 인스턴스 변수에 그 인스턴스를 대입
- 피자의 서브클래스는 피자 종류별 준비 방법을 알고 있음
피자 코드 추가하기
- 신메뉴를 추가하는 상황
- 2가지 메뉴를 추가하고 1가지 피자 메뉴를 제외
- 피자 종류를 나타내는 type.equals 에 대한 if 문은 매번 바뀌는 부분 → 인스턴스를 만드는 구상 클래스를 선택하는 부분
- 피자를 준비하고 굽고 자르고 포장하는 일은 피자를 판매할 때마다 이루어지는 일
장점 : ceos 우선순위를 1순위로 둘 수 있음 → 성실하게 참여할 수 있음