<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Legacy-Code on philipjkim</title><link>https://philipjkim.cc/tags/legacy-code/</link><description>Recent content in Legacy-Code on philipjkim</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 04 Mar 2026 10:03:52 +0900</lastBuildDate><atom:link href="https://philipjkim.cc/tags/legacy-code/index.xml" rel="self" type="application/rss+xml"/><item><title>WELC ver. 2026 Part 5: 의존성 깨기 기법 카탈로그</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-05/</link><pubDate>Wed, 04 Mar 2026 10:03:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;원서 Chapter 25는 25가지 의존성 깨기(Dependency-Breaking) 기법을 카탈로그 형태로 제시합니다. 각 기법은 &amp;ldquo;테스트 하네스에 코드를 넣기 위해 의존성을 어떻게 끊을 것인가&amp;quot;라는 질문에 대한 구체적인 답입니다.&lt;/p&gt;
&lt;p&gt;다만 일부 기법은 C/C++ 전용이거나, 현대 Java에서는 불필요합니다. Link Substitution, Text Redefinition, Replace Function with Function Pointer 같은 기법이 대표적입니다. 이 파트에서는 2026년 현재 Java 개발에서 특히 유용한 핵심 기법들을 선별하여 정리합니다.&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 4: 대규모 코드 문제 다루기</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-04/</link><pubDate>Wed, 04 Mar 2026 10:03:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;레거시 시스템에서 가장 자주 마주치는 문제는 규모의 문제입니다. 한 클래스가 수천 줄, 한 메서드가 수백 줄인 코드는 현업에서 흔히 발견됩니다. 이런 코드는 읽기 어렵고, 테스트하기 어렵고, 변경하면 예상치 못한 곳에서 장애가 발생합니다.&lt;/p&gt;
&lt;p&gt;이번 글에서는 Michael Feathers의 &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; 14~22장을 바탕으로, 대규모 코드 문제를 다루는 전략을 JDK 25 기준의 modern Java 코드로 살펴봅니다. SOLID 원칙 중 SRP, ISP, OCP의 실전 적용이 핵심입니다.&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 3: 테스트 하네스에 코드 넣기</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-03/</link><pubDate>Wed, 04 Mar 2026 10:03:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;레거시 코드를 변경하려면 먼저 테스트를 작성해야 합니다. 하지만 테스트를 작성하려면 코드의 의존성을 깨야 합니다. 의존성을 깨려면 코드를 변경해야 하는데, 변경의 안전성을 보장해줄 테스트가 아직 없습니다.&lt;/p&gt;
&lt;p&gt;이것이 Feathers가 말하는 &amp;ldquo;레거시 코드의 딜레마&amp;quot;입니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In legacy code, the weights work against us. We have to pull out a piece to work with because we can&amp;rsquo;t easily test it in place.
— Michael Feathers, &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; (2004)&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 2: 안전한 코드 변경 패턴 — Sprout와 Wrap</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-02/</link><pubDate>Wed, 04 Mar 2026 10:03:49 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;Part 1에서 다룬 Legacy Code Change Algorithm의 5단계 중, 이번 글은 &amp;ldquo;변경 및 리팩터링&amp;rdquo; 단계에 해당하는 실전 패턴들을 다룹니다. Michael Feathers의 &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; 6~8장에 등장하는 핵심 기법입니다.&lt;/p&gt;
&lt;p&gt;레거시 코드에 기능을 추가해야 하는데 시간이 없을 때, 기존 코드를 전면 리팩터링하는 것은 현실적이지 않습니다. 이때 사용할 수 있는 4가지 패턴이 있습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;패턴&lt;/th&gt;
 &lt;th&gt;핵심 아이디어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Sprout Method&lt;/td&gt;
 &lt;td&gt;새 기능을 별도 메서드로 추출&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Sprout Class&lt;/td&gt;
 &lt;td&gt;새 기능을 별도 클래스로 분리&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wrap Method&lt;/td&gt;
 &lt;td&gt;기존 메서드를 감싸서 전후 동작 추가&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wrap Class&lt;/td&gt;
 &lt;td&gt;Decorator 패턴으로 기존 클래스를 감싸기&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;이 4가지 패턴의 공통점은 &lt;strong&gt;기존 코드를 가능한 한 건드리지 않으면서 새 기능을 추가&lt;/strong&gt;한다는 것입니다.&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 1: 레거시 코드의 정의와 변경의 역학</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-01/</link><pubDate>Wed, 04 Mar 2026 10:03:48 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="시리즈-소개"&gt;시리즈 소개&lt;/h2&gt;
&lt;p&gt;2004년 Michael Feathers가 출판한 &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; (a.k.a. WELC)는 레거시 코드를 안전하게 변경하는 기법들을 체계적으로 정리한 명저입니다. 출판된 지 20년이 넘었지만, 이 책이 제시하는 원칙과 알고리즘은 여전히 유효합니다. 코드베이스가 노후화되는 속도보다 개발자가 이 책을 읽는 속도가 느린 것이 문제일 뿐입니다.&lt;/p&gt;
&lt;p&gt;원서의 예제는 Java 1.4/5, C++, C 시대의 코드입니다. 이 시리즈에서는 JDK 25 (2025년 9월 GA, LTS) 기준의 modern Java로 핵심 기법들을 재현합니다. Sealed class, record, text block, pattern matching 등 최신 언어 기능을 적극 활용하여, 원서의 기법이 오늘날 어떤 형태로 적용되는지 보여드리겠습니다.&lt;/p&gt;</description></item></channel></rss>