[객체지향 프로그래밍 입문] 기능과 책임 분리

sameul__choi·2022년 1월 29일
0

기능 분해

  • 기능은 하위 기능으로 분해가 가능

이렇게 하나의 기능은 여러 하위 기능을 이용해서 구현하게 된다.

기능을 누가 제공할 것 인가 ?

  • 기능은 곧 책임
    - 분리한 각 기능을 알맞게 분배하는 것 (객체지향 설계의 기본 과정)

  • 즉 , 기능분리 후 각 객체에게 분리한 기능을 배분하는 것
    ex) 암호변경 전체 기능을 ChangePaswordServie에 할당

하위 기능 사용

public class ChangePasswordService{
	public Result changePassword(String id, String oldPw, String newPw){
    Member mem = memberRepository.findOne(id);
    if (mem == null){
    		return Result.No_Member;
    	}
    }
    try {
    	mem.changePassword(oldPw, newPw);
        return Result.SUCCESS;
    } catch(BadPasswordException ex){
    	return Result.BAD_PASSWORD;
    }
}

큰 클래스와 큰 메서드

  • 클래스나 메서드가 커지면 절차 지향의 문제 발생
    - 큰 클래스 -> 많은 필드를 많은 메서드가 공유
    - 큰 메서드 -> 많은 변수를 많은 코드가 공유
    - 여러 기능이 한 클래스/메서드에 섞여있을 가능성
  • 책임에 따라 알맞게 코드 분리 필요

몇 가지 책임 분배/분리 방법

패턴 적용

전형적인 역할분리

  • 간단한 웹
    • 컨트롤러, 서비스, DAO
  • 복잡한 도메인
    • 엔티티, 밸류, 리포지토리, 도메인 서비스
  • AOP
    • Aspect(공통 기능)
  • GoF
    • 팩토리, 빌더, 쩐략, 템플릿 메서드, 프록시/데코레이터 등

계산 기능 분리

외부 연동 분리

  • 네트워크, 메시징, 파일 등 연동 처리 코드 분리

조건별 분기는 추상화

  • 연속적인 if-else는 추상화 고민
  • 공통으로 묶어내려는 노력

주의 : 의도가 잘 드러나는 이름 사용

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

역할 분리와 테스트

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

0개의 댓글