클래스의 상속 vs 네임스페이스 vs nested 클래스
322
15 asked
현재 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가지 방법보다 더 나은 방법이 무엇일지 여쭤봐도 될까요?
좋은 강의 감사합니다 !
Answer 1
리팩토링 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

