Dev Fundamentals(13)
-
💎SOLID 원칙 완전 정복 - 객체지향 설계의 뼈대를 만드는 5가지 철칙
SOLID 원칙은 유지보수성, 확장성, 유연성, 테스트 용이성을 갖춘 객체지향 설계를 위한 핵심 5대 원칙이다.이 원칙을 제대로 이해하고 실무에 적용하면, 요구사항 변경에도 끄떡없는 탄탄한 시스템을 만들 수 있다. 1. SRP - 단일 책임 원칙 (Signle Responsibility Principle) 📌 정의"하나의 클래스는 하나의 책임만 가져야 한다."정확히 말하면 클래스는 오직 하나의 변경 이유만 가져야 한다. 🎯 왜 중요한가?여러 책임을 가진 클래스는 변경 범위가 커짐하나의 책임이 바뀔 때 전혀 관련 없는 기능까지 깨질 위험있음테스트가 어려워지고 응집도가 낮아짐❌ 위반 예시public class ReportManager { void generateReport() { ... } v..
2025.05.07 -
DIP - 의존성 역전 원칙 (Dependency Inversion Principle)
1. DIP란?DIP (Dependency Inversion Principle)"상위 모듈은 하위 모듈에 의존하면 안 된다"모두가 추상화(인터페이스)에 의존해야 한다" 📌 DIP의 핵심고수준 모듈(비즈니스 로직)과 저수준 모듈(구현 세부사항)이 서로 구체적인 것에 의존하지 않고, 공통된 추상화에 의존해야 한다는 원칙이다.2. DIP가 필요한 이유❌ DIP를 지키지 않으면고수준 로직이 저수준 세부 구현에 강하게 결합구현이 바뀌면 고수준 로직도 수정해야 해서 유지보수성 급격히 저하코드 재사용과 확장이 어려움✅ DIP를 지키면고수준 모듈이 구현 변화에 영향받지 않음새로운 기능 추가/변경 시 기존 로직에 영향 최소화의존성 관리가 명확해지고 테스트가 쉬워짐❌3. DIP 위반 예시public class FileL..
2025.04.29 -
ISP - 인터페이스 분리 원칙(Interface Segregation Principle)
1. ISP란?"클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안 된다"즉, 하나의 거대한 인터페이스를 만들어서 모든 기능을 몰아넣지 않는다.클라이언트(사용자)의 관점에 맞춰 필요한 인터페이스만 제공하라는 원칙이다.2. 왜 ISP가 필요한가?❌ Fat Interface(비대한 인터페이스)의 문제클라이언트가 불필요한 메서드까지 강제로 구현하거나 알게 됨구현체가 사용하지 않는 기능에 끌려가서 변화에 민감해짐인터페이스 하나 수정 시, 모든 구현체가 영향받는 변경 전파 문제✅ ISP를 지키면필요한 기능만 알게 되어 의존성 최소화변경이 국소화되고, 코드 유지보수가 쉬워짐인터페이스 별로 역할이 명확해져서 설계가 깔끔해짐❌3. ISP 위반 예시 📌 문제 코드public interface Machine { ..
2025.04.28 -
LSP - 리스코프 치환 원칙 (Liskov Substitution Principle) : "부모를 대체해도 문제가 없어야 한다"
1. LSP란?리스코프 치환 원칙은 "서브타입은 언제나 자신의 기반 타입(부모 타입)으로 교체할 수 있어야 한다"는 원칙이다. 📌 원칙의 핵심"자식 클래스는 부모 클래스를 대체해도 동작에 문제가 없어야 한다"LSP를 만족하면 클라이언트는 부모 타입(추상 타입)만 보고도 구현체(자식 클래스)에 상관없이 동일한 방식으로 사용할 수 있어야 한다.2. LSP를 이해하는 질문이 자식 클래스는 진짜 is-a 관계인가?부모 클래스를 사용하는 코드에서 자식 클래스를 넣었을 때, 기능이 깨지지 않는가?다형성을 깨지 않고 안전하게 확장할 수 있는가?3. LSP 위반 예시 (고전적인 Rectangle vs Square)public class Rectangle { protected int width; protec..
2025.04.25 -
OCP - 개방/폐쇄 원칙 (Open/Closed Principle)
1. OCP란?OCP (Open/Closed Principle)"소프트웨어 구성 요소는 확장에는 열려(Open)있고, 변경에는 닫혀(Closed) 있어야 한다." 기능이 확장될 수 있어야 하고기존의 코드는 변경하지 않아야 한다는 객체지향 설계 원칙이다.📌 즉, 새로운 요구사항이 생겨도 기존 코드를 수정하지 않고, 기능 추가만으로 시스템을 확장할 수 있어야 한다는 뜻이다. 2. 왜 OCP가 중요한가? ✅ OCP를 지키면코드 변경 없이 새로운 기능을 추가할 수 있어 유지보수에 강함기존 코드를 건드리지 않으므로 사이드 이펙트가 줄고 테스트가 쉬움기능 추가가 많고, 요구사항이 자주 바뀌는 비즈니스 영역에서 매우 중요❌ OCP를 지키지 않으면기존 클래스에 계속 조건문이나 분기 로직이 추가됨 (if/else 지옥..
2025.04.24 -
SRP - 단일 책임 원칙 (Single Responsibility Principle)
1. 단일 책임 원칙(SRP)란?"클래스는 단 하나의 책임만 가져야 한다."여기서 말하는 '책임'이란 변경의 이유(Reason to Change)이다.즉, 클래스는 오직 하나의 변경 이유만 가져야 한다는 것이 핵심이다.2. SRP가 필요한 이유 📌 SRP가 지켜지지 않으면?하나의 클래스가 너무 많은 역할을 담당 -> 높은 결합도한 기능이 바뀌면, 관련 없는 기능도 영향을 받음유지보수가 어렵고, 테스트도 어려워짐📌 SRP가 지켜지면?클래스가 하나의 역할만 담당 -> 낮은 결합도, 높은 응집도변경이 국소화되어 예측 가능테스트 단위가 작아지고 명확함❌ 3. SRP 위반 예제public class ReportManager { public void generateReport() { // 1...
2025.04.21