# 정의 객체 생성을 서브클래스에 위임하여 객체 생성과 사용을 분리하는 디자인 패턴 # 장점 1) 개방-폐쇄 원칙(OCP) 적용된다. 기존의 코드를 변경하지 않고 새로운 기능을 확장할 수 있다. 이렇게 개발하면 Product와 Concrete가 느슨하게 결합한다. 2) 결합도가 낮아진다. 3) 코드는 간결해지고 기존 코드가 복잡해지지 않는다. # 단점 1) 각자의 역할을 나누다 보면 클래스가 늘어나는 게 단점이다. # 예시 // Ship 인터페이스 type Ship interface { // 공통 동작을 정의 Color() string } type WhiteShip struct{} func (c WhiteShip) Color() string { return "color : white" } type Blo..