OOP / / 2024. 3. 8. 18:06

단일 책임 원칙 (Single Responsibility Principle, SRP)

설명

  • 하나의 클래스 또는 모듈은 하나의 책임만을 가져야한다.
  • 하나의 책임이란 하나의 기능을 의미한다고 할 수 있습니다.
  • 핵심 아이디어는 하나의 클래스 또는 모듈이 변경되는 이유는 오직 하나뿐이어야 한다는 것입니다.
  • 하나의 클래스 또는 모듈이 여러 책임을 가진다는 것은 코드의 결합도가 발생했다는 의미입니다.
  • 결합도가 높아지면 하나의 변경이 다른 부분에 영향을 미칠 수 있습니다.

 

Bad Case

public class Sample {

    public void save(String name, int age) {
        if (name.isBlank() || age <= 0) {
            throw new RuntimeException("validation exception");
        }

        Member member = Member.of(name, age);

        memberRepository.save(member);
    }
}

 

Good Case

public class Sample {

    public void save(MemberSaveRequest request) {
        request.isValidate();

        Member member = MemberFactory.createMember(request);

        memberRepository.save(member);
    }
}

 

Why?

save 함수는 입력 정보를 받아 세 가지 주요 작업(유효성 검증, 객체 생성, 그리고 객체 저장)을 수행합니다. Bad Case의 시나리오에서는 이 세 가지 작업이 save 함수 내부에 모두 포함되어 있어, 단일 함수가 여러 책임을 지게 됩니다. 반면, Good Case에서는 각 작업이 분리되어 책임이 명확히 할당됩니다. 유효성 검사는 DTO 내부에서, 객체 생성은 Factory 패턴을 통해, 그리고 객체 저장은 Repository의 save 메소드를 통해 이루어집니다.

Member 객체에 새로운 정보인 Address가 필요하다고 가정해 봅시다. 이 변경 사항을 적용하려면, Bad Case에서는 save 함수 전체에 걸쳐 수정이 필요하게 됩니다. 반면, Good Case에서는 DTO에서 입력 데이터 처리를 담당하는 부분과, Member 객체 생성 로직을 담당하는 Factory 내에서만 변경을 적용하면 됩니다. 이렇게 하면, save 함수는 독립적으로 자신의 핵심 기능을 유지하며 변경으로 인한 영향을 받지 않습니다. 그 결과, Good Case는 새로운 요구사항이 추가될 때마다 함수의 수정이 필요 없게 되어 유지 보수성이 향상됩니다.

이 접근법은 새로운 요구사항이나 변경사항이 발생할 때마다 코드를 반복해서 수정하는 상황을 방지해 줍니다. 단일 책임 원칙을 준수함으로써, 각 부분의 책임을 명확히 분리하고, 코드의 유연성과 재사용성을 높일 수 있습니다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유