안녕하세요! 오늘은 객체 지향 프로그래밍에서 매우 중요한 SOLID 원칙에 대해 알아보겠습니다. SOLID 원칙은 소프트웨어의 설계 품질과 유지 보수성을 향상시키기 위한 가이드라인으로, 객체 지향 프로그래밍에서 일반적으로 사용되는 원칙들의 약어입니다. 이 원칙들은 소프트웨어 시스템의 유연성, 재사용성, 확장성을 높이는 데 도움을 줍니다. 그럼 SOLID 원칙의 각 원칙을 자세히 알아보도록 하겠습니다.
1. 단일 책임 원칙 (Single Responsibility Principle - SRP)
이 원칙은 클래스(자바스크립트는 함수)나 모듈은 단 하나의 책임을 가져야 한다는 것을 의미합니다. 어떤 클래스나 모듈이 여러 개의 책임을 갖게 되면 변경사항이 발생했을 때 다른 책임과 관련된 코드도 함께 변경되어야 하므로 코드의 복잡도가 증가하고 유지보수가 어려워집니다. 단일 책임 원칙을 따르면 한 가지 책임에 집중한 클래스나 모듈을 설계할 수 있으며, 변경이 필요한 경우 해당 책임에 집중한 부분만 수정하면 되므로 코드의 이해와 유지보수가 쉬워집니다.
2. 개방 폐쇄 원칙 (Open-Closed Principle - OCP)
개방 폐쇄 원칙은 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고 수정에는 닫혀 있어야 한다는 원칙입니다. 이는 기존의 코드를 수정하지 않고도 새로운 기능을 추가할 수 있도록 설계해야 함을 의미합니다. 이를 위해 인터페이스와 추상화를 적극적으로 활용하고, 구체적인 구현에 의존하는 것보다 추상화된 인터페이스에 의존하는 방식으로 코드를 작성해야 합니다.
설계시 수정 유형을 미리 선택할수 밖에 없습니다.
3. 리스코프 치환 원칙 (Liskov Substitution Principle - LSP)
리스코프 치환 원칙은 자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 한다는 원칙입니다. 즉, 상속 관계에 있는 클래스들은 서로 호환 가능해야 합니다. 이를 위해서는 자식 클래스가 부모 클래스의 기능을 정확히 구현하고, 자식 클래스에서 부모 클래스의 동작을 변경하지 않아야 합니다. 이렇게 하면 클라이언트 코드에서는 부모 클래스나 자식 클래스나 동일하게 사용할 수 있으며, 유연하고 확장 가능한 코드를 작성할 수 있습니다.
자바스크립트에서는 함수 오버로딩이라는 객체 지향개념으로 이를 실천합니다. 덕 타이핑 역시 파생과는 조금 다르지만, 이 원칙과 잘 들어 맞습니다.
4. 인터페이스 분리 원칙 (Interface Segregation Principle - ISP)
인터페이스 분리 원칙은 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다는 원칙입니다. 즉, 인터페이스는 클라이언트에 필요한 기능만 제공해야 합니다. 하나의 거대한 인터페이스보다는 작은 단위의 인터페이스를 사용함으로써 클라이언트가 필요하지 않은 메서드에 영향받지 않고, 불필요한 의존성을 줄일 수 있습니다.
5. 의존성 역전 원칙 (Dependency Inversion Principle - DIP)
의존성 역전 원칙은 추상화된 것은 구체적인 것에 의존해서는 안 된다는 원칙입니다. 즉, 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 양쪽 모듈 모두 추상화에 의존해야 합니다. 이를 통해 시스템의 결합도를 낮출 수 있고, 유지보수와 테스트 용이성을 높일 수 있습니다.
SOLID 원칙은 객체 지향 설계의 핵심 원칙들로, 좋은 설계와 유지 보수 가능한 소프트웨어를 만들기 위해 반드시 지켜져야 합니다. 이 원칙들을 잘 이해하고 적용함으로써 유연하고 확장 가능한 코드를 작성할 수 있을 것입니다.
'개발관련' 카테고리의 다른 글
Windows에서 개발 환경 세팅 하기 WSL 설치 및 사용법 (1) | 2023.10.30 |
---|---|
의존성 역전 원칙(Dependency Inversion Principle, DIP) (0) | 2023.07.10 |
맥북에서 디아블로4 하는 방법 feat Apple Game Porting Toolkit (0) | 2023.06.14 |
HTTP/2: 무엇이며 왜 중요한가? (0) | 2023.05.17 |
test FIRST 원칙: 테스트에 있어서의 중요한 지침 (0) | 2023.04.29 |