방프리
23.11.12 Chapter2. API 설계 (Item 22) 본문
Item 22 : 명확하고 간결하며 완결된 메서드 그룹을 생성하라
API를 구성할 때 유의해야할 점이 사용하는 사람이 보았을 때 혼동이 있어서는 안된다.
명확하고 사용자가 API를 사용함으로써 실수를 줄일 수 있는 몇 가지 방법이 있다.
1. 적은 양의 오버로드 함수
- 오버로드된 함수를 만드는 것은 좋으나, 그 개수가 많아진다면 사용자 측면에서 혼동이 일어날 수 있다.
나중에는 각 함수 별 각주를 달거나 사용자가 해당 API를 사용할 때마다 기능을 확인해야 하는 경우가 발생할 수 있으니
무분별한 오버로드 함수는 좋지 않다.
2. 동일 명에 동일 동작이 원칙
- 같은 메서드 명이라면 그 안에서 동작하는 행위는 무조건 같아야 한다. 다를 경우 사용자 측면에서 구분하기 어렵고
사용 시 예측 불가능한 동작이 이뤄질 경우 원인을 분석하기 어렵기 때문이다.
3. 가능한 모든 타입에 대한 메서드 오버로드 제공
- 인자로 받는 타입이 여러 개일 때 각 타입 별로 정의해주는 것이 좋다. 물론 형변환하여 사용을 해도 상관없지만
구분 측면에서는 타입 별로 따로 제작하는 것이 좋다. 특히 인자가 여러 개가 될 경우 복잡해지기 때문이다.
컴파일러는 생각보다 넓은 범위에서 최적의 후보 메서드를 검색한다. 그렇기 때문에 API 개발자가 꼼꼼하게
지정하지 않는다면 사용자는 하나의 기능을 사용할 때에도 굉장히 넓은 검색을 하게 된다.
public class Point
{
public double X { get; set; }
public double Y { get; set; }
//생략
public void Scale (int scale)
{
X *= scale;
Y *= scale;
}
}
public class Point3D : Point
{
public double Z { get; set; }
// override나 new가 아님. 매개변수 타입이 다름
public void Scale (double scale)
{
X *= scale;
Y *= scale;
Z *= scale;
}
}
Point3D p2 = new Point3D { X = 1, Y = 2, Z = 3 };
p2.Scale(3);
위의 코드처럼 작성되면 안된다. Point의 Scale과 Point3D의 Scale은 서로 다를 뿐더러 이럴 경우에는 부모 클래스에서
Scale 메서드가 가상 메서드로 만들어졌어야 했다.
'C# > More Effective C#' 카테고리의 다른 글
23.12.17 Chapter2. API 설계 (Item 24) (1) | 2023.12.17 |
---|---|
23.12.12 Chapter2. API 설계 (Item 23) (0) | 2023.12.12 |
23.08.20 Chapter2. API 설계 (Item 21) (0) | 2023.08.20 |
23.07.25 Chapter2. API 설계 (Item 20) (0) | 2023.07.25 |
23.06.20 Chapter2. API 설계 (Item 19) (0) | 2023.07.15 |