인프런 커뮤니티 질문&답변

maple V님의 프로필 이미지
maple V

작성한 질문수

코딩으로 학습하는 리팩토링

리팩토링 2. 변수 이름 바꾸기

클래스의 상속 vs 네임스페이스 vs nested 클래스

작성

·

253

0

현재 Unity 프로젝트 진행 중입니다.

Model-View-(Reactive)Presenter로 UI를 구현했습니다.

 

그랬더니 클래스가 다음과 같이 작성되더군요.

ContentsPresenter                       : 버튼만 있는 화면

ContentsPresenter_WithDesc : 버튼과 설명이 있는 화면

ContentsPresenter_RoomList : 방목록 화면

 

ContentModel                : 버튼 정보 데이터

ContentModel_Room : 버튼과 방 정보 데이터

 

ContentView               :  UI 요소(정사각형 버튼 컴포넌트 )

ContentView_Room : UI 요소(직사각형 버튼 컴포넌트)

 

디렉토리 상에서 봤을 때 Content라는 어휘만 유독 눈에 띄는게 거슬리고 언더바를 지우고 싶었습니다.

그래서 어떻게 바꿀지 3가지 방법을 고민해봤습니다.

 

1. 네임스페이스 사용

namespace ContentPresenter
{
   public class Button {}
   public class ButtonWithDesc {}
   public class RoomList {}
}

namespace ContentView
{
   public class Button {}
   public class ButtonForRoom {}
}

namespace ContentModel
{
   public class Button {}
   public class Room {}
}

 

2. 상속 사용

public class Button : ContentsPresenter {}
public class ButtonWithDesc : ContentsPresenter {}
public class RoomList : ContentsPresenter {}

public class Button : ContentView {}
public class ButtonForRoom : ContentView {}

public class Button : ContentModel {}
public class Room : ContentModel {}

 

3. nested 클래스 사용

public class ContentPresenter
{
   public class Button {}
   public class ButtonWithDesc {}
   public class RoomList {}
}

public class ContentView
{
   public class Button {}
   public class ButtonForRoom {}
}

public class ContentModel
{
   public class Button {}
   public class Room {}
}

 

작성해보고 나니 ContentPresenter의 클래스 이름이 모호하네요. 그런데 'Button만 표시하는 화면'임을 명시하는 직관적인 표현이 떠오르질 않네요... 어떤 이름이 좋을까요... ㅠ

아무튼 3가지 방법을 생각해 봤는데요.

1. 네임스페이스 사용

- 장점: 아무 비용 없이 클래스들을 묶을 수 있다.

-단점:

클래스명(Button)이 다른 네임스페이스의 클래스명(Button)과 동일해서 디렉토리 또는 코드 상에서 구분이 힘들다.

 

2. 상속 사용.

-장점: 클래스를 공통속성과 메소드들을 함께 묶을 수 있다.

-단점:

공통 속성과 메소드들이 없어서 오버엔지니어링이 될 수 있다.

네임스페이스와 마찬가지로 디렉토리 또는 코드 상에서 구분이 힘들다.

 

3. nested 클래스 사용

-장점:

3개의 클래스 파일로 간추릴 수 있다.

코드 상에서 소속 클래스를 명시하기 때문에 구분이 가능하다.

-단점:

파일이 점점 커진다.

 

이 3가지 방법 중에 어떤게 가장 나을지, 

그리고 이 3가지 방법보다 더 나은 방법이 무엇일지 여쭤봐도 될까요?

좋은 강의 감사합니다 !

답변 1

1

백기선님의 프로필 이미지
백기선
지식공유자

저는 보통 이런 경우에 세 방법 중에서 가장 간단한 방법을 선택합니다. 그러다가 그 방법의 단점이 점점 커진다면 다른 방법을 시도해보곤 합니다.

maple V님의 프로필 이미지
maple V
질문자

답변 감사합니다 !

maple V님의 프로필 이미지
maple V

작성한 질문수

질문하기