inflearn logo
강의

Course

Instructor

Learning Refactoring by Coding

Refactoring 2. Rename variables

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

322

maple V

15 asked

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가지 방법보다 더 나은 방법이 무엇일지 여쭤봐도 될까요?

좋은 강의 감사합니다 !

refactoring java intellij

Answer 1

1

whiteship

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

0

maple V

답변 감사합니다 !

리팩토링 10. 함수를 명령으로 바꾸기 강의 부분에서 질문있습니다.

0

94

1

함수 추출하기 부분에서 의도와 구현에 대해 질문 있습니다.

0

202

1

레코드에 대해 질문 있습니다.

0

219

2

.github 토큰 등록하는 방법에 대한 질문

0

220

2

깃허브

0

202

1

홈 디렉토리 .github 파일 생성

0

456

1

리팩토링 22. 여러 함수를 변환 함수로 묶기 강의 내용과 소스 코드가 다른 부분 문의

0

554

1

필드를 감추는 것이 중요한 이유?

0

568

1

오타제보. CVS -> CSV

0

375

0

객체의 필드 몇개만 전달할 경우, 통째로 넘기기 vs 여러개로 넘기기

0

510

0

[오탈자제보] 아주 작은 오타

2

401

0

basePrice

0

294

1

4:04 단축키 궁금합니다.

0

435

1

rename 메뉴에 대한 사소한 질문

0

356

1

테스트 코드 예제

0

308

1

Exception 부분

0

338

1

리팩토링 강의 [ 일부 소스 파일 누락 ]

0

331

1

stream으로 변경 시 성능 문제

0

437

2

로컬 변수에 final

0

458

1

Area 밑줄 나온부분

0

404

1

이런 경우도 따로 함수로 빼는게 좋을지 궁금합니다.

0

279

1

질문입니다

2

265

1

파라미터와 이들을 가진 클래스

0

237

1

해당 강의를 실행시 아래와 같은 에러가 발생합니다..!

0

598

2