유닛의 구조와 문법

유닛은 타입(클래스 포함), 상수, 변수 및 루틴(함수와 프로시저)으로 구성됩니다. 각 유닛
은 자체 유닛(.pas) 파일에서 정의합니다.

유닛 파일은 unit 헤더로 시작되고, 뒤이어 interface 예약어가 나옵니다. interface 예약어
에 이어 uses 절에서 유닛 의존성을 기술합니다. 다음으로 implementation 섹션이 오고,
선택적으로 initialization 및 finalization 섹션이 올 수 있습니다. 유닛 파일 구조는 다음과
같습니다.

1.png

유닛은 반드시 end와 마침표(.)로 끝나야 합니다.


unit 헤더
unit 헤더는 유닛의 이름을 지정합니다. 유닛 헤더는 예약어 unit, 유효한 식별자, 세미콜론 순
으로 구성됩니다. 코드기어 툴을 사용하여 개발된 애플리케이션의 경우 식별자는 반드시 유닛
파일 이름과 일치해야 합니다. 따라서 MainForm.pas이라는 이름의 소스 파일의 유닛 헤더는,

2.png

와 같을 것이며, 컴파일된 유닛 파일의 이름은 MainForm.dcu가 됩니다.
유닛 이름은 반드시 프로젝트 내에서 유일해야 합니다. 유닛 파일이 다른 디렉토리에 있더
라도 같은 이름을 가진 두 개의 유닛을 한 프로그램에서 사용할 수 없습니다.


interface 섹션
유닛의 interface 섹션은 interface 예약어로 시작해서 implementation 섹션이 시작될 때
까지입니다. 인터페이스 섹션에는 다른 유닛이나 프로그램에서 사용 가능한 상수, 타입, 변
수, 프로시저 및 함수를 선언합니다. 다른 유닛의 코드가 마치 자신의 유닛 안에서 선언된
것처럼 호출할 수 있기 때문에 이런 항목들을 public이라고 합니다.
프로시저나 함수의 인터페이스 선언은 루틴의 시그니처(signature), 즉 해당 루틴의 이름,
파라미터들, 그리고 리턴 타입(함수의 경우)만을 포함합니다. 프로시저나 함수의 실행 코드
블럭은 임플먼테이션 섹션에 위치합니다. 그러므로 인터페이스 섹션의 프로시저와 함수 선
언은 forward 선언과 비슷하다고 할 수 있습니다.
클래스의 인터페이스 선언은 필드, 속성, 프로시저, 함수 등 모든 클래스 멤버의 선언을 포
함해야 합니다.
인터페이스 섹션은 자체의 uses 절을 포함할 수 있으며, 반드시 예약어 interface 바로 뒤에 나
타나야 합니다. uses 절에 대한 자세한 내용은 2장의“유닛 참조와 uses 절”을 참조하십시오.


implementation 섹션
유닛의 implementation 섹션은 예약어 implementation로 시작하여 initialization 섹션이
시작할 때까지, initialization 섹션이 없는 경우에는 유닛의 끝까지입니다. 임플먼테이션 섹
션은 인터페이스 섹션에 선언된 프로시저와 함수를 정의합니다. 임플먼테이션 섹션 내에서
이러한 프로시저와 함수는 순서에 상관없이 정의하고 호출할 수 있습니다. 임플먼테이션 섹
션에 public 프로시저와 함수 헤더를 정의할 때 파라미터 리스트를 생략할 수도 있지만, 파
라미터 리스트를 포함할 경우에는 인터페이스 섹션의 선언과 반드시 일치해야 합니다.
임플먼테이션 섹션은 public 프로시저 및 함수들의 정의 외에도, 해당 유닛 내에서만 사용
가능한(private) 상수, 타입(클래스 포함), 변수, 프로시저 및 함수를 선언할 수 있습니다.
다시 말해, 인터페이스 섹션과 달리 임플먼테이션 섹션에서 선언된 항목들은 다른 유닛들에
서는 접근할 수 없다는 것입니다.
임플먼테이션 섹션은 자체의 uses 절을 포함할 수 있는데, 반드시 implementation 바로 뒤
에 나타나야 합니다. 임플먼테이션 섹션에서 지정된 유닛들의 식별자들은 임플먼테이션 섹
션에서만 사용 가능하며 인터페이스 섹션에서는 참조할 수 없습니다.
uses 절에 대한 자세한 내용은 2장의“유닛 참조와 uses 절”을 참조하십시오.


