1. OCP란?OCP (Open/Closed Principle)"소프트웨어 구성 요소는 확장에는 열려(Open)있고, 변경에는 닫혀(Closed) 있어야 한다." 기능이 확장될 수 있어야 하고기존의 코드는 변경하지 않아야 한다는 객체지향 설계 원칙이다.📌 즉, 새로운 요구사항이 생겨도 기존 코드를 수정하지 않고, 기능 추가만으로 시스템을 확장할 수 있어야 한다는 뜻이다. 2. 왜 OCP가 중요한가? ✅ OCP를 지키면코드 변경 없이 새로운 기능을 추가할 수 있어 유지보수에 강함기존 코드를 건드리지 않으므로 사이드 이펙트가 줄고 테스트가 쉬움기능 추가가 많고, 요구사항이 자주 바뀌는 비즈니스 영역에서 매우 중요❌ OCP를 지키지 않으면기존 클래스에 계속 조건문이나 분기 로직이 추가됨 (if/else 지옥..
1. 단일 책임 원칙(SRP)란?"클래스는 단 하나의 책임만 가져야 한다."여기서 말하는 '책임'이란 변경의 이유(Reason to Change)이다.즉, 클래스는 오직 하나의 변경 이유만 가져야 한다는 것이 핵심이다.2. SRP가 필요한 이유 📌 SRP가 지켜지지 않으면?하나의 클래스가 너무 많은 역할을 담당 -> 높은 결합도한 기능이 바뀌면, 관련 없는 기능도 영향을 받음유지보수가 어렵고, 테스트도 어려워짐📌 SRP가 지켜지면?클래스가 하나의 역할만 담당 -> 낮은 결합도, 높은 응집도변경이 국소화되어 예측 가능테스트 단위가 작아지고 명확함❌ 3. SRP 위반 예제public class ReportManager { public void generateReport() { // 1...
1. 추상화란?추상화(Abstraction)는 불필요한 구현 세부사항은 감추고, 핵심적인 개념이나 행위만을 정의하여 표현하는 객체지향 설계 원칙이다.즉, "무엇을 할 수 있는가"에 집중하고, "어떻게 구현할 것인가"는 감춘다는 철학 📌Java에서의 예시List 인터페이스만 알아도 ArrayList나 LinkedList의 구체 구현을 몰라도 사용 할 수 있음이처럼 추상화를 통해 사용과 구현을 분리하고, 유연한 설계를 할 수 있다. 📌 예시로 이해하기"TV 리모컨"은 전원을 켜고 채널을 바꿀 수 있음 (기능 = 추상화된 인터페이스)내부적으로 무슨 회로로 동작하는지는 알 필요 없음 (구현 = 캡슐화)public interface RemoteControl { void powerOn(); void ..
1. 다형성이란?다형성(Polymorphism)은 하나의 인터페이스(또는 부모 타입)를 통해 다양한 구현(자식 클래스)의 동작을 수행할 수 있는 객체지향의 핵심 원칙이다. 간단히 말하면 : "같은 메시지를 보냈을 때, 객체가 각자 다른 방식으로 응답하는 능력" 2. 왜 다형성이 중요한가? 📌 유지보수성과 확장성 향상새로운 기능 추가 시 기존 코드 수정 없이 확장 가능 (OCP 원칙 실현)고수준 모듈이 저수준 구현이 아닌 인터페잇에 의존하게 된다 (DIP 원칙 실현)다양한 객체를 하나의 타입으로 다룰 수 있음📌 의존성 분리 (Decoupling)클라이언트 코드는 인터페이스만 알고 구체 구현은 모름 -> 유연한 설계 가능📌 테스트 용이성인터페이스 덕분에 Mock 객체를 쉽게 주입하여 단위 테스트가 가능..
1. 상속이란?상속(Inheritance)은 기존 클래스의 속성과 동작(메서드)을 자식 클래스가 물려받아 사용하는 객체지향의 핵심 기능이다.즉, 부모 클래스의 기능을 확장하거나 재사용하기 위해 자식 클래스가 상속을 받는 것이다.public class Animal { public void sound() { Systme.out.println("동물이 소리를 냅니다."); }}public class Dog extends Animal { @Override public void sound() { System.out.println("멍멍!"); }} 2. 상속의 목적목적설명코드 재사용중복 제거, 공통 로직 분리계층적 관계 표현일반 -> 구체 구조 표현(is-a 관계)확장성 ..
1. 캡슐화란?"캡슐화(Encapsulation)는 객체의 내부 구현을 숨기고, 외부에서는 정해진 방법(인터페이스)으로만 접근하게 하는 원칙"이다.즉, "데이터 + 행위"를 하나의 단위로 묶고, 외부에서 그 데이터에 직접 접근하지 못하도록 막는 것이 핵심이다.2. 왜 캡슐화가 중요한가? 🎯 복잡성 감춤 (Information Hiding)내부 로직이 바뀌어도 외부 인터페이스는 그대로 -> 변경에 강한 구조사용자는 "무엇을 한다"만 알고 "어떻게"는 몰라도 됨을 의미 🎯 무결성 보장객체 상태를 외부에서 직접 조작하지 못하게 하여 비정상 상태 방지 🎯 테스트/디버깅/유지보수 용이코드가 어디에서 어떻게 바뀌는지 예측 가능3. 접근 제어자와 캡슐화: 캡슐화는 대부분 접근 제어자(Access Modifie..