콘텐츠로 이동

Java 학습 경로 T2 — 객체지향 설계로 응용

이 트랙의 목표: T1에서 익힌 객체지향을 설계 수준으로 끌어올린다. 디자인 패턴 8종을 "외우는" 게 아니라 바뀌는 것과 안 바뀌는 것을 분리하는 도구로 쓰고, JVM이 그 코드를 어떻게 돌리는지까지 이해한다.

선수 트랙: guide-java-track1-basics. 다음 트랙: guide-java-track3-io-network.

이 트랙은 src-java-study-2024-2025 4·9장 재구성. 실제 학습·실습은 챕터 레슨에서 따라 한다java-study-ch04 · java-study-ch10.

이 페이지는 코스 안내다(흐름·핵심·미니프로젝트·이론 팁). 코드와 상세 설명은 위 챕터 레슨을 펴고 따라 하면 된다.


📚 학습 순서

1단계 — 디자인 패턴 8종 (ch04)

순서 문서 한 줄
4.0 전략 패턴 바뀌는 행위를 객체로 분리, 인터페이스에 의존
4.1 템플릿 메서드 골격은 고정, 변하는 단계만 하위에서
4.2 팩토리 메서드 객체 생성을 서브클래스에 위임
4.3 싱글톤 인스턴스 1개 보장 (스프링 빈의 기본 스코프)
4.4 옵저버 상태 변화를 구독자에게 통지
4.5 / 4.6 / 4.7 프록시·어댑터·파사드 감싸기로 접근 제어·호환·단순화
4.9 전략 패턴 실전문제 🛠 아래 미니프로젝트

2단계 — JVM과 성능 (ch09)

순서 문서 한 줄
10.0 JVM 개념과 구성 원리 클래스 로딩 → 실행 엔진 → GC (→ entity-jvm)
10.1 메모리 관리 힙·스택·메서드 영역, 객체가 사는 곳
10.2 튜닝과 실전 활용 GC 로그 읽기, 힙 사이즈 판단

🧩 핵심 개념 한눈에

개념 한 줄 정의 자주 하는 실수
전략 패턴 알고리즘 군을 캡슐화해 교체 가능하게 if-else로 분기해 패턴 회피
템플릿 메서드 불변 골격 + 가변 훅 골격까지 하위에서 덮어씀
싱글톤 유일 인스턴스 직접 new 싱글톤 (스프링은 빈으로)
합성 vs 상속 "has-a"를 "is-a"보다 우선 코드 재사용 목적의 상속 남용
GC 도달 불가 객체 자동 회수 "GC가 다 해주니 메모리 신경 끔"

💡 이론·방법론 연결 (팁)

💡 설계 — 패턴은 목적이 아니라 결과 패턴을 먼저 정하고 끼워 맞추면 과설계가 된다. "무엇이 바뀌는가"를 먼저 찾으면 패턴은 따라온다. → 자세히: concept-design-patterns · lecture-object-ch9 (유연한 설계)

💡 설계 — 상속보다 합성 패턴 대부분이 "상속 대신 객체를 조합"으로 귀결된다. 13장의 서브타이핑/합성 판단 기준을 같이 보라. → 자세히: lecture-object-ch13 · concept-oop

💡 실무 — 싱글톤은 스프링 빈으로 4.3 싱글톤을 직접 구현하지 말고 스프링 컨테이너에 맡긴다. T4에서 이어진다. → 자세히: concept-spring-core (IoC/DI)

💡 성능 — "왜 느린가"는 JVM에서 답이 나온다 9장 GC·메모리를 알면 "객체를 너무 많이 만든다" 같은 원인을 데이터로 짚는다. → 자세히: entity-jvm · concept-db-connection-pool (풀로 객체 재사용)


🛠 미니프로젝트 — 전략 패턴으로 리팩터링

  1. 전략 패턴 실전문제 (4.9)if-else 덩어리를 전략 객체로 분리. 새 전략 추가가 기존 코드 수정 없이 되는지 확인(OCP).
  2. 메모 앱 토이프로젝트 (11.26-1) — 콘솔 CRUD를 먼저 완성하고, 저장 방식을 전략으로 갈아끼울 수 있게 확장.

따라하는 법:

1) 바뀌는 부분(알고리즘/정책)을 한 인터페이스로 추출
2) 구현체별 클래스 + 실패 테스트(TDD 빨강)
3) 컨텍스트가 인터페이스에만 의존하도록 (초록)
4) 분기문 제거·이름 정리 (리팩터)
5) 새 전략 1개를 "기존 코드 0줄 수정"으로 추가해 OCP 검증
실습 본문·풀이 → java-study-ch04(4.9) · java-study-ch11(11.26-1).


✅ 트랙 정리 체크리스트

  • 패턴 8종을 "무엇이 바뀌나" 기준으로 설명할 수 있다
  • if-else를 전략 패턴으로 바꿔봤다
  • 상속과 합성을 상황에 맞게 고를 수 있다
  • 힙·스택·메서드 영역에 무엇이 사는지 안다
  • GC 로그에서 "객체를 너무 많이 만드는" 신호를 읽을 수 있다
  • 🛠 전략 패턴 미니프로젝트로 OCP를 코드로 확인했다

→ 다 체크되면 guide-java-track3-io-network(입출력·네트워크)로.


관련 페이지