개발/Java

Java sealed class 정리

hanks 2026. 2. 23. 09:02

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