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..
1. Java 프로그램 실행 과정 다시 짚고 가기 .java -> 컴파일 -> .class (바이트코드 생성) JVM이 Class Loader로 로딩 메모리 영역(Runtime Data Area)에 적재 실행 엔진(Execution Engine)이 해석 & 실행실행 중 발생하는 객체/변수 등이 JVM 메모리 영역에 저장됨즉, 우리가 작성한 모든 Java 코드는 결국 JVM 메모리 공간을 점유하게 되며, 메모리 구조의 이해 = 성능과 안전성 이해의 첫걸음2. JVM의 메모리 영역 정리 (Java 8 기준) 📌 JVM Runtime Data Area 구성 영역설명생성 시점스레드 공유 여부Heap객체 인스턴스 저장, GC의 대상클래스 로딩 시 ✅ 공유Method Area (-> MetaSpace)클래스 정보..