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

 "델파이 프로그래밍 언어"(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 15441
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39257
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
583 (작성 중) 파이어몽키 모바일 개발에 대한 FAQ [1] 험프리 2015.12.01 495
582 이 달의 기술자료 - 2015년 12월 file 험프리 2015.11.27 531
581 [업데이트][10 시애틀] RAD Studio 10 시애틀 서브스크립션 업데이트 1 [3] file 험프리 2015.11.25 1572
580 [발표자료] 20151124 온라인세미나: 델파이 코드 마이그레이션 Step by Step 관리자 2015.11.25 580
579 BPL(패키지)를 이용해 프로그램 모듈화 하기 험프리 2015.11.24 1126
578 [발표자료] 20151119 델파이 소스코드의 재발견 관리자 2015.11.20 619
577 [마이그레이션][팁] 유니코드 검토 대상 분석 도구 다운로드 [1] file 험프리 2015.11.16 1845
576 [마이그레이션][팁] 설치된 컴포넌트 확인 팁 file 험프리 2015.11.12 788
575 [마이그레이션][팁] 배치파일(커맨드 명령어)을 이용해 손쉽게 소스파일 갯수를 파악할 수 있습니다. file 험프리 2015.11.12 2638
574 [안드로이드] 배포파일, 아이콘, 스플래쉬 등이 잘 배포되었는지 확인하기 file 험프리 2015.11.11 1524
573 이 달의 기술자료 - 2015년 11월 file 험프리 2015.10.30 745
572 [발표자료] 20151019 David I 초청 워크샵: 윈도우 애플리케이션 개발자를 위한 DeepDive! 관리자 2015.10.20 589
571 [시애틀] 블루투스 LE를 지원하는 디바이스에서 비콘 광고데이터를 발생할 수 있습니다. file Humphery 2015.10.06 689
570 [시애틀] 모든 종류의 안드로이드 인텐트(Intent)를 처리할 수 있습니다. Humphery 2015.10.06 848
569 [시애틀] BSON(Binary JSON)을 처리하고, JSON 데이터를 스트리밍 모델로 읽고, 쓸수 있습니다. file Humphery 2015.10.05 1718
568 [시애틀] IDE 메모리 개선으로 더 큰 프로젝트를 더 빠르게 코딩하고, 더 빠르게 컴파일 할 수 있습니다. 험프리 2015.10.05 442
567 [시애틀] 작업 중 비정상 종료 시 저장하지 않은 작업을 복구할 수 있습니다. file Humphery 2015.10.05 1016
566 [시애틀][VCL] 고해상도 모니터(4K 모니터와)와 멀티 모니터(모니터 당 DPI)를 지원합니다. [1] Humphery 2015.10.05 1303
565 [따라하기] 건강데이터 수집 및 기록 시스템 #1 - BLE 기반 스마트 체중계에서 실시간 데이터 받기 [1] Humphery 2015.10.02 5794
564 [다시보기] RAD Studio 10 시애틀 딥다이브 세션 다시보기(영문) Humphery 2015.10.02 552