728x90
선언적 코드와 명령형 코드
선언적 코드: 해설적이며 무슨 작업을 해야 하는지 정의한다.
명령형 코드: 어떻게 작업을 수행해야 하는지 단계별로 세분화해서 기술한다. 필요한 매개변수를 모두 계산한 다음, 메서드를 호출한다.
명령형 코드에서 작업 진행 순서
var answer = DoStuff(Method1(),
Method2(),
Method3());
- DoStuff()의 첫 번째 매개변수를 생성하기 위해 Method1()을 호출한다.
- DoStuff()의 두 번째 매개변수를 생성하기 위해 Method2()을 호출한다.
- DoStuff()의 세 번째 매개변수를 생성하기 위해 Method3()을 호출한다.
- 앞서 계산된 매개변수를 이용하여 DoStuff()를 호출한다.
3개의 메서드를 모두 호출한다.
선언적 코드 작업 진행 순서
var answer = DoStuff(() => Method1(),
() => Method2(),
() => Method3());
- Method1(), Method2(), Method3()을 호출하는 람다 표현식을 매개변수로 DoStuff()를 호출한다.
- DoStuff 내에서 Method1()의 수행 결과가 필요한 경우 Method1()을 호출한다.
- DoStuff 내에서 Method2()의 수행 결과가 필요한 경우 Method2()을 호출한다.
- DoStuff 내에서 Method3()의 수행 결과가 필요한 경우 Method3()을 호출한다.
- Method1(), Method2(), Method3()은 어떤 순서로도 수행될 수 있으며 필요한 경우 여러 번 수행되거나 혹은 전혀 수행되지 않을 수도 있다.
3개의 메서드가 호출될 수도 있고 호출되지 않을수도 있다.
결론
명령형 모델은 메서드를 호출하고 그 결과를 다른 메서드에 전달한다.
선언적 모델은 메서드를 호출할 수 있는 델리게이트를 매개변수로 전달한다는 점에서 큰 차이가 있다.
프로그램이 다르게 수행되기 때문에 메서드가 어떤 작업을 수행하느냐에 따라 서로 다른 결과를 얻게 된다.
지연 수행과 즉시 수행의 차이를 최소화하는 방법
- 순수 변경 불가 타입
값을 수정할 수 없고, 프로그램 내 다른 상태를 변경하지도 않는다.
따라서 부수효과가 전혀 없다.
반응형
'개발공부 > C#' 카테고리의 다른 글
[Effective C#] 아이템 43: 쿼리 결과의 의미를 명확히 강제하고, Single()과 First()를 사용해라 (0) | 2021.12.18 |
---|---|
[Effective C#] 아이템 42 : IEnumerable<T> 데이터 소스와 IQueryable<T> 데이터 소스를 구분하라 (0) | 2021.12.17 |
[Effective C#] 아이템 38 : 메서드보다 람다 표현식이 낫다. (0) | 2021.12.13 |
[Effective C#] 아이템 37 : 쿼리를 사용할 때는 즉시 평가보다 지연 평가가 낫다. (0) | 2021.12.12 |
[Effective C#] 아이템 36 : 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라 (0) | 2021.12.11 |