SOLID

박지예·2021년 12월 14일
0

공부

목록 보기
28/42

이번에 학교에서 프로젝트를 진행하면서 내 코드의 심각성이 뼈져리게 느껴졌다

내 코드의 문제

한마디로 엉망진창, 스파게티 코드다

  • 어쩔때 뭐가 생성 되고
  • 이때 뭐가 참조되고,
  • 코드의 실행 순서들

전부 모르겠다
심각성을 느끼고 코드 정리를 위해 기능을 분리하는 작업을 하던중 더 심각해졌다
건드릴 수 가 없다

살려줘

깃허브 링크

프로젝트 레포

결국 아는 선배한테 코드 리팩토링을 받기로 했다...

그 사이에 선배가 말해준 SOLID 디자인 패턴에 대해 알아 보기로 했다


다 맞는 말이라 눈물만 줄줄

SOLID 패턴 이란?

객체지향에서 지켜야할 원칙 5개
SRP, OCP, LSP, DIP, ISP
를 말한다

1. SRP ( Single Responsibility Principle )

단일 책임 원칙

객체는 단 한개의 책임만 가져야한다는 원칙이다
객체지향을 설계할 때는 응집도는 높게, 결합도는 낮게 해야한다

  • 응집도 : 한 프로그램의 요소가 얼마나 뭉쳐 있는지를 말한다
  • 결합도 : 프로그램 구성요소들 사이가 얼마나 의존적인지를 말한다

한 객체에 책임이 많아질 수 록 클래스 내부에서 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 높아진다
즉, 객체마다 책임을 제대로 나누지 않는다면 시스템이 매우 복잡해진다
왜냐하면 함수 하나의 변경사항이 생기면 이 기능을 사용하는 부분의 코드를 모두 다시 테스트를 해야하기 때문이다

따라서 여러 객체들이 하나의 책임만 갖도록 잘 분배한다면, 시스템에 변화가 생기더라도 그 영향을 최소화 할 수 있기 때문에 SRP 원칙을 따르는 것이 좋다

2. OCP ( Open-Closed Principle )

개방-폐쇄 원칙

기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야한다
즉, 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이여야 한다는 의미를 갖는다

이를 만족하려면 캡슐화를 통해 여러 객체에서 사용하는 같은 기능을 인터페이스에서 정의하는 방법이 있다

3. LSP ( Liskov Substitution Principle )

리스코프 치환 원칙

자식 클래스는 최소환 자신의 부모 클래스의 역할을 대체할 수 있어야 한다는 것을 말하며, 부모 클래스와 자식 클래스의 행위가 일관됨을 의미한다

즉, 자식클래스는 부모 클래스의 책임을 무시하거나 재정의 하지 않고 확장만 수행하도록 해야한다

오버라이드가 객체지향의 상징이라 많이 사용해야 좋을 줄 알았는데 가급적 피하는 것이 좋다고 한다

4. ISP ( Interface Segregation Principle )

인터페이스 분리 원칙

자신이 사용하지 않는 인터페이스는 구현하지 말아야한다는 원칙이다
하나의 거대한 인터페이스 보다 여러 개의 구체적인 인터페이스가 낫다는걸 의미한다

5. DIP ( Dependency Inversion Principle )

의존 역전 원칙

객체들이 서로 정보를 주고 받을 때 의존 관계가 형성되는데, 이 때 객체들은 추상성이 낮은 클래스 보다 추상성이 높은 클래스와 의존관계를 맺으며, 정보를 주고 받아야한다는 설계 원칙이다

profile
언젠간 바다로 갈거야!🐋

0개의 댓글