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

엔스마트·2024년 6월 5일

단일 책임 원칙 (Single Responsibility Principle, SRP)은 객체 지향 설계의 핵심 원칙 중 하나입니다. 이 원칙은 클래스나 모듈은 단 하나의 책임만 가져야 하며, 그 책임에 대해서만 변경되어야 한다는 것을 말합니다. 각 클래스는 하나의 기능 또는 책임을 가져야 하고, 해당 책임을 완전히 캡슐화해야 합니다. 이를 통해 코드의 응집도를 높이고, 유지보수성을 향상시킬 수 있습니다.

SRP의 중요성

  • 코드의 응집도를 높입니다:
    각 클래스가 하나의 책임만 담당하면 클래스의 응집도가 높아집니다. 이는 클래스가 특정 기능에 집중되어 있어서 클래스 내부의 코드가 서로 연관되어 있고, 변경이 필요한 경우 해당 클래스만 수정하면 되므로 코드의 가독성과 유지보수성이 향상됩니다.

  • 코드의 재사용성을 높입니다:
    단일 책임 원칙을 준수하는 클래스는 특정 기능에 집중되어 있기 때문에 다른 곳에서 사용하기 쉬워집니다. 이는 코드의 재사용성을 높여 개발 생산성을 향상시킵니다.

  • 변경에 대한 영향을 줄입니다:
    클래스가 단일 책임을 가지고 있다면, 특정 기능의 변경이 다른 기능에 영향을 미치지 않습니다. 책임이 분리되어 있기 때문에 변경 사항이 해당 책임만 영향을 미치므로 시스템의 안정성이 유지됩니다.

SRP를 준수하는 방법

  • 책임을 분리합니다:
    클래스가 한 가지 이상의 책임을 가지고 있다면, 이를 분리하여 여러 클래스로 나눕니다. 각 클래스는 하나의 책임만 갖도록 설계합니다.

  • 의존성을 캡슐화합니다:
    클래스 내부의 기능은 외부에 대한 의존성을 최소화하고, 외부에 노출된 인터페이스를 통해 상호작용하도록 설계합니다.

  • 단일 책임을 명확하게 정의합니다:
    클래스의 책임을 명확하게 정의하고 문서화하여 모든 개발자가 이를 이해할 수 있도록 합니다.

예시

예를 들어, 소프트웨어에서 사용자 인증과 사용자 정보 관리는 서로 다른 책임입니다. 이를 하나의 클래스에 구현하는 대신 각각의 책임을 갖는 별도의 클래스로 분리할 수 있습니다. 이러한 분리를 통해 각 클래스는 자신의 책임에 집중할 수 있고, 변경이 필요한 경우 해당 클래스만 수정하면 되므로 유지보수성이 향상됩니다.

// 사용자 인증을 담당하는 클래스
public class AuthenticationManager {
    public boolean authenticate(String username, String password) {
        // 인증 로직 구현
        return true;
    }
}

// 사용자 정보를 관리하는 클래스
public class UserManager {
    public void createUser(String username, String password) {
        // 사용자 생성 로직 구현
    }

    public void updateUser(String username, String newPassword) {
        // 사용자 업데이트 로직 구현
    }

    public void deleteUser(String username) {
        // 사용자 삭제 로직 구현
    }
}

위의 예시에서 AuthenticationManager 클래스는 사용자 인증에만 집중하고, UserManager 클래스는 사용자 정보 관리에만 집중합니다. 이렇게 단일 책임 원칙을 준수하면 클래스 간의 결합도를 낮출 수 있고, 각 클래스를 독립적으로 변경하거나 재사용할 수 있게 됩니다.

profile
클라우드 전환, MSA 서비스, DevOps 환경 구축과 기술지원 그리고 엔터프라이즈 시스템을 구축하는 최고 실력과 경험을 가진 Architect Group 입니다.

0개의 댓글