Sealed class 란 무엇일까??

유수민·2024년 1월 16일
3
post-thumbnail

어느날 갑자기 코드리뷰에 sealed class라는 것이 등장했다.🤔🤔

처음 든 생각은 이게 뭐지?? 처음 본 것인데.. 내가 이렇게 공부를 안했던 거야? 언제 사용하는 것이지?? 바꿔서 달라지는 점이 뭐지?? 하위는 final?? 이게 무엇일까? 라는 의문을 가득 들게 만들었다. 의문점 해결 겸, 공부 겸, 다시 블로그를 쓰자는 올해의 다짐을 이행할 겸 컴퓨터 앞에 앉게 되었다.

📌 Sealed class 가 무엇일까?

자바 17에 나타난 존재였다.. 수민아 공부하자 ㅎ

개념 정리를 하자면

  • sealed type : 상속할 수 있는 것을 제한하는 것이다. 특정 타입이 가질 수 있는 종류를 제한한다는 관점으로 접근하면 이해하기 쉽다. 즉 무분별한 자식 클래스 생성을 방지하기 위해 봉인한다는 의미를 가지고 있다.
    sealed type을 사용하기 위해서는 반드시
  • permit : 허용하는 하위 타입 목록 지정 (sealed 클래스를 상속하는 클래스 지정)
    를 같이 써줘야한다.

개발자는 코드가 이해가 빠르쥬? (클래스명은 이해해줘요..이름 바꿀꺼다..이름짓는게 너무 어려워!)

이렇게 써주면된다.
단, sealed 타입을 상속한 타입은

  • final : 상속 못받음
  • sealed : 상속을 다시 받을 수 있음
  • non-sealed : 봉인을 해제한다.
    중 하나를 지정해야 한다. 또한, sealed 타입과 같은 패키지/모듈에 위치해야 한다는 점을 명심해야 한다.

📌 Sealed class은 그래서 언제 쓴다고??

Sealed class의 특징을 살펴보자면,
1) 허락하지 않으면 추상화된 클래스에 접근 할 수 없다

2) 광범위하게 접근 가능하지만 광범위하게 확장 가능하지는 못한다.

라고 적혀져 있다. ㅎㅎ 너무 어렵게 표현되어있는데
사실 간단하게 정리하자면, 📍추상화가 필요한 곳 중 구현체를 제한하고 싶을 때 sealed class를 활용하면 된다.

Superclass Accessible, Not Extensible

이 말이 딱 적절한 표현인 듯 싶다.

📌 그래서 현재 내 코드에 적용하는 것이 타당한가?

타당하다고 생각한다.
현재 내가 진행하는 코드는 상위 추상 클래스를 두 클래스가 상속하도록 되어있다. 기존 코드는 이 두 클래스 이외에도 다른 클래스들도 무분별하게 해당 상위 추상클래스를 상속받을 수 있는 구조기 때문에 지정된 클래스만 상속할 수 있도록 제한할 필요성이 있었다. 그런 이유로 sealed 클래스를 적용하라고 리뷰를 달아주신 것 같다. 리뷰를 달아주신 steven님에게 감사의 마음을 표현한다. 문서에서도 sealed class를 사용하는 예시에 대해 잘 이야기하고 있다.

profile
배우는 것이 즐겁다!

2개의 댓글

comment-user-thumbnail
2024년 1월 17일

네이밍 어려워요..

1개의 답글