inline 지시어의 사용

델파이 컴파일러는 성능을 높이기 위해 함수나 프로시저에 inline 표시를 하는 것을 허용합
니다. 함수나 프로시저가 어떤 기준에 맞으면 컴파일러는 루틴을 호출하는 대신 코드를 직
접 삽입합니다. 인라이닝은 성능 최적화로서, 더 빠른 코드를 만들어낼 수 있지만 공간 면에
서는 비효율적입니다. inline 루틴을 사용하면 컴파일러가 생성하는 바이너리 파일은 더 커
지게 됩니다. inline 지시어는 다른 지시어들처럼 함수나 프로시저의 선언과 정의에서 사용
됩니다.

1.png

inline 지시어는 컴파일러에게 하나의 제안일 뿐입니다. 컴파일러가 특정 루틴을 인라이닝
으로 처리할지에 대한 보장은 없습니다. 왜냐하면 인라이닝이 될 수 없는 여러 상황들이 있
기 때문입니다. 다음의 리스트는 인라이닝이 일어나거나 일어나지 못하는 조건들을 설명합
니다.


 - 모든 형태의 지연 바인딩 메소드에서는 인라이닝이 일어날 수 없습니다. 여기에는 virtual,
    dynamic, message 메소드가 포함됩니다.

 - 어셈블리 코드를 포함하는 루틴은 인라인되지 않습니다.

 - 생성자와 파괴자는 인라인되지 않습니다.

 - 메인 프로그램 블록, 유닛의 initialization 및 finalization 블록은 인라인될 수 없습니다.

 - 사용하기 전에는 정의되지 않는 루틴은 인라인되지않습니다.

 - 개방형 배열 파라미터를 가진 루틴은 인라인될 수 없습니다.

 - 패키지 내의 코드는 인라인될 수 있지만, 패키지 경계를 넘어서는 인라인되지 않습니다.

 - 순환적으로 의존하는 유닛들 사이에는 인라이닝이 되지 않습니다. 여기에는 간접 순환 의존도
   포함됩니다. 예를 들어, 유닛 A는 유닛 B를 uses 하고, 유닛 B 는 유닛 C를 uses하는데 C가
   다시 A를 uses할 경우입니다. 이 예에서 유닛 B나 C의 코드는 유닛 A에서 인라인될 수 없습
   니다.

 - 인라인될 코드가 순환 관계의 바깥에 있는 유닛에 있는 경우에는 순환 의존관계에 있는 유닛이
   라도인라인될 수 있습니다. 위의 예에서, 유닛 A가 유닛 D도 uses 한다면, 유닛 D의 코드는
   순환 의존관계에 포함되지 않으므로 A에서 인라인될 수 있습니다.

 - 루틴이 interface 섹션에서 정의되고 implementation 섹션에서 정의된 심볼을 액세스하면 그
   루틴은 인라인될 수 없습니다.

 - inline으로 표시된 루틴이 다른 유닛들로부터 외부 심볼을 사용하면 그런 모든 유닛들은 uses
   문에서 지정되어야 하며, 그렇지 않을 경우 해당 루틴은 인라인될 수 없습니다.

 - while-do 혹은 repeat-until 문의 조건 표현식에서 사용된 프로시저나 함수들은 인라인될 수
   없습니다.

 - 유닛 안에서, 인라인 함수의 바디는 함수 호출이 이루어지기 전에 정의되어야 합니다. 그렇지
   않으면 컴파일러가 호출하는 코드에 이르렀을 때 함수의 바디는 컴파일러가 아직 모르는 상태
   이므로 인라인될 수 없습니다.


인라인 루틴의 구현을 수정하면 해당 함수를 사용하는 모든 유닛들에 대해 재컴파일을 일으
키게 됩니다. 이것은 유닛 interface 섹션의 수정에 의해서만 리빌드(rebuild)가 일어난다
는 전통적인 리빌드 규칙과 다른 것입니다.

컴파일러 지지어 {$INLINE}을 사용하면 인라이닝을 더 잘 제어할 수 있습니다.
{$INLINE} 지시어는 인라인 루틴 호출 부분에서뿐만 아니라 해당 루틴의 정의 부분에서도
사용될 수 있습니다. 아래는 가능한 값들과 그 의미입니다.

2.png
번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 18402
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 16715
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 19323
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 24955
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 26208
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 21637
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 42179
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 177605
143 [UX Summit 요약] 레거시 데스크탑 앱 UI/UX 현대화 – 이론부터 실제까지 (Legacy desktop apps UI & UX modernization. From theory to practice) 관리자 2020.11.04 410
142 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 4장. 다양한 UI 콘트롤 살펴보기 관리자 2020.02.04 410
141 리눅스 앱에 '깔끔하면서도 샤프한' 스타일을 적용하고 싶다면 - Air 스타일 관리자 2019.09.09 410
140 현대화 작업, 바로 지금이 골든타임입니다! 관리자 2019.09.11 408
139 [10.4 시드니][업데이트 1] 델파이 코드 인사이트 새로운 기능 관리자 2020.09.10 407
138 이 달의 기술자료 - 2016년 10월 file 험프리 2016.09.30 407
137 리눅스 앱에 파이어몽키에서 적용했던 스타일을 똑같이 적용하세요 - Wedgewood Light 스타일 관리자 2019.09.09 406
136 [고객 사례- 델파이, 예술, 창작] 아트젠, 컴퓨터로 완성하는 미술 작품 관리자 2020.08.25 405
135 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 3장(실습).사원 정보 프로토타입 앱 관리자 2020.02.04 404
134 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 8장. 애니메이션과 효과 적용하기 관리자 2020.02.04 403
133 윈도우 버전 점유율 변화: 2009년부터 2019년 현재까지! file 관리자 2019.11.18 400
132 [베를린 U2] 퀵에디트(Quick Edit) 메뉴 사용하기 (1분 동영상) 험프리 2016.11.15 400
131 플루언트 디자인 시스템으로 애플리케이션 현대화하기 관리자 2021.04.08 399
130 [발표자료] 20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio [2] 관리자 2017.06.26 399
129 [UX Summit 요약] 윈도우10에 멋진 플루언트UI 룩앤필을 델파이로 구현하기 (Giving your Apps the Fluent UI Look and Feel with Delphi)을 요약했습니다. - (델파이 개발자 뿐만 아니라) 윈도우 애플리케이션 개발자가 알아야할 기본이되고 중요한 마이크로소프트 UI 디자인의 핵심을 정리하고 보여줍니다. 관리자 2020.10.26 398
128 RAD스튜디오 로드맵 (2020.11) 관리자 2020.11.18 397
127 DelphiParser: Conversion Component Suite - 델파이 코드를 최신으로 현대화하는 마이그레이션 도구 관리자 2020.08.28 397
126 [고객사례-유틸리티, 델파이] ExBox 관리자 2020.02.19 397
125 유투브(YouTube)와 워드프레스(WordPress)를 엔터프라이즈 커넥터로 연동해 활용하기 관리자 2019.08.21 397
124 [3분 완성] C++로 안드로이드&iOS 용 사진공유앱 완성하기 관리자 2019.08.14 397