객체 지향 프로그래밍 개념 – 객체 지향 설계 원칙 (SOLID 원칙) – 0 – SRP (Single Responsibility Principle)

객체 지향 프로그래밍 개념 - 객체 지향 설계 원칙 (SOLID 원칙) - 0 - SRP (Single Responsibility Principle)
객체 지향 프로그래밍 개념 – 객체 지향 설계 원칙 (SOLID 원칙) – 0 – SRP (Single Responsibility Principle)

객체 지향 프로그래밍 개념 – 객체 지향 설계 원칙 (SOLID 원칙) – 0 – SRP (단일 책임 원칙)

객체 지향 프로그래밍과 SRP 소개

객체 지향 프로그래밍은 객체들이 상호작용하며 프로그램을 구성하는 프로그래밍 패러다임입니다. 객체 지향 프로그래밍은 코드의 재사용성, 유지보수성, 확장성 등을 증가시킬 수 있어 많은 개발자들에게 사랑받고 있습니다. 객체 지향 설계 원칙 중 하나인 SRP(Single Responsibility Principle, 단일 책임 원칙)은 객체 지향 프로그래밍에서 중요한 개념입니다.

SRP란?

SRP는 객체가 단 하나의 책임을 가져야 한다는 원칙을 의미합니다. 객체는 하나의 기능 또는 책임에만 집중해야 하며, 이를 통해 클래스의 응집도를 높이고 결합도를 낮출 수 있습니다. SRP는 코드의 가독성, 유지보수성, 테스트 용이성을 향상시켜 줍니다.

SRP의 예시

예를 들어, “자동차”라는 클래스를 가정해봅시다. 자동차 클래스는 운전 기능, 브레이크 기능, 엔진 기능 등 여러 가지 기능을 수행할 수 있습니다. 하지만 SRP를 지키지 않는다면 자동차 클래스는 너무 많은 책임을 가지게 됩니다. 이를 개선하기 위해 SRP를 적용해보겠습니다.

// SRP를 지키지 않은 자동차 클래스
public class Car {
    public void drive() {
        // 운전 기능 구현
    }

    public void brake() {
        // 브레이크 기능 구현
    }

    public void startEngine() {
        // 엔진 기능 구현
    }
}

SRP를 적용하기 위해 자동차 클래스를 다음과 같이 분리할 수 있습니다.

// 운전 기능을 담당하는 클래스
public class Driver {
    public void drive(Car car) {
        // 운전 기능 구현
    }
}

// 브레이크 기능을 담당하는 클래스
public class Brakes {
    public void brake(Car car) {
        // 브레이크 기능 구현
    }
}

// 엔진 기능을 담당하는 클래스
public class Engine {
    public void start(Car car) {
        // 엔진 기능 구현
    }
}

위와 같이 기능을 각각의 클래스로 분리하면 자동차 클래스는 자동차의 상태와 관련된 책임만을 가지게 됩니다. 이렇게 하면 코드를 수정하거나 확장할 때 한 곳만 수정하면 되므로 유지보수가 훨씬 용이해집니다.

SRP를 지키기 위한 주의할 점

SRP를 지키기 위해 주의해야 할 점은 객체가 가지는 책임의 범위를 명확하게 정하는 것입니다. 한 객체에 너무 많은 책임을 부여하면 클래스가 커지고 복잡해지며, 한 가지 변경이 다른 기능에 영향을 미칠 수 있습니다. 따라서 책임의 분리를 신중하게 고려해야 합니다.

또한, SRP는 반드시 하나의 책임만을 가져야 한다는 것을 의미하는 것이 아닙니다. 하나의 책임은 추상적인 개념일 수 있으며, 해당 책임에 대한 변경이 한 가지 이유에서 발생하는 경우를 의미합니다. 즉, 클래스가 여러 개의 연관된 기능을 가지더라도 이들이 한 가지 이유로 변경될 가능성이 있을 때 SRP를 준수하고 있다고 할 수 있습니다.

SRP를 따르면서 유연한 설계를 위해

SRP를 따르면서도 유연하고 확장 가능한 설계를 위해 인터페이스와 추상화를 적극적으로 활용할 수 있습니다. 인터페이스를 통해 객체 간의 결합도를 낮추고, 의존성을 관리할 수 있습니다. 이를 통해 단일 책임을 가진 클래스들은 인터페이스에 의존하도록 설계하고, 새로운 기능이 추가되더라도 해당 인터페이스를 구현하여 확장성을 보장할 수 있습니다.

SRP 요약

단일 책임 원칙(SRP)은 객체 지향 프로그래밍에서 중요한 설계 원칙 중 하나입니다. 객체는 하나의 기능 또는 책임에만 집중해야 하며, 이를 통해 클래스의 응집도를 높이고 결합도를 낮출 수 있습니다. SRP를 준수하면 코드의 가독성, 유지보수성, 테스트 용이성을 향상시킬 수 있습니다. 하지만 책임의 분리를 신중하게 고려해야 하며, 인터페이스와 추상화를 활용하여 유연하고 확장 가능한 설계를 구축할 수 있습니다.

이렇게 SRP에 대해 알아보았습니다. 다음 포스팅에서는 객체 지향 설계 원칙인 OCP(Open-Closed Principle, 개방-폐쇄 원칙)에 대해 자세히 알아보겠습니다. 즐거운 프로그래밍 공부 되세요!

[주의해야할 점]

  1. SRP는 객체가 단 하나의 책임을 가져야 한다는 원칙입니다.
  2. 책임의 분리를 신중하게 고려하여 객체의 응집도를 높이고 결합도를 낮추어야 합니다.
  3. 하나의 책임은 한 가지 이유에서 변경될 가능성이 있어야 합니다.
  4. SRP를 따르면서도 유연한 설계를 위해 인터페이스와 추상화를 활용할 수 있습니다.

답글 남기기