방프리
22.05.07 Chapter1. 데이터 타입 (Item 7) 본문
Item 7 : 튜플을 사용해서 타입의 사용 범위를 제한하라
간단한 기능을 구현할 때 또는 한 번 사용되고 추후 사용되지 않을 타입을 위해서 구조체나 클래스를 생성하는 건
너무나 비효율적이다.
이를 대체하기 위해 익명 타입과 튜플을 고려해보는 것도 좋다. 하나의 메서드의 반환 타입을 위해 또는 한 번
사용될만한 구조체를 쓸데없이 정의하는 것보다 더 가독성이 올라갈 것이다.
//아래의 변수는
var aPoint = new { X = 5, Y = 67 };
//컴파일러가 다음과 같이 선언한다.
internal sealed class AnonymousMumbleMuble
{
private readonly int x;
public int X
{
get => x;
}
private readonly int y;
public int Y
{
get => y;
}
public AnonymousMumbleMumble(int xParam, int yParam)
{
x = xParam;
y = yParam;
}
}
익명 타입을 생성하는 비용은 그리 크지 않다. 또한 똑같은 익명 타입을 요청하면 새로 생성하는 것이 아닌
이미 있는 익명타입을 재사용한다. 단 다음과 같은 조건이 있다
1. 같은 어셈블리 내에서 선언
2. 속성 이름과 타입이 일치
튜플도 익명 타입과 비슷하게 사용이 가능하다.
var aPoint = (X : 5, y : 67);
var anothorPoint = aPoint;
(int Rise, int Run) pointThree = aPoint;
//기본적으로 튜플의 네이밍은 Item1, Item2...와 같이 설정
//하지만 네이밍은 변경이 가능하다.
튜플은 구조적 타이핑을 따르므로 메서드의 반환 타입이나 매개변수의 타입으로 사용이 적합하다.
익명 타입은 변경 불가능한 타입을 정의하거나, 컬렉션의 복합키로 사용하기에 좋다.
데이터의 중간 결과를 저장해야하고 변경 불가능한 타입에 익명 타입을, 중간 결과가 독립적으로 변경 가능해야하면
튜플을 사용해보도록 하자.
'C# > More Effective C#' 카테고리의 다른 글
22.05.09 Chapter1. 데이터 타입 (Item 9) (0) | 2022.05.08 |
---|---|
22.05.08 Chapter1. 데이터 타입 (Item 8) (0) | 2022.05.07 |
22.03.13 Chapter1. 데이터 타입 (Item 6) (0) | 2022.03.14 |
22.03.01 Chapter1. 데이터 타입 (Item 5) (0) | 2022.03.01 |
22.03.01 Chapter1. 데이터 타입 (Item 4) (0) | 2022.03.01 |
Comments