SOLID원칙 5

SRP vs OCP, 실제 적용 사례

1. 이론과 현실 사이의 간극1-1. SRP와 OCP는 언제 충돌하는가 SOLID 원칙은 객체지향 설계에서 이상적인 구조를 안내해주는 나침반 같은 존재다. 그러나 이상은 이상일 뿐, 실무에서는 그 원칙들이 충돌하거나 현실과 괴리되는 순간들이 적지 않다. 특히 SRP(단일 책임 원칙)과 OCP(개방-폐쇄 원칙)은 애초에 지향하는 방향 자체가 다르기 때문에 실제 개발 현장에서는 둘 사이의 갈등이 빈번히 발생한다. SRP는 책임을 명확하게 나누라고 하고, OCP는 기존 코드를 수정하지 말고 확장하라고 요구한다. 그런데 책임을 나누다 보면 단일 클래스가 너무 작아지고, 그 조합을 위한 코드가 중첩되며, 새로운 기능이 들어올 때마다 확장을 고려해야 하는 OCP와 상충하게 된다. 반대로, 확장을 위해 공통된 인터..

컴퓨터공학 2025.05.22

SOLID 원칙 완전정복

1. SOLID 원칙이란?1-1. 소프트웨어 설계의 5대 원칙 소프트웨어 개발에서 “잘 설계된 코드”란 과연 어떤 것일까? 유지보수가 쉽고, 변경에 유연하며, 재사용성이 높은 코드가 바로 그 기준이다. 이러한 이상적인 구조를 현실에서 구현하기 위해 등장한 개념이 바로 SOLID 원칙이다. SOLID는 객체지향 설계의 다섯 가지 핵심 원칙을 묶은 약어로, 각각의 원칙은 객체 간의 관계, 클래스의 역할, 모듈의 구조 등 전반적인 시스템의 견고함을 높이는 데 기여한다. 이 다섯 가지는 다음과 같다.S (SRP): 단일 책임 원칙 (Single Responsibility Principle)O (OCP): 개방-폐쇄 원칙 (Open/Closed Principle)L (LSP): 리스코프 치환 원칙 (Liskov..

컴퓨터공학 2025.05.21

의존성 역전 원칙의 진짜 의미

1. 의존성 역전 원칙(DIP)이란 무엇인가?1-1. 정의와 원칙의 배경 의존성 역전 원칙(Dependency Inversion Principle, DIP)은 로버트 C. 마틴(Robert C. Martin)이 제시한 SOLID 원칙의 마지막 다섯 번째 규칙이다. DIP는 단순한 코드 스타일 가이드가 아니라, 소프트웨어 구조 전체의 설계 방향을 근본적으로 바꾸는 패러다임이다. DIP는 다음 두 가지 핵심 문장으로 요약된다고수준 모듈은 저수준 모듈에 의존해서는 안 된다. 둘 다 추상화에 의존해야 한다.추상화는 세부 구현에 의존하지 않아야 하며, 세부 구현이 추상화에 의존해야 한다. 여기서 고수준 모듈은 시스템의 비즈니스 규칙을 담은 핵심 로직이고, 저수준 모듈은 DB, 메시지 브로커, 외부 API, 프레..

컴퓨터공학 2025.05.21

Clean Architecture 원칙

1. Clean Architecture란 무엇인가?1-1. 정의와 철학 Clean Architecture는 2012년 Robert C. Martin(‘Uncle Bob’)이 공식적으로 소개한 소프트웨어 설계 아키텍처다. 핵심 개념은 시스템의 핵심 비즈니스 규칙을 외부로부터 완전히 독립시켜, 변화에 유연하면서도 테스트 가능한 구조를 만드는 데 있다. 그는 레이어드 아키텍처나 헥사고날 아키텍처 등 기존 구조의 장점들을 통합해 더 정제된 구조를 제시했으며, Clean Architecture는 클린 코드의 연장선으로서 “변화에 강한 소프트웨어”를 위한 철학으로 자리 잡았다. 이 아키텍처는 단순히 코드를 정리하는 기술이 아니라, 소프트웨어 시스템의 생존력, 확장성, 그리고 협업 구조를 어떻게 설계할 것인가에 대..

컴퓨터공학 2025.05.21

객체지향 프로그래밍(OOP) 개념과 SOLID 원칙

1. 객체지향 프로그래밍(OOP)란? 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 **객체(Object)**를 중심으로 프로그램을 구성하는 프로그래밍 패러다임이다. 객체란 데이터(속성, 상태)와 메서드(동작, 행동)를 포함하는 독립적인 모듈을 의미하며, 객체 간의 관계를 통해 프로그램이 동작한다. 📌 OOP의 핵심 개념 객체지향 프로그래밍은 다음과 같은 4가지 개념을 기반으로 한다.캡슐화(Encapsulation)객체의 데이터를 외부에서 직접 접근하지 못하도록 보호하고, 필요한 경우 메서드를 통해 접근을 제한하는 개념**정보 은닉(Information Hiding)**을 통해 유지보수성과 보안성을 높일 수 있음예제: private, protected 접근 제어자를 ..

컴퓨터공학 2025.03.17