객체의 생성과정과 표현방법을 분리하여 객체를 생성하는 방법이다.
가독성과 유지보수성을 증가시키며 객체의 불변성을 유지하도록 도와준다 이는 애플리케이션의 안정성에 귀결된다.
하지만 너무 많이 쓰면 코드의 복잡도가 증가하고, 매개변수가 없는 경우 없는데로 생성하기에 항상 검증이 필요하다