기능과 책임 분리

이 글과 하위 글들은 [객체 지향 프로그래밍 입문]에 관한 내용입니다. 최범균님의 인프런의 강의를 보며 정리한 내용으로 문제가 될시 삭제하겠습니다.

기능 분해

하나의 기능은 여러 개의 하위 기능으로 분해한다.

기능은 곧 책임!

분리한 각 기능을 알맞게 분배한다.

큰 클래스, 큰 메서드는 곧 문제가 된다!

클래스나 메서드가 커지면 절차 지향의 문제가 동일하게 발생된다.

  • 큰 클래스 -> 많은 필드를 많은 메서드가 공유하게 된다.

  • 큰 메서드 -> 많은 변수를 많은 코드가 공유한다.

  • 여러 기능이 한 클래스/메서드에 섞여 있을 가능성이 높아지게 된다.

그래서 책임에 따라 알맞게 코드를 분리하는게 필요하다.

큰 클래스/메서드에 대한 몇 가지 책임 분배/분리 방법

  • 패턴 적용

  • 계산 기능 분리

  • 외부 연동 분리

  • 조건별 분기는 추상화

패턴 적용 - 전형적인 역할 분리

  • 간단한 웹: 컨트롤러, 서비스, DAO

  • 복잡한 도메인: 엔티티, 밸류, 리포지토리, 도메인 서비스

  • AOP: Aspect(공통 기능)

  • GoF: 팩토리, 빌더, 전략, 템플릿 메서드, 프록시/데코레이터 등

계산 분리

연동 분

네트워크, 메시징, 파일 등 연동 처리 코드를 분리한다.

조건별 분기는 추상화

연속적인 if-else는 추상화를 고민한다.

역할을 분리할 때 주의할 점: 의도가 잘 드러나는 이름을 사용한다.

예) HTTP로 추천 데이터를 읽어오는 기능을 분리시 RecommendService -> HttpDataService

역할 분리의 장점

역할 분리가 잘 되면 테스트가 용이해진다.

Last updated