[cs]객체지향 5원칙(SOLID)_SRP

Jeff·2024년 10월 30일
1

어제는 객체지향 프로그래밍이 무엇인지 공부했다면, 오늘은 올바르게 객체지향 프로그램 설계를 위한 규칙을 알아보려고 한다. 우리는 이 규칙을 객체지향 5원칙(SOLID)라는 5가지의 규칙의 앞글자를 따 SOLID라 부른다.

객체지향 5원칙 (SOLID)

  • 단일 책임 원칙 (Single Responsibility principle)
  • 개방 폐쇄 원칙 (Open Close Principle)
  • 리스코프 치환 원칙 (Liscov Substitution Principle)
  • 인터페이스 분리 원칙 (Interface Sergregation Principle)
  • 의존성 역전 원칙 (Dependency Inversion Principle)

오늘은 첫번째인 단일 책임 원칙에 대해 알라보려고 한다.

# 단일 책임 원칙(SRP)

Single Responsibility principle

단일 책임 원칙 : 하나의 객체는 반드시 하나의 동작만의 책임을 갖는다는 원칙
"어떤 클래스를 변경해야하는 이유는 오직 하나뿐이어야 한다"

  • 모듈화가 강해질수록 다른 객체와의 의존/연관성이 줄어든다. 반대로 이야기하면 모듈화가 약해질수록 다른 객체와의 의존/연관성을 크게 늘어나며, 최악의 경우 어떠한 은닉화도 존재하지 않아 모듈의 메소드에 무분별한 접근할 수 있게된다.
  • 객체가 담당하는 동작 즉, 책임이 많아질 수록 해당 객체의 변경에 따른 영향도의 양과 범위가 매우 커진다. 단일 책임 원칙은 특정 객체의 책임 의존성과중을 최대한 줄이고자 하는 원칙이다. 즉 하나의 동작을 수정하려고 하는데 한가지를 수정하면 다른 동작에도 영향을 주게되어 또 다른 수정이 그리고 또 다른 수정이 계속 되는 불상사를 막기 위함이다.

# 예시 코드

단일 책임이 이루어지지 않은 코드

class  Car() {
    func start() {
        print("시동 ON")
    }
    
    func stop() {
        print("시동 OFF")
    }
    
    func drive() {
        print("운전")
    }
    
    func suplyOil() {
        print("기름넣기")
    }
    
    func wash() {
        print("세차")
    } 
}

Car이라는 클래스안에 많은 함수(책임)가 가해져있는걸 볼 수 있다. 지금은 간단하게 예시를 보여주었지만, 만약에 하나의 함수의 코드를 변경하게 된다면, Car와 연관된 다른 책임들 사이에 영향을 줘 문제가 발생할 수 있게 된다.

단일 책임이 이루어진 코드

class Car {
    func start() {
        print("시동 ON")
    }
    
    func stop() {
        print("시동 OFF")
    }
}

class Driver {
    func drive() {
        print("운전")
    }
    func suplyOil() {
        print("기름넣기")
    }
}

class carWach {
    func wash() {
        print("세차")
    }
}

이처럼 책임별로 클래스를 분리한다면 SRP규칙을 따르게 된다. 이처럼 하나의 동작을 수정하게 된다면 다른 클래스의 영향을 미치지 않게 되어, 유지보수에도 유용하다.

profile
기본에 충실한 개발자가 목표!

2개의 댓글

comment-user-thumbnail
2024년 10월 30일

공부 여기서 해야겠네

1개의 답글