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

 "델파이 프로그래밍 언어"(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 15411
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13959
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16495
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22047
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23266
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18920
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39243
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174694
1323 BOGO 프로모션 툴 다운로드 받는 방법 안내(2015.6.1~2015.6.30 구매고객) 관리자 2014.06.16 8776
1322 델파이 XE2의 Namespace 문제 박병일 2012.01.19 8692
1321 [델파이 문법] 프로시저와 함수 #1 file 관리자 2012.07.23 8662
1320 [링크]안드로이드를 위한 데이터 스냅 서버 박병일 2012.01.12 8428
1319 Firemonkey MAC OSX 에서 ComboBox 다운현상 [2] c2design 2012.03.28 8339
1318 VCL 폼을 파이어몽키 폼으로 바꿀수 있는 컨버터 프로그램 file 박병일 2012.03.01 8328
1317 Platforms Expert for XE2 Beta 2 file 박병일 2012.02.06 8328
1316 [동영상강의] 델파이 기본교육_3.유니트구조와 코드작성1 관리자 2012.05.03 8288
1315 [델파이 문법] 데이터 타입, 변수 및 상수 #2 file 관리자 2013.02.04 8231
1314 [델파이 문법] 프로그램과 유닛 #2 file 관리자 2012.09.06 8220
1313 RadPHP 한글문제 관리자 2012.04.13 8196
1312 [참고] MAC OSX 어플리케이션 프로젝트 경로 문제 [1] c2design 2012.03.23 8142
1311 [델파이 문법] 클래스와 객체 #13 file 관리자 2012.06.11 8032
1310 [델파이 문법 시리즈] #1. 익명메소드 - 문법 file 관리자 2012.04.04 8005
1309 dbExpress 에는 TUpdateSQL 컴포넌트가 없어요! file 박병일 2012.03.05 7955
1308 VCL Style을 사용하면서 Edit 콘트롤의 컬러 변경하기 file 박병일 2012.02.08 7948
1307 [델파이 문법 시리즈] #8. 제네릭 - 문법 변경 사항(마지막) file 관리자 2012.04.03 7871
1306 [추가자료] 델파이에서 안드로이드 앱 개발 "환경설정과 개발의 시작" [1] 관리자 2013.10.01 7830
1305 Runtime Packages 옵션으로 프로그램(배포) 용량 줄이기 [4] file Humphery 2013.12.19 7764
1304 20120510 "C++로 윈도우용과 맥용을 동시에 개발하기" 세션 동영상 관리자 2012.06.06 7756