Review: 소프트웨어 개발의 지혜 - 8장_단일 책임 원칙

백근영·2020년 3월 25일
0
post-thumbnail

SRP: 단일 책임 원칙

클래스는 단 한 가지의 변경 이유만을 가져야 한다.

객체 지향 설계에서 '책임'이란 '변경의 축'을 의미한다. 하나의 클래스가 여러 책임을 떠앉고 있을 경우 이 클래스는 변경에 대한 여러 가지 이유를 가지게 되며, 이는 불필요한 관리 포인트를 증가시켜 코드의 유지보수를 어렵게 만든다. 그러므로 하나의 클래스는 하나의 책임을 가져야 하고, 이 클래스를 변경하는 이유난 단 한가지여야 한다.

책임이란 무엇인가?

앞서 책임이란 변경의 축이라고 이야기했는데, 여기서 변경의 축은 변경이 실제로 일어날 때에만 그 의미를 가진다. 예를 들어 아래와 같은 modem(모뎀) 클래스는 경우에 따라 SRP를 지키고 있는 것일 수도, 위반하고 있는 것일 수도 있다.

interface Modem {
    public void dial(String pno);
    public void hangup();
    public void send(char c);
    public char recv();
}

Modem 인터페이스에 속하는 4가지 함수는 모두 모뎀의 동작에 관한 함수임이 분명하다. 하지만 경우에 따라 이 Modem 클래스는 연결 관리에 대한 책임(dial, hangup)과 데이터 통신에 대한 책임(send, recv)로 분리될 필요가 있다.

그러나 애플리케이션이 서로 다른 시간에 두 가지 책임의 변경을 유발하는 방식으로 바뀌지 않는다면 이들을 굳이 분리할 필요는 없다. 이런 경우 책임의 분리는 오히려 불필요한 복잡성의 악취를 풍기게 된다.

profile
서울대학교 컴퓨터공학부 github.com/BaekGeunYoung

0개의 댓글