본 내용은 "델파이 프로그래밍 언어" 도서의 일부분을 정리한 것입니다. 보다 자세한 내용은 해당 도서를 통해 확인할 수 있습니다.

 "델파이 프로그래밍 언어"(342쪽, 구입안내): http://tech.devgear.co.kr/devgearbook/2431 


 그 외 데브기어 도서들은 다음 링크를 통해서 확인할 수 있습니다: www.devgear.co.kr/book


익명 메소드의 유용성


익명 메소드는 호출 가능한 어떤 것에 대한 단순한 포인터 이상을 제공합니다. 익명 메소드 는 몇가지 장점을 제공합니다.


  • 변수 값들을 연결(bind)할 수 있습니다. 
  • 메소드를 정의하고 사용하는 편리한 방법입니다. 
  • 코드를 파라미터화하는 것이 쉽습니다.


변수의 바인드

익명 메소드는 코드 블록에 그 코드와 변수가 정의된 환경에 대한 변수 연결(binding)을 제공하며, 심지어 그 환경이 유효범위 내에 있지 않은 경우에도 마찬가지입니다. 함수나 프로 시저에 대한 포인터는 이런 역할을 할 수 없습니다.

예를 들어, 위의 코드 예제에서 adder := MakeAdder(20); 문장은 변수의 값 20로의 바 인딩을 캡슐화하는 변수 adder를 만듭니다.


몇몇 다른 언어들에서는 이런 코드 구성을 클로저(closure)라고 부릅니다. 역사적으로, adder := MakeAdder(20);와 같은 표현식을 계산하는 것은 닫힌 영역(closure)을 만들어냈다는 데 에서 착안한 것입니다. 클로저는 함수 내에서 참조되고 그 외부에서 선언되는 모든 변수들의 바인딩에 대한 참조를 가지는 객체를 나타내며, 변수들의 값을 캡쳐함으로써 닫히게 됩니다.


사용의 편리함

다음의 예제는 단순한 메소드 몇 개를 갖는 일반적인 클래스와 그 메소드들을 호출하는 것 을 보여줍니다. 

anonymous_4_1.png


위 코드를 익명 메소드를 사용하여 동일한 메소드를 정의하고 호출하는 코드와 비교해봅시다.

anonymous_4_2.png

익명 메소드를 사용하는 이번 코드가 얼마나 간단해지고 짧아졌는지 살펴보시기 바랍니다. 이 방법은 다른 곳에서는 전혀 사용되지 않을 클래스를 생성하는 오버헤드와 수고 없이 이 런 메소드들을 명확하고 간단하게 정의하려 할 때 이상적입니다. 이 코드는 더 이해하기 쉽 기도 합니다.


코드를 파라미터로 사용

익명 메소드는 값 뿐만 아니라 함수와 구조를 코드로 파라미터화하는 코드를 작성하기 쉽게 해줍니다.
멀티 스레딩은 익명 메소드를 활용하기에 좋은 애플리케이션입니다. 어떤 코드를 병렬로 실 행하려 하는 경우 다음과 같은 병렬 순환(parallel-for) 함수가 필요할 수 있습니다. 

anonymous_4_3.png 

ParallelFor 프로시저는 여러 스레드들에서 한 프로시저를 반복합니다. 이 프로시저가 스레드 혹은 스레드 풀을 이용하여 적절하고 효율적으로 구현되었다면, 간단히 멀티 프로세서 의이점을활용할수있게됩니다.

 anonymous_4_4.png 

이 코드를 익명 메소드를 사용하지 않고 구현하려면 얼마나 복잡한 코드가 될지 생각해보십 시오. 아마도 가상 추상 메소드를 가진“작업”클래스와 ExpensiveCalculation을 위한 구 체화 자손 클래스, 그리고 모든 작업들을 큐에 추가하는 작업까지... 자연스럽고 통합된 코 드는 아닐 것입니다.

여기서, 병렬 순환(parallel-for) 알고리즘은 코드로 파라미터화된 추상화 구현입니다. 과거 에는 이런 패턴을 구현하는 일반적인 방법은 하나 이상의 추상(abstract) 메소드를 갖는 가 상(virtual) 기반 클래스를 이용하는 방법이었습니다. TThread 클래스와 그 추상 Execute 메소드를 생각해보십시오. 하지만, 익명 메소드는 이런 패턴을 알고리즘과 데이터 구조를 코드로 파라미터화하여 훨씬 쉽게 해줍니다. 

   


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14516
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13146
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15667
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21184
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22438
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18066
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38348
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173855
90 [델파이 문법] 문법 요소 #12 file 관리자 2012.11.15 7411
89 [델파이 문법] 문법 요소 #11 file 관리자 2012.11.12 7566
88 [델파이 문법] 문법 요소 #10 file 관리자 2012.11.08 7436
87 [델파이 문법] 문법 요소 #9 file 관리자 2012.11.05 5923
86 [델파이 문법] 문법 요소 #8 file 관리자 2012.11.01 5234
85 RAD Studio XE3, 델파이XE3, C++빌더XE3 용 핫픽스(Hotfix)4가 나왔습니다. 관리자 2012.10.30 5703
84 [델파이 문법] 문법 요소 #7 file 관리자 2012.10.29 5783
83 [델파이 문법] 문법 요소 #6 file 관리자 2012.10.25 5335
82 델파이/C++빌더 XE3 수정된 버그 리스트가 올라왔습니다. 관리자 2012.10.23 5755
81 [델파이 문법] 문법 요소 #5 file 관리자 2012.10.22 5633
80 [델파이 문법] 문법 요소 #4 file 관리자 2012.10.19 6840
79 [델파이 문법] 문법 요소 #3 file 관리자 2012.10.16 7128
78 [웹세미나 비디오] Delphi XE3와 HTML5 Builder의 새로워진 기능 관리자 2012.10.09 5975
77 RAD Studio XE3와 SQLite 관리자 2012.10.09 6321
76 David I의 31 XE3 퀵 비디오 - FM2로 오디오 및 비디오 캡쳐 기능 만들기 관리자 2012.10.09 5413
75 David I의 31 XE3 퀵 비디오 - FM2 미디어 플레이어 컴포넌트 활용하기 관리자 2012.10.08 5945
74 David I의 31 XE3 퀵 비디오 - 윈도우8 스타일 사용하기 관리자 2012.10.08 6155
73 XE3 - Hotfix가 올라왔습니다. 관리자 2012.10.05 4760
72 RAD Studio 모바일 로드맵 공개 관리자 2012.09.21 4826
71 [델파이 문법] 문법 요소 #2 file 관리자 2012.09.20 6539