C# 에 Expression 이란 클래스가 있는지 몰랐는데 


코드를 데이터로 담는 구조라고 한다.


일반 람다, 그러니까 Func<Int, Int> 같은 것들이 


코드를 코드로 사용하기 위해 만들어진 클래스라면 그 반대의 역할을 한다고..



저 Expression 클래스 때문에 일반 익명함수에서 var 를 대신 사용하는 타입 추론이 불가능하다고 한다.


Trade-off 라고 하는데 좋은건지 나쁜건진 잘 모르겠다. 내가 C# 을 안쓰니까..



다만 코드를 데이터와 코드 두 가지 형태로 표현할 수 있기 때문에 Lisp 의 매크로가 그러하듯이


메타 프로그래밍이 가능해지고, 실제 Expression 인스턴스에서 . 을 타이핑 해서 자동완성 되는걸 보면


코드를 조작하기 위한 다양한 함수들이 지원되는걸 볼 수 있다.