<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java17 on Korobopolly's Dev Blog</title><link>https://korobopolly.github.io/tags/java17/</link><description>Recent content in Java17 on Korobopolly's Dev Blog</description><generator>Hugo</generator><language>ko</language><lastBuildDate>Mon, 16 Feb 2026 13:10:00 +0900</lastBuildDate><atom:link href="https://korobopolly.github.io/tags/java17/index.xml" rel="self" type="application/rss+xml"/><item><title>Java 17+ 최신 문법 - Record, Sealed Class, Pattern Matching, Virtual Thread</title><link>https://korobopolly.github.io/posts/java-modern-features/</link><pubDate>Mon, 16 Feb 2026 13:10:00 +0900</pubDate><guid>https://korobopolly.github.io/posts/java-modern-features/</guid><description>&lt;h2 id="개요"&gt;개요&lt;/h2&gt;
&lt;p&gt;Java는 6개월마다 새로운 버전을 출시하며 지속적으로 발전하고 있습니다. Java 17은 LTS(Long-Term Support) 버전으로, 이후 Java 21도 LTS로 지정되었습니다. 이 글에서는 Java 17 이상에서 도입된 주요 기능들을 실제 코드 예제와 함께 살펴보겠습니다.&lt;/p&gt;
&lt;h2 id="1-sealed-classes-봉인-클래스"&gt;1. Sealed Classes (봉인 클래스)&lt;/h2&gt;
&lt;p&gt;Sealed Classes는 Java 17에서 정식 기능으로 추가되었으며, 클래스 계층 구조를 명시적으로 제어할 수 있게 해줍니다. 어떤 클래스가 특정 클래스를 상속할 수 있는지를 제한함으로써 더 안전하고 예측 가능한 코드를 작성할 수 있습니다.&lt;/p&gt;
&lt;h3 id="기본-문법"&gt;기본 문법&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#cdd6f4;background-color:#1e1e2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;sealed&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;class&lt;/span&gt; &lt;span style="color:#f9e2af"&gt;Shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; permits Circle, Rectangle, Triangle {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6c7086;font-style:italic"&gt;// 공통 메서드&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;final&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;class&lt;/span&gt; &lt;span style="color:#f9e2af"&gt;Circle&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;extends&lt;/span&gt; Shape {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f38ba8"&gt;private&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;final&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; radius;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; &lt;span style="color:#89b4fa"&gt;Circle&lt;/span&gt;(&lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; radius) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;this&lt;/span&gt;.&lt;span style="color:#89b4fa"&gt;radius&lt;/span&gt; &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; radius;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; &lt;span style="color:#89b4fa"&gt;area&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;return&lt;/span&gt; Math.&lt;span style="color:#89b4fa"&gt;PI&lt;/span&gt; &lt;span style="color:#89dceb;font-weight:bold"&gt;*&lt;/span&gt; radius &lt;span style="color:#89dceb;font-weight:bold"&gt;*&lt;/span&gt; radius;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;final&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;class&lt;/span&gt; &lt;span style="color:#f9e2af"&gt;Rectangle&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;extends&lt;/span&gt; Shape {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f38ba8"&gt;private&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;final&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; width;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f38ba8"&gt;private&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;final&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; height;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; &lt;span style="color:#89b4fa"&gt;Rectangle&lt;/span&gt;(&lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; width, &lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; height) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;this&lt;/span&gt;.&lt;span style="color:#89b4fa"&gt;width&lt;/span&gt; &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; width;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;this&lt;/span&gt;.&lt;span style="color:#89b4fa"&gt;height&lt;/span&gt; &lt;span style="color:#89dceb;font-weight:bold"&gt;=&lt;/span&gt; height;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;double&lt;/span&gt; &lt;span style="color:#89b4fa"&gt;area&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cba6f7"&gt;return&lt;/span&gt; width &lt;span style="color:#89dceb;font-weight:bold"&gt;*&lt;/span&gt; height;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f38ba8"&gt;public&lt;/span&gt; non&lt;span style="color:#89dceb;font-weight:bold"&gt;-&lt;/span&gt;&lt;span style="color:#f38ba8"&gt;sealed&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;class&lt;/span&gt; &lt;span style="color:#f9e2af"&gt;Triangle&lt;/span&gt; &lt;span style="color:#f38ba8"&gt;extends&lt;/span&gt; Shape {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6c7086;font-style:italic"&gt;// 다른 클래스가 Triangle을 상속할 수 있음&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="주요-특징"&gt;주요 특징&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sealed&lt;/code&gt; 키워드로 봉인 클래스 선언&lt;/li&gt;
&lt;li&gt;&lt;code&gt;permits&lt;/code&gt; 절로 허용할 하위 클래스 명시&lt;/li&gt;
&lt;li&gt;하위 클래스는 반드시 &lt;code&gt;final&lt;/code&gt;, &lt;code&gt;sealed&lt;/code&gt;, &lt;code&gt;non-sealed&lt;/code&gt; 중 하나로 선언&lt;/li&gt;
&lt;li&gt;도메인 모델링 시 타입 안전성 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-pattern-matching-패턴-매칭"&gt;2. Pattern Matching (패턴 매칭)&lt;/h2&gt;
&lt;h3 id="instanceof-패턴-매칭"&gt;instanceof 패턴 매칭&lt;/h3&gt;
&lt;p&gt;기존의 instanceof 검사 후 캐스팅하는 번거로운 과정을 간소화합니다.&lt;/p&gt;</description></item></channel></rss>