DAO(Data Access Object)
DB를 사용해서 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트
DAO의 분리
관심사의 분리
- 객체지향에서 변한다는 것은 오브젝트에 대한 설계와 이를 구현한 코드가 변한다는 뜻
- 변화가 한 번에 한 가지 관심에 집중돼서 일어난다면, 우리가 준비해야 할 일은 한가지 관심이 한 군데에 집중되게 하는 것이다.
- 즉 관심이 같은 것끼리는 모으고, 관심이 다른 것은 따로 떨어져 있게 하는 것이다.
메소드 추출
공통의 기능을 담당하는 메소드로 중복된 코드를 뽑아내는 것
템플릿 메소드 패턴
슈퍼클래스에 기본적인 로직의 흐름(커넥션 가져오기, SQL 생성, 실행, 반환)을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법을 디자인패턴에서 템플릿 메소드 패턴이라고 한다.
인터페이스 도입
- 인터페이스는 어떤 일을 하겠다는 기능만 정의해놓은 것
- 추상화란 어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업
- 오브젝트를 만들려면 구체적인 클래스 하나를 선택해야한다.
- 인터페이스로 추상화해놓은 최소한의 통로를 통해 접근하는 쪽에서 오브젝트를 만들때 사용할 클래스가 무엇인지 몰라도 된다.
- 인터페이스를 통해 접근 하면 실제 구현 클래스를 바꿔도 신경 쓸 일이 없다.
높은 응집도 낮은 결합도
높은 응집도
- 변경이 일어날 때 모듈의 많은 부분이 함께 바뀐다면 응집도가 높다
- 만약 모듈의 일부분에만 변경이 일어나면 모듈의 전체젝인 부분에서 바뀌어야 하는지 파악해야 한다
낮은 결합도
- 느슨한 연결은 관계를 유지하는 데 꼭 필요한 최소한의 방법만 간접적인 형태로 제공
- 나머지는 서로 독립적이고 알 필요도 없게 만들어준다.
- 결합도가 낮아지면 변화에 대응하는 속도가 높아지고, 구성이 깔끔해지며 확장에 편리하다.