방프리
23.01.25 Chapter2. API 설계 (Item 12) 본문
Item 12 : API에는 변환 연산자를 작성하지 말라
함수를 만들다보면 같은 동작을 하는 함수임에도 매개변수가 무한히 늘어나게 되는 함수를 볼 수 있다.
이를 위해 C에서는 ..., C#에서는 params를 통해서 해결하지만 이 챕터에서는 다른 방향을 제시한다.
/////////////////////////////////////////////////변경하기 전 매개변수가 쓸데없이 늘어나는 코드
var wasted = Type.Missing;
var wordApp = new Microsoft.Office.Interop.Word.Application();
wordApp.Visible = true;
Documents docs = wordApp.Documents;
Document doc = docs.Add(ref wasted, ref wasted, ref wasted, ref wasted);
Range range = doc.Range(0, 0);
range.InsertAfter("Testing, testing, testing...");
/////////////////////////////////////////////////변경하기 후 매개변수에 기본값을 주어 최적화된 코드
var wordApp = new Microsoft.Office.Interop.Word.Application();
wordApp.Visible = true;
Documents docs = wordApp.Documents;
Document doc = docs.Add(); //매개변수의 기본값으로 Type.Missing을 넣어주었다.
Range range = doc.Range(0, 0);
range.InsertAfter("Testing, testing, testing...");
////생략되었지만 구현되어 있다면 다음과 같을 것
public Document Add(Type type1 = Type.Missing, Type type2 = Type.Missing...)
{
//Do work
}
하지만 매개변수가 늘어날수록 사용하는 사람은 어떤 변수가 어떻게 할당되었는지 헷갈릴 수 있다.
이 때 우리는 매개변수를 명시적으로 알려주어 해당 변수가 어떤 매개변수 역할을 하는지 지정할 수 있다.
private void SetName(string lastName, string firstName)
{
//생략
}
SetName(lastName: "Wagner", firstName: "Bill"); //순서대로 매개변수 지정
SetName(firstName: "Bill", lastName: "Wagner"); //명시적으로 한다면 순서를 바꿀 수도 있다.
하지만 주의해야할 점이 있다. 추후 업데이트 때 해당 변수명이 수정된다면? 해당 라이브러리를 사용하는 개발자들은
변수명을 모두 바꿔주어야한다. (명확성을 위해 사용했는데 오히려 보수작업이 더 늘어나게 됨)
그러므로 매개변수명 또한 public 인터페이스 취급을 해야한다.
'C# > More Effective C#' 카테고리의 다른 글
23.01.30 Chapter2. API 설계 (Item 14) (0) | 2023.02.05 |
---|---|
23.01.30 Chapter2. API 설계 (Item 13) (0) | 2023.01.30 |
23.01.24 Chapter2. API 설계 (Item 11) (0) | 2023.01.24 |
23.01.23 Chapter1. 데이터 타입 (Item 10) (0) | 2023.01.23 |
22.05.09 Chapter1. 데이터 타입 (Item 9) (0) | 2022.05.08 |
Comments