본문 바로가기
츄Log/끄적끄적

Nested Class 종류와 Nested Static Class 사용에 대한 고찰

by 츄츄🦭 2024. 1. 4.
728x90

 

안녕하세요.

 

Java에서는 Class안에 있는 Class를 Nested Class(중첩클래스)라고 부릅니다.

그리고 이 중첩 클래스는 두 개로 나뉘어 집니다.

  1. static class
  2. inner class 

두 개로 나뉘어지는 이 클래스들은 매우 다른 의미를 가지게 됩니다.

이 중에서 static class에 대해 저의 생각을 한 번 작성해보려고 합니다.

 

먼저 두 클래스의 차이를 간략하게 알아보겠습니다. 

 

nested static class는 outer class 안에 있긴 하지만, 독립적인 존재입니다.

nested static class의 경우 그냥 클래스를 파일로 빼도 상관 없습니다.

그러므로 하나의 클래스 안에 있을 뿐이지 outer class의 프로퍼티를 nested static class에서 직접적으로 사용할 수는 없습니다. 

 

반면에 inner class는 outer class가 없으면 안 됩니다. 

outer class의 object가 먼저 존재해야 inner class의 object가 존재할 수 있습니다. 

nested static class와 다르게 outer class의 프로퍼티를 inner class에서 사용할 수 있습니다. 

 

아래 코드를 보시면, static class에서는 chupin에 접근을 하지 못하고, inner class에서는 chupin에 접근이 가능합니다. 

 

이건 조금 다른 이야기지만, 

outer class에서 nested static class의 프로퍼티에는 접근할 수 있습니다.

 

다시 돌아와서, 

제가 생각하는 nested static class에 대해 이야기 해보겠습니다.

위에서 이야기한 것처럼 nested static class는 따로 class 파일이 있는 거와 다를 바 없는 독립적인 존재입니다.

 

그럼 nested static class를 쓰는 이유가 뭘까? 싶을 수 있습니다. 저는 다음과 같은 이유로 nested static class를 사용합니다. 

 

저는 프로젝트의 가독성, 모듈성, 유지보수성을 올리고 생산한 코드의 커뮤니케이션 비용을 낮추기 위해 프로그래밍 영역에서 굉장히 많은 시도들을 합니다. 

패키지 구조를 바꾸기도 하고 클래스 네이밍에서 팀 내 규약을 만들기도 하고 특정 아키텍쳐나 설계 방법론을 들여오기도 합니다.

이렇게 노력하는 부분 중 하나로 계층 구조로 만들어진 request/response model을 정의할 때 nested static class를 사용합니다. 

 

nested static class는 outer class의 밑에 존재하여 계층구조를 표현하는 것 같고, 함께 존재하기 때문에 그루핑됨을 표현할 수 있습니다. 또한 이 nested static class를 private으로 만든다면, outer class에 종속적인 것 또한 코드로 표현할 수 있습니다. 

 

사문화된 문서는 더이상 문서로서의 역할을 하지 못할 뿐 아니라 오히려 개발자들을 헷갈리게 하곤 합니다.

코드로 문서를 대신할 수 있고, 팀 내 규약이 되어 이 코드는 문서를 대신한다는 확신이 있다면 커뮤니케이션 비용은 물론이고, 우리가 많이 겪는 코드와 문서간 이격을 없앨 수 있습니다.

 

이런 관점에서 저는 nested static class를 자주 활용합니다. 

 


혹시 다른 관점이나 의견이 있다면 언제든 댓글 달아주세요!!! 

의견 나누는 것은 언제나 환영입니다~~~

728x90