개발은 재밌어야 한다
article thumbnail
반응형

 

객체 지향 프로그래밍설계에서 5가지 기본원칙(SRP, OCP, LSP, ISP, DIP)의 앞글자를 따서 SOLID 원칙이라고 합니다. 

 

'원칙이란 무엇일까?' 원칙을 이렇게 정의합니다

 

"많은 경우에 적용되는 기본적인 규칙이나 법칙."

 

SOLID 원칙은 객체 지향 프로그래밍  설계에서 많은 경우에 적용되는 규칙이나 법칙입니다.

'그럼 SOLID를 적용하는 이유는 뭘까?'

시스템에 예상하지 못한 변경사항이 발생하더라도, 유연하게 대처하고 이후에 확장성이 있는 시스템 구조를 설계하기 위해서입니다.

 

간단하게 말해서 '유지보수성과 확장성'을 위해서이다.

 

SOILD는 객체 지향 프로그래밍에서 변경사항이 있을때 자기 클래스안에 응집도는 높이고, 다른 클래스 사이의 결합도는 낮추는 High Cohesion - Loose Coupling(높은 응집력 - 낮은 결합도) 원칙을 객체 지향의 관점에서 도입한 것이다.

 

SOLID원칙의 첫번째인 Single Responsibility Principle (단일 책임 원칙)에 대해 포스팅하려고 합니다.

 

Single Responsibility Principle (단일 책임 원칙)

객체지향 설계 관점에서는 SRP에서 말하는 책임의 기본 단위는 객체를 말한다. 즉, 객체는 단 하나의 책임만을 가질 수 있도록 해야한다는 의미이다. 또한 객체는 책임에 수반되는 모든 일을 자신만이 수행할 수 있어야 합니다.

https://medium.com/backticks-tildes/the-s-o-l-i-d-principles-in-pictures-b34ce2f1e898

한 사람이 여러가지의 역할을 수행하는 것이 아니라 이것을 책일을 단위로 쪼개서 나누어 개발 하는 원칙이 SRP가 의미하고자 하는 바입니다.

 

 

저라는 사람을 예시로 들어 설명해보자면

내가 주로 하는건 유튜브 감상이랑 운동입니다.

하지만 나는 회사에서는 개발코드를 짜고 개발문서도 작성을 하고, 자취를 하기 때문에 자취생으로써 벗어날 수 없는 청소와 빨래, 요리를 합니다.

또, 여자친구에게는 전화통화도 하고 기념일도 챙기고 데이트도 합니다. 

부모님에게는 안부전화와 선물을 보냅니다.

 

나라는 사람의 클래스는 다음과 같은 코드의 형태로 정의 될 것입니다.

지금대로라면 사람 클래스는 너무 많은 책임과 역할을 담당하게 됩니다.

 

SRP를 따르는 실효성 있는 설계가 되려면 책임을 좀 더 현실적인 개념으로 파악할 필요가 있습니다.
설계 원칙을 학습하는 이유는 예측하지 못한 변경사항이 생기더라도 유연하고 확장성이 있도록 시스템 구조를 설계하기 위해서 입니다.
그러기 위해서는 좋은 설계가 필요한데, 좋은 설계란 기본적으로 시스템에 새로운 요구사항이나 변경이 있을 때 가능한 한 영향 받는 부분을 최소화해야 합니다.
어떤 클래스가 잘 설계되어있는지를 판단하려면 언제 변경되어야 하는지를 생각해보면 알 수 있습니다.

 

 

SRP 원칙에서 사람 클래스의 역할들을 책임의 관점에서 나누어 보겠습니다.

나의 역할을 개발자, 자취생, 남자친구, 아들의 관점에서 각각의 책임에 걸맞게 클래스들을 나누어 보았습니다.

 

'나'라는 사람을 공통점으로 두고 각각의 역할에 맞게 하위 클래스로 구분하여 나누는 것입니다.

공통점이 없다면 상위 클래스는 제거하면 됩니다.

공통점을 가진 '나'의 클래스를 extends하여 각각의 책임에 따라 클래스를 분류하면 코드는 다음과 같이 분리 할 수 있습니다.

이렇게 되면 나라는 독립적인 객체는 존재는 유지하되 객체지향적인 관점에서는 각각의 역할에 따른 객체로써의 사용이 가능하게 되어 하나의 클래스에서 모든 역할들을 해야하는 부분들을 역할이라는 관점을 통해 나누게 될 수 있다.

 

반응형
profile

개발은 재밌어야 한다

@ghyeong

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!