Java 17에 도입된 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 키워드 |
클래스 또는 인터페이스 선언 시 사용, 상속/구현 가능한 클래스 제한 | 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 클래스 정의먼저 sealed 키워드를 사용하여 클래스를 정의합니다. 그리고 permits 키워드를 사용하여 상속을 허용할 클래스들을 명시해줍니다.
java sealed class Animal permits Dog, Cat, Bird { String name; }
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; } }
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);
}
}
sealed 클래스를 언제 사용하는 것이 좋을까요?A: 상속을 특정 클래스만 허용하고 싶을 때, 즉 코드의 안정성과 예측 가능성을 높이고 싶을 때 사용하면 유용합니다. 특히 라이브러리나 API를 개발할 때 유용하게 사용할 수 있어요.
non-sealed 클래스는 무엇인가요?A: non-sealed 클래스는 sealed 클래스를 상속받았지만, 다시 상속 제한을 해제하는 클래스입니다. 즉, non-sealed 클래스는 누구나 상속받을 수 있습니다.
Java의 Sealed Class는 상속을 제한하여 코드의 안정성을 높이는 강력한 도구입니다. 적절히 사용하면 코드의 예측 가능성을 높이고 유지보수를 용이하게 할 수 있어요. Java 아키텍트들이 Java의 미래를 이야기할 때 Sealed Class를 언급하는 이유가 바로 이런 장점 때문이겠죠? 앞으로 Java 코딩할 때 Sealed Class를 적극적으로 활용해 보세요!
| 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 |