Java Spring

GoF 디자인 패턴 - SOLID 원칙 이해하기

pearl.k 2023. 7. 5. 15:19

SOLID 원칙이란?

 

from GeeksforGeeks

소프트웨어 설계 시 지켜야 하는 5가지 원칙이 존재한다. 각각의 원칙의 앞 글자를 따서 SOLID 원칙이라고 부른다.

개발자들은 좋은 소프트웨어를 만들기 위해 여러 가지 원칙을 고려한다. 특히, 그 중에서도 SOLID 원칙은 대부분의 개발자들이 소프트웨어 설계 시 중요하게 여기는 원칙이며, 이에 어긋나지 않게 프로그래밍 하는 법을 고민하고 실행해야 한다.

각 원칙 별로 게시글을 나눠서 업로드 할 예정이다. 또한, 원칙에 대해 공부/실습한 구체적인 내용을 추가하겠다.


S : SRP  (Single Responsibility Principle, 단일 책임 원칙)

O : OCP  (Open-Closed Principle, 개방-폐쇄 원칙)

L : LSP  (Liskov Substitution Principle, 리스코프 치환 원칙)

I : ISP  (Interface Segregation Principle, 인터페이스 분리 원칙)

D : DIP  (Dependency Inversion Principle, 의존 관계 역전 원칙)


+첨부) 왜 SOLID 원칙과 디자인 패턴을 공부하게 되었는가?

"좋은 BE 개발자, 실력있는 BE 개발자는 어떤 역량을 가지고 있을까?"

지난 23년 1분기 ~ 2분기 동안 Java Spring을 공부하면서 스스로에게 끊임 없이 물어보았다. BE 개발자의 실력은 무엇으로 평가하는지 항상 궁금했다. 실력을 이루는 구체적인 요소, 근본적인 것을 알아야 그것들을 더 준비하고 갖출 수 있기 때문이다.

이 궁금증을 해소하기 위해 장기간에 걸쳐 정보를 수집했다. youtube 에서 주니어 / 시니어 / 파트장 /  TPO, CTO 등 다양한 위치에서 일하고 있는 BE 개발자들의 인터뷰 영상을 수집했고, 테크 블로그 &구글링을 통해 영어 자료를 읽기도 했다. 또한, 각계각층에서 일하고 있는 현업 개발자 분들의 커뮤니티, 개발자 정보 공유 채팅방에 공개적으로 질문을 올리기도 했다. 

전체적인 과정에서 제일 많이 보았던/들었던 키워드는 다음과 같다.

1. 좋은 코드를 짜는 개발자

2. Trouble Shooting 경험, 문제를 해결하고 그것을 더 좋게 개선해 본 경험이 있는 개발자

3. 성장 가능성이 보이는 개발자 (성장하는 개발자)

그리고 각 항목들을 세부 사항을 포함한 마인드맵 형식으로 나타냈다. (나머지 2번, 3번은 추후에 따로 게시글을 작성하여 링크를 첨부할 예정이다.)

 

좋은 코드, 클린 코드를 짜는 개발자

여기에서는 기본기(Fundamentals)가 중요하는 의견이 많았다. 기본기에 해당하는 세부 항목들을 아래에 쭉 적어보았다. CS 기본 지식을 갖추는 것도 중요하고, 소프트웨어 개발의 여러 규약들을 이해하고 지키는 것도 중요하다. (협업으로 Product를 만드는 과정에서 중요한 규약을 잘 지키면서 코드를 짜는 능력은 매우 중요하다!) 특히, 다양한 디자인 패턴들 중에서 구현하고자 하는 Product에 맞는 것을 선택하고 그것을 구현해내는 일련의 과정을 경험하는 것, 실행할 수 있는 역량을 갖추는 것도 중요하다.

지난 1~2분기 간, SOLID 원칙과 GoF 디자인 패턴에 대해 Java Spring -김영한님 강의에서 얕게 배웠다. 그러나 얕게 배운 내용 만으로 프로젝트에 적용하기에는 턱없이 모자랐다. 각 원칙이나 디자인 패턴에 대해 충분히 고민하고 실습하지 않아서 내가 짠 프로그램이 규칙을 제대로 지키는지 파악하거나 다른 디자인 패턴을 시도하기 어려웠다.

그래서 현재 상태에서 멈추지 않고 GoF 디자인 패턴 관련 책을 찾아보고 공부하게 되었다. 앞으로 SOLID 원칙 뿐만 아니라, GoF 디자인 패턴의 종류와 내용에 대해서 공부한 후 글을 업로드 할 예정이다.