Daily log

Java 17에 도입된 Sealed Class! 상속을 제한하여 코드 안정성을 높이는 핵심 기능, Sealed Class에 대해 알아보고 실제 사용법과 장점을 살펴봅니다.

왜 Sealed Class가 필요할까요?

① 상속의 문제점: 예상치 못한 확장

Java의 상속은 강력하지만, 때로는 예상치 못한 문제점을 야기할 수 있어요. 특히 라이브러리나 API를 개발할 때, 외부에서 무분별하게 클래스를 상속받아 코드가 꼬이는 상황이 발생할 수 있거든요.

java // 예시: 외부에서 멋대로 확장할 수 있는 상황 class Animal { void makeSound() { System.out.println("Generic animal sound"); } }

class Dog extends Animal { @Override void makeSound() { System.out.println("Woof!"); } }

② 코드 안정성 확보의 필요성

Sealed Class는 이러한 상속의 자유도를 제한하여 코드의 안정성을 높이는 데 목적이 있습니다. 특정 클래스만 상속을 허용함으로써, 개발자가 의도한 범위 내에서만 클래스가 확장되도록 강제할 수 있는 거죠. 요즘처럼 복잡한 시스템에서는 코드의 예측 가능성을 높이는 것이 중요하잖아요?


Sealed Class 핵심 개념 정리

항목 설명 예시
sealed 키워드 클래스 또는 인터페이스 선언 시 사용, 상속/구현 가능한 클래스 제한 sealed class Animal
permits 키워드 sealed 클래스에서 상속/구현을 허용하는 클래스 지정 sealed class Animal permits Dog, Cat
final, sealed, non-sealed 상속 가능한 클래스의 종류 final class Dog, sealed class Cat, non-sealed class Bird

Sealed Class 사용법: 단계별 예제

① 1단계: sealed 클래스 정의

먼저 sealed 키워드를 사용하여 클래스를 정의합니다. 그리고 permits 키워드를 사용하여 상속을 허용할 클래스들을 명시해줍니다.

java sealed class Animal permits Dog, Cat, Bird { String name; }

② 2단계: 허용된 클래스 정의

permits에 명시된 클래스들은 final, sealed, 또는 non-sealed로 선언되어야 합니다.

java final class Dog extends Animal { Dog(String name) { this.name = name; } }

sealed class Cat extends Animal permits Persian, Siamese { Cat(String name) { this.name = name; } }

final class Persian extends Cat { Persian(String name) { super(name); } }

final class Siamese extends Cat { Siamese(String name) { super(name); } }

non-sealed class Bird extends Animal { Bird(String name) { this.name = name; } }

③ 3단계: 사용 예시

sealed 클래스를 사용하는 코드는 다음과 같습니다.

java public class Main { public static void main(String[] args) { Animal dog = new Dog("멍멍이"); Animal cat = new Persian("야옹이"); Animal bird = new Bird("짹짹이");

    System.out.println(dog.name);
    System.out.println(cat.name);
    System.out.println(bird.name);
}

}


자주 묻는 질문

Q: sealed 클래스를 언제 사용하는 것이 좋을까요?

A: 상속을 특정 클래스만 허용하고 싶을 때, 즉 코드의 안정성과 예측 가능성을 높이고 싶을 때 사용하면 유용합니다. 특히 라이브러리나 API를 개발할 때 유용하게 사용할 수 있어요.

Q: non-sealed 클래스는 무엇인가요?

A: non-sealed 클래스는 sealed 클래스를 상속받았지만, 다시 상속 제한을 해제하는 클래스입니다. 즉, non-sealed 클래스는 누구나 상속받을 수 있습니다.


마무리

Java의 Sealed Class는 상속을 제한하여 코드의 안정성을 높이는 강력한 도구입니다. 적절히 사용하면 코드의 예측 가능성을 높이고 유지보수를 용이하게 할 수 있어요. Java 아키텍트들이 Java의 미래를 이야기할 때 Sealed Class를 언급하는 이유가 바로 이런 장점 때문이겠죠? 앞으로 Java 코딩할 때 Sealed Class를 적극적으로 활용해 보세요!

출처: Java는 어디로 가고 있는가: Java 아키텍트가 말하는 Java의 미래 - 요즘IT

'개발 > Java' 카테고리의 다른 글

JVM 메모리 구조와 가비지 컬렉션  (0) 2026.02.23
Java 예외 처리 베스트 프랙티스  (0) 2026.02.23
Java record 클래스 사용법  (0) 2026.02.22
Java 컬렉션 프레임워크 비교  (0) 2026.02.22
Java 멀티스레드 동기화  (0) 2026.02.22

공유하기

facebook twitter kakaoTalk kakaostory naver band