1. 기능 분해 하나의 기능은 여러가지의 하위 기능으로 분해할 수 있다. 기능을 분류하고 각 객체에게 기능 구현의 책임을 제공한다. 분리한 하위 기능을 통해서 전체 기능을 구현하게 됨 2. 문제 클래스나 메소드의 크기가 증가할 경우 절차지향에서 마주하였던 문제가 또 다시 발생 큰 클래스 : 많은 필드를 많은 메소드가 공유 큰 메소드 : 많은 변수를 많은 코드가 공요 여러 기능이 한 클래스 및 메소드에 섞에 있을 가능성이 존재한다. => 데이터를 공유하게 됨으로써 코드를 수정하기 어려움을 겪게 됨 그럼 어떻게 해야 할까? 책임에 따라 알맞게 코드를 분리할 필요가 있다. 3. 책임에 따른 클래스 분배 분리 방법 패턴적용 전형적인 역할 분리 ex) 웹 : 컨트롤러, 서비스, DAO / 복잡한 도메인 : 엔티티..