클린코드를 작성하는것은 어렵고, 주니어와 시니어 개발자를 구분하는 요인 중 하나이다. 클린코드를 작성하는데 있어 SOLID 원칙에 대하여 설명한다.
SOLID 원칙 중 가장 중요한 원칙으로 생각되는 단책 책임 원칙은 구현하고 테스트하기 쉬움과 동시에 코드를 깔끔하게 작성하는데 있어 기본적이고 매우 중요한 원칙이다.
단일 책임 원칙이란 모든 class, function 또는 module 이 오로지 하나의 책임만 가지고 동작하는 것을 말한다. 다시 말해 코드는 한가지의 이유로만 변경되야 한다는 말이다. 만약 두가지 이상의 이유로 코드를 변경해야 한다면 그 코드는 단일 책임 원칙에 위배되고 나쁜 코드일 수 있다.
확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙으로 코드의 유연성과 유지보수에 있어 중요한 원칙이다.
기능을 확장 또는 수정하는데 있어 if 문 또는 switch 문을 남발하는 대신 기능을 추가하는데 코드를 수정하는일이 없이 class 및 function 을 추가하여 확장성이 있게 만들고, 기능을 수정하는데 있어 코드의 변경은 최소화 되어야한다는 원칙이다.
하지만 실제 코드를 작성하는데 있어 이 원칙을 무조건 반영하여 코드를 복잡하게 만드는 것 보단 앞으로의 확장성과 변경 가능성을 고려하여 이 원칙을 적용하여 코드를 작성하는 것이 좋다고 생각한다.
컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙이다.
OOP 에서 중요하게 작용하는 리스코프 치환 원칙은 상위 클래스로 하위 클래스를 모르더라도 서로 치환 할 수 있으며, 치환하였을 때 오류 없이 동작하게 상속 구조를 설계하는것을 말한다.
리스코프 치환의 원칙을 지키며 상속구조를 설계하여 코드를 작성할 경우 자칫하면 구조가 매우 복잡해 질 수 있는데, 이러한 OOP 의 상속구조를 피하기 위해 Inheritance 대신 Composition 으로 좀 더 유연하고 확장성 있게 코드를 작성 할 수 있다.
https://www.thoughtworks.com/insights/blog/composition-vs-inheritance-how-choose
인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다
인터페이스가 크고 하는 일이 많다면 이를 구체적이고 작은단위로 분리하여 인터페이스를 구현하는 클라이언트는 꼭 필요한 기능만 구현하게 해아한다.
상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다
상위 모듈은 하위 모듈에 의존하면 안되고, 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 그리고 추상화는 세부사항에 의존해서는 안되고 세부사항이 추상화에 의존해야 한다. 이처럼 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 의존 역전 원칙이다.