initialization 섹션
initialization 섹션은 선택적으로 사용됩니다. 이니셜라이제이션 섹션은 initialization 예
약어로 시작하여 finalization 섹션이 시작될 때까지, finalization 섹션이 없는 경우에는 유
닛의 끝까지 계속됩니다. 이니셜라이제이션 섹션에는 프로그램이 시작될 때 실행될 문장들
을 포함하며, 나타나는 순서대로 실행됩니다. 그러므로 예를 들면 초기화해야 할 데이터 구
조를 정의했을 경우, 이니셜라이제이션 섹션에서 초기화를 할 수 있습니다.
인터페이스 uses 리스트의 유닛들의 경우, 외부로부터 uses된 유닛들의 이니셜라이제이션
섹션들은 uses 절에 나타난 순서대로 실행됩니다.


finalization 섹션
finalization 섹션은 선택적이며 initialization 섹션이 있는 유닛에서만 사용할 수 있습니
다. 파이널라이제이션 섹션은 finalization 예약어로 시작하여 유닛의 끝까지 계속됩니다.
파이널라이제이션 섹션에는 메인 프로그램이 종료될 때 실행될 문장이 들어 있습니다(프로
그램 종료를 위해 Halt 프로시저를 호출한 경우는 예외). 파이널라이제이션 섹션을 사용하
면 이니셜라이제이션 섹션에 할당했던 리소스를 해제할 수 있습니다.
파이널라이제이션 섹션은 이니셜라이제이션 섹션과 반대로 실행됩니다. 예를 들어 애플리
케이션에서 유닛을 A, B, C 순으로 초기화했다면 C, B, A 순으로 유닛을 해제합니다.
일단 어떤 유닛의 이니셜라이제이션 코드가 실행되기 시작하면, 애플리케이션 종료 시에는
해당 유닛의 파이널라이제이션 섹션의 실행이 보장됩니다. 런타임 에러가 발생하면 이니셜
라이제이션 코드가 완전히 실행되지 않을 수도 있기 때문에, 파이널라이제이션 섹션은 불완
전하게 초기화된 데이터도 처리할 수 있어야 합니다.
번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14387
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21064
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
150 [델파이7 이후 새로운 기능] 코딩 생산성을 높여주는 코드에디터 기능들 Humphery 2015.04.21 2681
149 XE8로 구현한 멀티플랫폼 클립보드 공유앱 런칭 file c2design 2015.04.19 1184
148 Thalmic Labs의 MYO Armband Delphi SDK Beta7입니다. 쭈니아빠 2015.04.18 1131
147 [따라하기] reFind 도구를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기 [9] Humphery 2015.04.14 4125
146 reFind.exe: 마이그레이션 작업에서 수작업을 줄여주는 도구 Humphery 2015.04.09 3953
145 "모바일 앱" 개발 또는 유지관리, 데브기어와 해결하세요! file 관리자 2015.03.26 12726
144 [VCL] TaskDialog 컴포넌트 소개 Humphery 2015.02.25 1089
143 [Delphi week 2015] 윈도우 3.11에서 델파이1.0 사용하기 관리자 2015.02.13 1136
142 [VCL] 에디트/버튼의 다양한 속성 소개 Humphery 2015.02.13 1710
141 [XE7] 안드로이드 WiFi 상태조회와 설정하기 Humphery 2015.02.12 1871
140 [XE7] 안드로이드 블루투스 활성화 조회와 설정하기 [1] Humphery 2015.02.12 1768
139 [무료 온라인 세미나] Delphi Week 2015 file 관리자 2015.02.07 1013
138 20150204 VCL 개발자를 위한 Speed UP! RAD스튜디오 관리자 2015.02.05 1100
137 [VCL] TaskDialog 컴포넌트 소개 Humphery 2015.02.03 925
136 [VCL] 리본컨트롤 자습서 동영상 Humphery 2015.02.03 1764
135 바코드 스캐너 기능 구현하기(iOS, Android) [2] 험프리 2015.01.14 6591
134 [XE7] Castalia로 델파이 코딩 생산성을 높일 수 있습니다.(XE7사용자 무료제공) Humphery 2014.12.09 2591
133 [무료 온라인 강의] 마르코칸투의 "델파이 오브젝트 파스칼" 관리자 2014.11.28 1755
132 더 쉬운코드, 더 유연한 코드를 작성할 수 있는 현대식 문법 [1] Humphery 2014.11.06 4611
131 델파이 문법을 익힐 수 있는 문서모음 [2] Humphery 2014.11.03 2631