이번에 학교에서 프로젝트를 진행하면서 내 코드의 심각성이 뼈져리게 느껴졌다
한마디로 엉망진창, 스파게티 코드다
전부 모르겠다
심각성을 느끼고 코드 정리를 위해 기능을 분리하는 작업을 하던중 더 심각해졌다
건드릴 수 가 없다
살려줘
결국 아는 선배한테 코드 리팩토링을 받기로 했다...
그 사이에 선배가 말해준 SOLID 디자인 패턴에 대해 알아 보기로 했다
다 맞는 말이라 눈물만 줄줄
객체지향에서 지켜야할 원칙 5개
SRP, OCP, LSP, DIP, ISP
를 말한다
단일 책임 원칙
객체는 단 한개의 책임만 가져야한다는 원칙이다
객체지향을 설계할 때는 응집도
는 높게, 결합도
는 낮게 해야한다
한 객체에 책임이 많아질 수 록 클래스 내부에서 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 높아진다
즉, 객체마다 책임을 제대로 나누지 않는다면 시스템이 매우 복잡해진다
왜냐하면 함수 하나의 변경사항이 생기면 이 기능을 사용하는 부분의 코드를 모두 다시 테스트를 해야하기 때문이다
따라서 여러 객체들이 하나의 책임만 갖도록 잘 분배한다면, 시스템에 변화가 생기더라도 그 영향을 최소화 할 수 있기 때문에 SRP 원칙을 따르는 것이 좋다
개방-폐쇄 원칙
기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야한다
즉, 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이여야 한다는 의미를 갖는다
이를 만족하려면 캡슐화를 통해 여러 객체에서 사용하는 같은 기능을 인터페이스에서 정의하는 방법이 있다
리스코프 치환 원칙
자식 클래스는 최소환 자신의 부모 클래스의 역할을 대체할 수 있어야 한다는 것을 말하며, 부모 클래스와 자식 클래스의 행위가 일관됨을 의미한다
즉, 자식클래스는 부모 클래스의 책임을 무시하거나 재정의 하지 않고 확장만 수행하도록 해야한다
오버라이드가 객체지향의 상징이라 많이 사용해야 좋을 줄 알았는데 가급적 피하는 것이 좋다고 한다
인터페이스 분리 원칙
자신이 사용하지 않는 인터페이스는 구현하지 말아야한다는 원칙이다
하나의 거대한 인터페이스 보다 여러 개의 구체적인 인터페이스가 낫다는걸 의미한다
의존 역전 원칙
객체들이 서로 정보를 주고 받을 때 의존 관계가 형성되는데, 이 때 객체들은 추상성이 낮은 클래스 보다 추상성이 높은 클래스와 의존관계를 맺으며, 정보를 주고 받아야한다는 설계 원칙이다