Delphi [델파이 문법] 문법 요소 #10
2012.11.08 19:55
구조문
구조문(structured statement)은 다른 문장들로 이루어집니다. 다른 문장들을 차례대로 또
는 어떤 조건 하에, 또는 반복적으로 실행하고자 하는 경우 구조문을 사용합니다.
- 복합문 또는 with 문은 단순히 구성 문장들의 순서대로 실행합니다.
- 조건문 즉, if 또는 case 문은 지정된 조건에 따라 구성 문장들 중 하나가 실행되거나 전혀 실
행되지 않습니다.
- repeat, while 및 for 등의 순환문(loop statement)은 구성 문장들의 순서대로 반복해서 실행
합니다.
- raise, try...except 및 try...finally 등의 특수한 문장들은 예외(exception)를 생성하고
처리합니다. 예외 생성과 처리에 대한 내용은 6장의“예외”절을 참조하십시오.
■ 복합문
복합문(compound statement)은 다른 타입의 문장들(단순문 또는 구조문)의 연속으로서,
작성된 순서대로 실행됩니다. 복합문은 예약어 begin 및 end로 묶이고, 복합문 내의 문장들
은 세미콜론으로 구분합니다. 예를 들면, 다음과 같습니다.
end 앞의 마지막 세미콜론은 옵션입니다. 그러므로 다음과 같이 쓸 수 있습니다.
복합문은 델파이 문법에서 하나의 문장이 필요한 상황에서 필수적입니다. 프로그램, 함수나
![4.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/7e906e5c7c46a697f2bbcfe09138475b.png)
with 문은 레코드의 필드나 객체의 필드, 속성, 메소드를 참조하기 위한 간단 표기 방식입니
또는,
![1.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/baa5e5594294117403b6837535098bb4.png)
end 앞의 마지막 세미콜론은 옵션입니다. 그러므로 다음과 같이 쓸 수 있습니다.
![2.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/a7db4bf108729304cee464e5138982ba.png)
복합문은 델파이 문법에서 하나의 문장이 필요한 상황에서 필수적입니다. 프로그램, 함수나
프로시저 블럭 외에도, 조건문이나 순환문과 같은 구조문 내에 나타날 수 있습니다. 예를 들
면, 다음과 같습니다.
![3.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/c989746d08f06d0a89f788974484b785.png)
내부의 문장이 단 하나인 복합문을 작성할 수도 있습니다. 복잡한 문장에서의 괄호와 마찬가
지로 begin과 end로 명확하게 표시함으로써 코드의 가독성을 높일 수 있습니다. 또한 빈 복
합문을 사용하여 내용이 없는 블럭을 만들 수도 있습니다.
![4.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/7e906e5c7c46a697f2bbcfe09138475b.png)
■with 문
with 문은 레코드의 필드나 객체의 필드, 속성, 메소드를 참조하기 위한 간단 표기 방식입니
다. with 문의 문법은 다음과 같습니다.
![5.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/ebb671688feeae9d0805585b2b43d992.png)
또는,
![6.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/4128be23e53478fc1ddb0bdee7d33a99.png)
여기서, obj는 레코드 참조나 객체 인스턴스, 클래스 인스턴스, 인터페이스나 클래스 타입
(메타클래스) 인스턴스를 나타내는 변수 참조이고, statement는 단순문이나 구조문입니
다. statement 내에서 한정자 없이 식별자만으로 obj의 필드, 속성, 메소드를 참조할 수
있습니다.
예를 들어, 다음과 같이 선언했다고 가정해 보십시오.
다음과 같은 with 문을 작성할 수 있습니다.
이 문장은 다음과 동일합니다.
따라서 with 문은 간결할 뿐만 아니라 더 효율적이 됩니다. 또한 with 문을 실행하는 동안은
with 문 안의 각각의 변수 참조나 메소드 이름은 가능한 경우 지정된 객체나 레코드의 멤버
with 뒤에 객체나 레코드가 여러 개 있으면, 중첩된 with 문처럼 처리됩니다. 따라서,
이 문장은 다음과 같습니다.
![7.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/9791cbbbe6a49c5028c005991fd2c7a0.png)
다음과 같은 with 문을 작성할 수 있습니다.
![8.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/19dd1e3d754054e75afec0ecac286e38.png)
이 문장은 다음과 동일합니다.
![9.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/324d1a997183aee52b357896d9ea60f9.png)
obj의 해석에 배열 인덱싱이나 포인터 역참조가 포함되면, 이러한 동작은 statement가 실행
되기 전에 한 번 수행됩니다.
따라서 with 문은 간결할 뿐만 아니라 더 효율적이 됩니다. 또한 with 문을 실행하는 동안은
statement 내에서 변수에 대한 대입 동작은 obj의 해석에 영향을 미지 않는다는 것을 의미
합니다.
with 문 안의 각각의 변수 참조나 메소드 이름은 가능한 경우 지정된 객체나 레코드의 멤버
로서 해석됩니다. with 문 안에서 액세스하려는 것과 같은 이름을 가진 변수나 메소드가 있
을 경우, 다음 예제에서와 같이 한정자를 앞에 덧붙여야 합니다.
![10.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/bc1040808d9aceecf9a956f428ab88a0.png)
with 뒤에 객체나 레코드가 여러 개 있으면, 중첩된 with 문처럼 처리됩니다. 따라서,
![11.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/4d94b3c3d27ad46090e62d76a585d0e8.png)
이 문장은 다음과 같습니다.
![12.png](http://tech.devgear.co.kr/files/attach/images/108/298/009/80dd700cfc29daf3451aca7639e3fe96.png)
이 경우에, statement에 있는 각 변수 참조 이름이나 메소드 이름은 가능하면 objn의 멤버로
해석됩니다. 그렇지 않은 경우 가능하면 objn-1의 멤버로 해석되며, 그렇지 않은 경우 다시
더 상위의 with 문으로 반복해서 해석을 시도해나갑니다. obj 자신들을 해석하는 데에도 같
은 규칙이 적용됩니다. 예를 들어 objn가 obj1과 obj2 모두의 멤버인 경우, obj2.objn으로 해석
됩니다.