참치김밥은 최고의 한식이다

[Effective C# 2판] Item 13 : 타입의 가시성을 제한하라 본문

책/C#

[Effective C# 2판] Item 13 : 타입의 가시성을 제한하라

l__j__h 2024. 2. 21. 16:10

타입을 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