inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Tái cấu trúc đã học thông qua mã hóa

Tái cấu trúc 2. Đổi tên biến

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

322

maple V

15 câu hỏi đã được viết

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

Câu trả lời 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