Delphi [델파이 문법] 문법 요소 #6
2012.10.25 20:17
연산자 우선 순위
복잡한 표현식에서는 연산자 우선 순위 규칙에 따라 연산이 수행되는 순서가 정해집니다.
![1.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/2a8a8d4234dd6add35f9a4f14dc41fc8.png)
우선 순위가 높은 연산자는 우선 순위가 낮은 연산자보다 먼저 계산되고, 우선 순위가 같은
연산자는 왼쪽에서 오른쪽 순으로 계산됩니다. 따라서 표현식이 다음과 같은 경우,
![2.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/f93d9ee74ae18649c16ce3c497ad25d1.png)
Y와 Z를 곱한 후 그 결과에 X를 더합니다. 즉, *가 +보다 우선 순위가 높기 때문에 먼저 수
행됩니다. 그러나 다음의 경우,
괄호를 사용하여 이러한 우선 순위 규칙보다 우선하여 처리되도록 할 수 있습니다. 괄호 내
![3.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/c3f5b5f793565313ebbfe8df94127c02.png)
먼저 X에서 Y를 뺀 후 그 결과에 Z를 더합니다. 즉, -와 +는 우선 순위가 같기 때문에 왼쪽
에 있는 연산이 먼저 수행됩니다.
괄호를 사용하여 이러한 우선 순위 규칙보다 우선하여 처리되도록 할 수 있습니다. 괄호 내
에 있는 표현식이 먼저 계산되고, 계산된 결과는 하나의 피연산자로 간주됩니다. 예를 들면,
다음과 같습니다.
![4.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/a271a426fccb2f3494732b8a827b8bb5.png)
이 문장은 X와 Y의 합에 Z를 곱합니다.
언뜻 보면 괄호가 필요하지 않은 것처럼 보이는 곳에 괄호가 필요한 경우도 있습니다. 예를
들어, 다음의 표현식을 생각해 봅시다.
![5.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/6823aab75b8b252dcd5de086884da8c6.png)
이 문법의 원래의 의도는 분명히 다음과 같습니다.
그러나 괄호가 없다면 컴파일러는 연산자 우선 순위에 따라 다음과 같이 읽습니다.
![6.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/bc907fc33a87da69af47148a9908cf6d.png)
그러나 괄호가 없다면 컴파일러는 연산자 우선 순위에 따라 다음과 같이 읽습니다.
![7.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/711652160249861216e4ce5f360ae298.png)
이 경우 Z가 부울 값이 아니라면 컴파일 에러가 발생합니다.
필요하지 않은 경우라도 괄호를 많이 사용하는 것이 코드의 작성이나 읽기를 쉽게 하는 경우
가 많습니다. 따라서 위의 첫 번째 예제는 다음과 같이 쓸 수 있습니다.
![8.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/8bea6f8c1a2ecfb4386a77cfaa013497.png)
여기서 괄호는 (컴파일러에게) 불필요하지만, 프로그래머와 코드를 읽어보는 사람들에게는
연산자 우선 순위를 생각해보지 않아도 되게 해줍니다.
함수 호출
함수는 값을 리턴하므로, 함수 호출도 표현식입니다. 예를 들어, 두 개의 정수 인수를 가지고
있고 정수를 리턴하는 Calc라는 함수를 정의했다면, 함수 호출 Calc(24, 47)은 정수 표현식
입니다. I와 J가 정수 변수인 경우 I + Calc(J, 8) 역시 정수 표현식입니다. 함수 호출의 예
제는 다음과 같습니다.
함수에 대한 자세한 내용은 5장“프로시저 및 함수”를 참조하십시오.
이 문장은 요소가 5, 6, 7, 8인 집합을 나타냅니다. 다음의 집합 생성자는,
![9.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/6e3b7c19f57224961c0094496625ca8a.png)
함수에 대한 자세한 내용은 5장“프로시저 및 함수”를 참조하십시오.
집합 생성자
집합 생성자는 집합 타입의 값을 나타냅니다. 예를 들면, 다음과 같습니다.
![10.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/d553bea204105e85c39013060a9bf4c1.png)
이 문장은 요소가 5, 6, 7, 8인 집합을 나타냅니다. 다음의 집합 생성자는,
![11.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/027c2055725ff5923fdd63ecb26c875e.png)
위의 집합과 같은 집합을 나타냅니다.
집합 생성자에 대한 문법은 다음과 같습니다.
![12.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/26ec098a19f937d11411cd87efd8c48d.png)
여기서 각각의 item은 집합의 기본 타입의 서수(ordinal)를 나타내는 표현식이거나 이런 표
현식 두개 사이에 두 개의 마침표(..)가 있는 것입니다. item의 형태가 x..y인 경우 x부터 y
범위에 있는 모든 수를 간단하게 표기한 것입니다. 그러나 x가 y보다 큰 경우, [x..y]는 아무
것도 나타내지 않고 공집합이 됩니다. 집합 생성자 [ ]는 공집합을 나타내며, [x]는 x의 값을
유일한 요소로 가진 집합을 나타냅니다.
집합 생성자의 예는 다음과 같습니다.
집합에 대한 자세한 내용은 4장의“구조 타입”절에서“집합”을 참조하십시오.
![13.png](http://tech.devgear.co.kr/files/attach/images/108/952/008/dc5a14fdc9a787e188be88eb0f007c68.png)
집합에 대한 자세한 내용은 4장의“구조 타입”절에서“집합”을 참조하십시오.
인덱스
문자열, 배열, 배열 속성, 문자열이나 배열에 대한 포인터는 인덱스를 사용할 수 있습니다.
예를 들어, FileName이 문자열 변수인 경우 표현식 FileName[3]은 FileName 문자열에서
세 번째 문자를 리턴하고, FileName[I + 1]은 I번째 인덱스의 다음 문자를 리턴합니다. 문
자열에 대한 내용은 4장의“문자열 타입”절을 참조하십시오. 배열과 배열 속성에 대한 내용
은 4장의“구조 타입”절“배열”과 6장의“속성”절“배열 속성”을 참조하십시오.