250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리팩토링
- 최적화
- 에러
- 오류
- 유니티 그래픽 최적화
- 속성
- 유니티 그래픽스 최적화 스타트업
- 프로퍼티
- unity
- 사용법
- 리깅
- 튜토리얼
- github
- 익명 타입
- NavMesh
- Final IK
- c#
- 유니티
- 2판
- 쉐이더
- Effective C#
- error
- 깃허브
- 쓰는 법
- shader
- 파이널 IK
- tutorial
- 애님
- 애니메이션
- 메모리
Archives
- Today
- Total
참치김밥은 최고의 한식이다
[Effective C# 2판] Item 13 : 타입의 가시성을 제한하라 본문
타입을 public으로 만드는 것이 너무 쉬운 나머지 무조건적으로 public으로 선언하는 경우가 있다. 사실 상당수의 독립 클래스는 public 보다 internal로 선언하는 것이 낫다. 또한 가시성을 제한하기 위해서 기존 클래스 안에 protected나 private으로 중첩 클래스를 만드는 것도 좋은 방법이다. 이처럼 가시성을 제한하면 코드의 일부를 변경하였을 때, 시스템 전반에 걸쳐 수정해야 하는 부분이 적어진다. 외부에서 접근하는 코드가 적기 때문에 변경해야 할 코드의 내용이 적어지는 것은 어찌 보면 당연하다.
예시 코드 ↓
//수정 전 코드
public class PhoneValidator{
public bool ValidateNumber(PhoneNumber ph){
//...
return true;
}
}
//위 코드는 다양한 국가를 고려하지 않은, "미국 전화번호만" 처리 가능한 메서드이다.
//그런데 이제 미국 전화번호 외에 국제 전화번호도 처리하도록 개발해야 한다.
//이때 기존 클래스에 기능을 추가하기보다는 미국 전화번호와 국제 전화번호를 구분하여 검증하는 편이 낫다.
//이제, 어떤 전화번호든 검증할 수 있는 인터페이스를 만들어보자.
//수정 후 코드
public interface IPhoneValidator{
bool ValidateNumber(PhoneNumber ph);
}
internal class USPhoneValidator : IPhoneValidator{
public bool ValidateNumber(PhoneNumber ph){
//...
return true;
}
}
internal class InternationalPhoneValidator : IPhoneValidator{
public bool ValidateNumber(PhoneNumber ph){
//...
return true;
}
}
public static IPhoneValidator CreateValidator(PhoneTypes type){
switch(type){
case PhoneTypes.US:
return new USPhoneValidator();
case PhoneTypes.International:
return new InternationalPhoneValidator();
case PhoneTypes.Unknown:
default:
return new InternationalPhoneValidator();
}
}
728x90
'책 > C#' 카테고리의 다른 글
[Effective C# 2판] Item 12 : 선택적 매개변수를 사용하여 메서드 오버로드를 최소화하라 (0) | 2024.02.21 |
---|---|
[Effective C# 2판] Item 11 : API에는 변환 연산자를 작성하지 말라 (0) | 2024.02.21 |
[Effective C# 2판] Item 8 : 익명 타입은 함수를 벗어나지 않게 사용하라 (1) | 2024.02.21 |
[Effective C# 2판] Item 7 : 튜플을 사용해서 타입의 사용 범위를 제한하라 (0) | 2024.02.21 |
[Effective C# 2판] Item 6 : 속성을 데이터처럼 동작하게 만들라 (0) | 2024.02.21 |