방프리
24.05.04 Chapter5. 동적 프로그래밍 (Item 43) 본문
Item 43 : 동적 타이핑의 장단점을 이해하라
dynamic 타입은 '런타임에 바인딩되는 System.Object'.라고 볼 수 있다. 따라서 컴파일타임에 dynamic 타입의 변수는 System.Object에 정의된 메서드만 가지고 있다. 런타임 시 객체의 타입을 확인하고, 수행할 메서드가 지원되는지 확인한다. 이 방식을 덕 타이핑이라고 부른다. 이 방식은 특별히 인터페이스를 선언하거나, 커파일타임 타입 연산을 제공할 필요가 없다.
동적 타이핑은 타입에 대한 대처를 유연하게 할 수 있지만 타입 안정성을 고려하지 않으며 컴파일러가 도와줄 수 있는 범위가 한정적이기에 오류를 런타임에 찾을 수 있다는 단점이 있다.
표현식 트리는 런타임에 코드를 구성하는 방법 중 하나인데 System.Linq.Expression 클래스와 그 파생 클래스를 통해 사용할 수 있다.
public static T AddExpression<T>(T left, T right)
{
ParameterExpression leftOperand = Expression.Parameter(typeof(T), "left");
ParameterExpression rightOperand = Expression.Parameter(typeof(T), "right");
BinaryExpression body = Expression.Add(leftOperand, rightOperand);
Expression<Func<T, T, T>> adder =
Expression.Lambda<Func<T, T, T>>(body, leftOperand, rightOperand);
Func<T, T, T> theDelegate = addr.Complie();
return theDelegate(left, right);
}
상황에 따라 표현식과 동적 타이핑 중 선택해야한다. 일반적으로 표현식을 사용하면 런타임 계산이 더 간단하므로 대부분의 환경에서 더 빠르게 수행되지만 동적 호출보다 역동성이 떨어진다.
동적 타이핑과 표현식 구축은 성능에 어느 정도 영향을 준다. 컴파일러가 수행해야 하는 타입 확인 과정을 수행하지 않기에 런타임에 더 많은 작업을 할 수밖에 없다. 대부분의 경우 동적 타이핑을 사용하는 편이 리플렉션이나 늦은 바인딩을 사용하는 것보다 빠르다.
효율적인 프로그래밍을 위해서
첫 번째로 람다 표현식을 사용하는 제네릭 API를 만들어두고, 호출 측에서 동적으로 수행할 코드를 정의할 수 있도록 하고
두 번째로는 표현식을 사용하는 것이다.
'C# > More Effective C#' 카테고리의 다른 글
24.05.05 Chapter6. 글로벌 C# 커뮤니티에 참여하기 (0) | 2024.05.05 |
---|---|
24.05.05 Chapter5. 동적 프로그래밍 (Item 47) (0) | 2024.05.05 |
24.04.30 Chapter5. 동적 프로그래밍 (Item 46) (0) | 2024.04.30 |
24.04.29 Chapter5. 동적 프로그래밍 (Item 45) (0) | 2024.04.29 |
24.04.28 Chapter5. 동적 프로그래밍 (Item 44) (0) | 2024.04.28 |