36
1 4프로그래밍 언어 기초 델파이와 C++ 4프로그래밍 언어 기초 델파이와 C++ ................................................................................................... 1 소개............................................................................................................................................................................ 2 개체 지향 프로그래밍 (OOP)................................................................................................................................. 3 속성 .................................................................................................................................................................... 4 메소드 ................................................................................................................................................................ 5 이벤트 ................................................................................................................................................................ 5 언어 가이드 .............................................................................................................................................................. 7 델파이 기본 항목 ............................................................................................................................................ 7 델파이 데이터 타입 ...................................................................................................................................... 11 델파이 프로시저와 함수 .............................................................................................................................. 14 델파이 연산자 ................................................................................................................................................ 15 파이어몽키 어플리케이션의 프로그램 구조 ....................................................................................................... 21 예제 파이어몽키 HD 어플리케이션 델파이프로젝트 콘텐트 메인 프로그램 소스 코드 파일 Project1.dpr .......................................................................................... 21 델파이 어플리케이션 메인 보기와 텍스트 보기 ..................................................................... 22 예제 파이어몽키 HD 어플리케이션 C++빌더프로젝트 콘텐트 C++ 프로젝트 메인 소스 코드 Project6.cpp .......................................................................................... 24 C++ 어플리케이션 메인 보기와 텍스트 보기.......................................................................... 27 C++ 어플리케이션 메인 유니트 소스 코드 헤더 파일.......................................................... 28 사용하기 ............................................................................................................................................................ 29 델파이 C++ 예제 프로그램 하나 탐색하기 ControlsDemo............................................................. 30 오브젝트 설계(UML 클래스 다이어그램을 사용하여)....................................................................................... 30 윈도우와 플랫폼 특정 코드 처리................................................................................................................... 32 요약, 해야 , 리소스...................................................................................................................................... 34

프로그래밍 언어 기초(델파이,C++)

  • Upload
    devgear

  • View
    1.787

  • Download
    1

Embed Size (px)

DESCRIPTION

델파이 또는 C++의 기본적인 내용을 공부하고 싶으신가요? 이 문서는 두 언어의 매우 기초적인 내용을 다루고 있습니다. 한 번 보시면, 두 언어를 이해하는데 매우 도움이 될 것입니다.

Citation preview

Page 1: 프로그래밍 언어 기초(델파이,C++)

1

4장 – 프로그래밍 언어 기초 – 델파이와 C++

4장 – 프로그래밍 언어 기초 – 델파이와 C++ ................................................................................................... 1

소개 ............................................................................................................................................................................ 2

개체 지향 프로그래밍 (OOP)................................................................................................................................. 3

속성 .................................................................................................................................................................... 4

메소드 ................................................................................................................................................................ 5

이벤트 ................................................................................................................................................................ 5

언어 가이드 .............................................................................................................................................................. 7

델파이 기본 항목 ............................................................................................................................................ 7

델파이 데이터 타입 ...................................................................................................................................... 11

델파이 프로시저와 함수 .............................................................................................................................. 14

델파이 연산자 ................................................................................................................................................ 15

파이어몽키 어플리케이션의 프로그램 구조 ....................................................................................................... 21

예제 “파이어몽키 HD 어플리케이션 – 델파이” 프로젝트 콘텐트

메인 프로그램 소스 코드 파일 – Project1.dpr .......................................................................................... 21

델파이 어플리케이션 메인 폼 – 폼 보기와 텍스트 보기 ..................................................................... 22

예제 “파이어몽키 HD 어플리케이션 – C++빌더” 프로젝트 콘텐트

C++ 프로젝트 메인 소스 코드 – Project6.cpp .......................................................................................... 24

C++ 어플리케이션 메인 폼 – 폼 보기와 텍스트 보기 .......................................................................... 27

C++ 어플리케이션 메인 폼 – 유니트 소스 코드 및 헤더 파일 .......................................................... 28

폼 사용하기 ............................................................................................................................................................ 29

델파이 및 C++ 예제 프로그램 중 하나 탐색하기 – ControlsDemo ............................................................. 30

오브젝트 설계(UML 클래스 다이어그램을 사용하여) ....................................................................................... 30

윈도우와 맥 플랫폼 특정 코드 처리 ................................................................................................................... 32

요약, 해야 할 일, 리소스 ...................................................................................................................................... 34

Page 2: 프로그래밍 언어 기초(델파이,C++)

2

소개 "RAD Studio"의 C + +이나 델파이에서 파이어몽키 어플리케이션을 개발할 수 있는데, 둘 다 모두 전세계의

수백만 개발자들에 의해 사용되는 컴포넌트 기반의 개체 지향 프로그래밍 언어로 배우기 쉽습니다.

델파이는 우아하고 배우기 쉬운 개체지향 언어로서 오브젝트 파스칼을 기초로 되어 있으며, 읽기 쉬운

코드, 빠른 컴파일, 그리고 모듈 프로그래밍을 위한 여러 개의 유니트 파일들을 사용하는 등 많은

장점들을 포함합니다. 델파이는 RAD Studio 컴포넌트 프레임워크와 환경을 지원하는 특별한 기능들을

갖고 있습니다.

범용적으로 사용되는 개체지향언어인 C++ 에서도 파이어몽키 어플리케이션을 개발 할 수 있습니다.

C++빌더의 RAD 환경에서 개발자가 유저 인터페이스를 시각적으로 디자인 할 수 있으며 데이터와

서비스에 연결 할 수 있습니다 단 코드는 ANSI/ISO 호환의 C 와 C++입니다. C++을 사용하여 신속한

개발 생산성을 갖습니다.

4장에서는 어떻게 델파이와 C ++ 프로그래밍 언어로 윈도우와 맥 용 어플리케이션을 작성 하도록

도와주는 파이어몽키 비즈니스 어플리케이션 플랫폼을 작업하는지에 대해서 살펴보겠습니다. 델파이와

C++의 현대적 기능을 다루는 도서, 온라인 자습서와 비디오 등이 많이 있기 때문에 전체 언어 사양에

대해서는 다루지 않겠습니다.

델파이와 C++ 언어 가이드는 엠바카데로 DocWiki 에서 보실 수 있습니다:

http://docwiki.embarcadero.com/RADStudio/XE2/en/Delphi_Language_Guide_Index http://docwiki.embarcadero.com/RADStudio/XE2/en/C%2B%2B_Language_Guide_Index

이 장의 끝 부분에서 델파이와 C++ 언어 정보를 볼 수 있는 소스의 추가적인 링크를 알려드리도록

하겠습니다.

Page 3: 프로그래밍 언어 기초(델파이,C++)

3

개체 지향 프로그래밍 (OOP)

개체-지향 프로그래밍은 코드의 재사용과 데이터의 캡슐화를 강조하는 구조적인 프로그래밍의

확장입니다. 여러분이 클래스를 정의 했을 경우 다른 개발자들도 다른 어플리케이션에서 이

클래스를 사용할 수 있기 때문에 개발 시간을 줄이고 생산성을 향상시킵니다.

클래스는 데이터를 캡슐화하고 동작하는 데이터 타입입니다. 개체 지향 프로그래밍 전에는, 데이터와

동작들 (함수들)이 분리된 요소로 취급되었습니다. 개체는 클래스의 인스턴스입니다. 즉 인스턴스

타입의 값이 클래스 입니다. 클래스와 클래스의 인스턴스 사이의 차이점이 크게 중요하지 않은 이

문서에서는 개체라는 용어는 명확하지 않게 자주 사용됩니다. "개체"라는 용어는 또한 클래스에 참조

할 수 있습니다.

파스칼의 레코드나 C의 구조체를 알고 있다면 오브젝트를 이해하기 용이합니다. 레코드는 데이터를

포함하는 필드들로 구성되어 있으며 필드들은 각각의 타입들로 구성됩니다. 레코드는 다양한 데이터

요소들을 집합을 참조하는 것이 용이합니다.

개체 또한 데이터 요소들의 집합입니다만 개체는 레코드나 구조체와 다르게, 자신의 데이터들을

동작하는 함수나 프로시저를 포함합니다. 이러한 프로시저나 함수들을 메소드라고 지칭합니다.

단일 유니트에서의 데이터 및 기능의 결합을 캡슐화라고 합니다. 캡슐화와 더불어 개체-지향

프로그래밍은 계승(inheritance)과 다형성(polymorphism)이라는 특징이 있습니다.

계승은 조상이라 불리는 다른 오브젝트로부터 기능을 파생하는 것을 의미합니다; 오브젝트들은 계승된

행위들을 오버라이드할 수 있습니다.

다형성은 같은 조상에서 파생된 다른 오브젝트들이 가끔 같은 메소드와 속성 인퍼페이스를 지원하는

것을 의미합니다. 개체-지향 프로그래밍에서의 다형성은 다른 오브젝트들이 각기 구현한 동일한

이름의 메소드를 사용가능 하도록 해 주는 방법입니다. 예를 들면, 오브젝트에 “speak”를 요청할 수

있습니다 그러나 조상의 구현 부분에 따라 “speak” 메소드는 사람은 말을 하고, 개는 짖고, 전신을

통해 모스코드를 보내고, 고래는 수중 소리를 방출하고 HTTP를 통해 JSON 패킷을 보냅니다.

영역(Scope)는 오브젝트의 필드, 속성과 메소드의 접근성을 결정합니다. 클래스 안의 선언된 모든

멤버들은 해당 클래스에서 사용할 수 있으며 그 하위 클래스에서 거의 사용할 수 있습니다. 비록

메소드의 구현 코드는 클래스 선언 외부에 나타나지만, 메소드는 클래스 선언부 안에 선언되어 있기

때문에 여전히 클래스의 영역 안에 있습니다.

Page 4: 프로그래밍 언어 기초(델파이,C++)

4

오브젝트

오브젝트는 고정 또는 변수 값(또는 값의 설정)을 저장할 수 있는 메모리의 특정 지역입니다.

(오브젝트라는 단어의 사용은 개체-지향 프로그래밍에서 사용되는 일반 적인 용어와는 다릅니다.) 각

값은 연관된 이름과 또한 데이터 타입으로 알려진 타입을 갖습니다. 이름은 오브젝트에 접근 하기

위해 사용됩니다. 이 이름은 단순한 식별자 일수도 있고 또는 오브젝트를 유일하게 참조할 수 있는

복잡한 표현식이 될 수도 있습니다. 타입은 이런 이유로 사용됩니다:

올바른 메모리 할당 요구를 결정하기 위해

후속 액세스하는 동안 개체에 있는 비트 패턴을 해석하기 위해

많은 타입의 검사 상황에서, 불법 할당을 방지하기 위해

선언은 식별자와 오브젝트 사이의 필요한 매핑을 설정합니다. 각각의 선언은 데이터 타입에 따른

식별자와 연결합니다. 정의 선언으로 알려진 대부분의 선언은 또한 개체의 생성(장소와 시간)을

설정합니다. 즉, 물리적 메모리와 가능한 초기화의 할당입니다. 참조 선언으로 알려진 선언은 단순히

컴파일러에게 자신의 식별자와 타입을 소개합니다. 같은 식별자에 많은 참조 선언이 있을 수 있으나,

특히 다중 파일 프로그램에서는 그 식별자에 대한 단 하나의 정의 선언만 허용됩니다.

일반적으로 말해서, 식별자는 소스 코드에 선언하기 전에 프로그램에서 사용할 수 없습니다. 이 규칙

(앞으로 참조라고도 함)에 대한 합법적 예외는 레이블, 선언하지 않은 함수 호출, 클래스, 구조체,

유니온 태그입니다.

속성, 메소드와 이벤트

파이어몽키용 컴포넌트에서, 클래스들은 속성, 메소드와 이벤트로 구성됩니다. 각 클래스들은 데이터

멤버 (속성), 데이터를 동작하는 함수(메소드)와 클래스의 사용자와 상호 작용하는 방법(이벤트)를

포함합니다.

속성

속성은 오브젝트의 시각적인 형태나 동작에 영향을 주는 특성입니다. 예를 들면, Visible 속성은

어플리케이션 인터페이스에서 오브젝트가 보일 것인지 아닌지를 결정합니다. 잘 설계된 속성들은

컴포넌트를 사용하고 유지 보수하기 쉽게 해줍니다.

다음은 속성들의 일부 유용한 특징들입니다:

실행 시에만 사용할 수 있는 메소드와 다르게, 일부 속성들은 설계 시점에 변경 할 수 있으며

IDE에서 컴포넌트가 변경될 때 즉시 피드백을 할 수 있습니다.

일부 속성들은 시각적으로 오브젝트의 값을 변경 할 수 있는 오브젝트 인스펙터에서 접근할

수 있습니다.

설계 시에 속성을 설정하는 것은 코드 작성하는 것보다 쉽고 코드를 유지 보수하기 쉽게

해줍니다.

Page 5: 프로그래밍 언어 기초(델파이,C++)

5

데이터가캡슐화되어있기때문에속성의값을가져오고설정하는방법으로특별한처리는오브

젝트의사용자에게보이지않도록수행할수있습니다캡슐화부분이실제오브젝트의Private

Protected입니다

속성에 액세스하는 동안 이벤트를 트리거 하거나 다른 데이터를 수정하는 로직을 구현할 수

있습니다. 예를 들어, 하나의 속성의 값을 변경하면 다른 속성의 값도 변경하기를 요구할

수도 있습니다. 속성을 위해 생성된 메소드를 변경 할 수 있습니다. 속성은 virtual이 될 수도

있습니다.

하나의 속성은 하나의 오브젝트에 제한되지 않습니다. 하나의 오브젝트에서 하나의 속성을

변경하는 것이 몇 몇의 오브젝트에 영향을 줄 수 있습니다. 예를 들면, 라디오 버튼의

Checked 속성을 True로 설정하면 그룹 안에 있는 모든 라디오 버튼에 반영됩니다.

메소드

메소드는 오브젝트의 행위를 지정합니다. 메소드는 클래스와 연관된 프로시저와 함수입니다. 메소드는

같은 클래스 안에 어떠한 가시성 영역이든 모든 멤버를 액세스 할 수 있습니다 클레스 선언 안에,

메소드는 프로시저와 함수 선언부가 나타납니다. 클래스가 선언된 후에 같은 모듈 안에, 각 메소드는

선언부 정의에 따라 구현되어야 합니다.

메소드의 구현 안에서, Self (델파이)식별자 또는 this (C++)는 어느 오브젝트에서 메소드가 호출되었는지

오브젝트를 참조합니다.

클래스에 선언된 메소드들은 아래 테이블에 표시되듯이 3가지 카테고리로 분류됩니다.

카테고리 델파이문법 C++ 문법 Self (델파이) 또는 this (C++) 의미

Regular N/A N/A 클래스 인스턴스 Static static static N/A

Class class __classmethod 메타-클래스 인스턴스

이벤트

이벤트는 프로그램에 의해 인식되는 행동이나 사건입니다. 대부분의 현대 어플리케이션들은 이벤트에

대해 반응하도록 설계되어 있기 때문에 이벤트-유발 프로그램이라고 합니다. 프로그램에서 개발자는

사용자가 어떠한 작업을 수행할 것인지 예를 들어, 사용자가 메뉴 항목을 클릭할 지, 버튼을 클릭할 지

또는 일부 텍스트를 표시할지 등 예측할 수 있는 방법이 없습니다. 같은 제한된 순서에서 항상

실행하는 코드를 작성하는 것보다 특정 이벤트를 처리하기 위한 코드를 작성할 수 있습니다.

이벤트가 어떻게 트리거 되는 지와 상관없이, 파이어몽키 오브젝트는 해당 이벤트를 처리하기 위한

코드를 작성했다면 코드가 실행되고 그렇지 않으면, 디폴트 이벤트 핸들링 동작이 발생합니다.

Page 6: 프로그래밍 언어 기초(델파이,C++)

6

Private, Protected, Public 및 Published

클래스 타입 선언은 필드와 메소드들의 접근성을 제어하는 세 부분 또는 네 부분을 포함합니다:

public 부분은 특별한 접근 제한이 없는 필드와 매소드를 선언합니다. 클래스 인스턴스와 하위

클래스들은 이 곳에 선언된 필드와 메소드들에 접근할 수 있습니다. public 멤버는 클래스를

소유하는 곳, 즉 클래스가 선언된 유니트와 해당 유니트를 사용하는 어떠한 유니트에서도

접근 가능합니다.

protected 부분은 일부 제한을 가진 필드와 메소드를 포함합니다. Protected 멤버는 클래스가

선언된 유니트 안에서와 하위 클래스의 유니트와 상관없이 하위 클래스에서만 접근

가능합니다,

private 부분은 엄격한 접근 제한이 있는 필드와 메소드를 선언합니다. Private 멤버는 선언된

유니트에서만 접근 가능합니다. Private 멤버는 클래스 안에서 public 또는 published 메소드들과

속성들을 구현하기 위해서 자주 사용됩니다.

TPersistent에서 파생된 클래스에서, published 부분에 설계 시점에 사용할 수 있는 속성과

메소드들을 선언합니다. Published 멤버는 public 멤버와 동일한 가시성을 가지지만

컴파일러는 설계 시에 오브젝트 인스펙터에 표시되는 Published 속성과 메소드를 위한 런타임

정보를 생성합니다.

속성, 메소드를 선언할 때 새로운 멤버는 이 네 부분 중 하나에 추가됩니다. 이 네 부분은 가시성을

표시하는: private, protected, public, published 부분입니다.

생성자(Constructor)와 파과자(Destructor)

생성자는 오브젝트 인스턴스를 생성해주고 초기처리 하는 특별한 메소드 입니다. 파괴자는 호출된

오브젝트를 파괴하고 메모리를 해제하는 메소드 입니다.

델파이 생성자와 파괴자에 대한 더 많은 정보는 엠바카데로 DocWiki 에서 보실 수 있습니다.

http://docwiki.embarcadero.com/RADStudio/en/Methods#Constructors

C++ 생성자와 파괴자의 더 많은 자료는 엠바카데로 DocWikit 에서 보실 수 있습니다.

http://docwiki.embarcadero.com/RADStudio/en/Introduction_To_Constructors_And_Destructors

Page 7: 프로그래밍 언어 기초(델파이,C++)

7

언어 가이드

이 섹션은 델파이의 구성 요소와, 데이터 타입, 문장, 함수, 프로시저 및 연산자에 대한 정보를

포함하는 간략한 개요를 제공합니다.

기본 항목

델파이에서 기본 항목은 식별자, 숫자, 문자, 레이블과 주석들을 포함합니다. 각각을 살펴 보도록

하겠습니다.

델파이 기본 항목

키워드(때로는 예약어라 불리는)를 포함한 델파이의 필수 언어 항목은 지시어, 식별자, 숫자, 문자열,

레이블, 주석과 컴파일러 지시어등 입니다.

키워드

다음과 같은 키워드(예약어)는 재정의 할 수 없으며 식별자로 사용할 수 없습니다:

and, array, as, asm, begin, case, class, const, constructor, destructor, dispinterface, div, do, downto, else, end, except, exports, file, finalization, finally, for, function, goto, if, implementation, in, inherited, initialization, inline, interface, is, label, library, mod, nil, not, object, of, or, packed, procedure, program, property, raise, record, repeat, resourcestring, set, shl, shr, string, then, threadvar, to, try, type, unit, until, uses, var, while, with, xor

참고: 위 표에 추가적으로, 클래스 타입 선언부분에 예약어로 자동으로 생기지만 지시어로는 분류되지

않는 private, protected, public, published등이 있습니다

at 과 on 은 또한 특별한 의미를 가지고 있지만 예약어로 취급하지는 않습니다 object 키워드는

메소드 포인터를 선언하기 위해서 사용됩니다.

지시어

델파이는 여러 개의 지시어를 가지고 있습니다. 지시어란 소스 코드의 특정 위치에서 특별한 의미를

갖는 단어를 말합니다. 지시어 타입은 델파이에서 특별한 의미를 갖습니다만, 예약어와 다르게 사용자-

지정 식별자가 발생하지 않는 컨텍스트에서만 표시됩니다.

권장사항은 아니지만 – 지시어와 정확히 같은 형태의 식별자를 선언 할 수 있습니다.

absolute, abstract, assembler, automated,

Page 8: 프로그래밍 언어 기초(델파이,C++)

8

cdecl, contains (7), default, delayed (11), deprecated, dispid, dynamic, experimental, export, external, far (1) ,final, forward, helper (8), implements, index, inline (2), library (3), local (4), message, name, near (1), nodefault, operator (10), out, overload, override (7), package, pascal, platform, private, protected, public, published, read, readonly, reference (9), register, reintroduce, requires (7), resident (1), safecall,sealed (5), static, stdcall, strict, stored unsafe varargs, virtual winapi (6), write, writeonly

주의: 1. far, near과 resident는 폐기되었습니다. 2. inline 은 인라인 프로시저와 함수를 표시하기 위해

프로시저와 함수 선언 끝 부분에 지시어 스타일로 사용되지만 터보 파스칼에서는 예약어가 됩니다. 3.

library 프로젝트 소스 코드에서 첫 토큰으로 사용되었을 때 또한 키워드입니다; 이것은 DLL

프로젝트라는 것을 알려줍니다. 그렇지 않으면, 사용 때 이 심볼을 표시하여 라이브러리임을 알려

줍니다. 4. local 은 카일릭스 지시어이고 델파이 윈도우32에서는 무시합니다. 5. Sealed는 클래스

지시어입니다: 'class sealed'. sealed 클래스는 더 이상 확장(C++에서 final과 같이) 또는 파생할 수

없습니다. 6. winapi는 델파이 Win32에서 stdcal와 동일합니다. 64-비트는 다릅니다. 7. Package는 첫 번째

토큰으로 사용하면 패키지를 나타내고 package 구문을 사용하도록 합니다. requires 와 contains는

패키지에서만 사용하는 지시어입니다. 8. Helper는 "class helper for”로 나타냅니다.

9. reference는 함수나 프로시저의 참조를 가리킵니다. 10. Operator는 클래스 연산자를 가리킵니다. 11.

delayed 지시어는 라이브러리와 패키지에서 기술됩니다.

식별자

식별자는 상수, 변수, 필드, 타입, 속성, 프로시저, 함수, 프로그램, 유니트, 라이브러리와 패키지들을

표시합니다.

식별자는 255자를 넘지 않는 범위에서 사용할 수 있습니다. 식별자는 반드시 알파벳 문자로

시작해야 하며, 식별자 첫 문자는 유니코드 문자와 (_)와 스페이스는 포함할 수 없습니다.

첫 문자 후에는 영숫자 문자, 유니코드 문자, 숫자와 밑줄 등을 사용할 수 있습니다.

예약어는 식별자로 사용할 수 없습니다.

델파이 언어는 대소문자 구분을 하지 않기 때문에, CalculateValue와 같은 식별자는 사용할 수

있는 방법 중에 하나입니다.

Page 9: 프로그래밍 언어 기초(델파이,C++)

9

숫자

정수와 실수 상수는 쉼표나 공백 없이 숫자의 연속으로 십진수 표기법으로 표현하고, 기호를

표시하기 위해 앞에 + 또는 - 연산자로 시작 할 수 있습니다. 기본 값은 양수이며(예를 들어,

67258은 +67258과 동일합니다)와 미리 정의 된 가장 큰 실수 또는 정수 타입의 범위 안에

있어야 합니다.

소수점 또는 지수가 있는 숫자는 실수를 나타내는 반면 다른 숫자는 정수를 나타냅니다.

실수 내에서 문자 E 또는 e가 나타나면 "열 배"을 의미합니다. 예를 들어, 7E2 는 7 * 10^2를

의미하고, 12.25e+6 와 12.25e6 둘 다 12.25 * 10^6를 의미 합니다.

예를 들어 접두어 달러-기호 $8F는 16 진수 숫자를 나타냅니다. 이전 없이 16 진수 – 단 항

연산자는 양수로 이동합니다. 할당하는 동안, 16 진수 값이 수신 타입의 범위 밖이라면

정수(32 비트 정수)의 경고 메시지가 나타나는 경우를 제외하고는 오류가 발생합니다. 이

경우, 정수의 양수 범위를 초과하는 값은 2의 보수 정수 표시와 일치하는 방식으로 음수로

이동합니다.

문자열

문자열은 또한 리터랄 문자열이나 문자열 상수라고도 부르며 인용 문자열, 제어 문자열, 인용

및 제어 문자열의 조합으로 구성되어 있습니다. 인용 기호(‘ ‘)를 사용하여 문자열을

표시합니다.

인용 문자열은 연속된 문자이며 ANSI 또는 멀티 바이트 문자 세트로, 한 줄에 작성하고

아포스트로피로 둘러쌉니다. 아포스트로피 사이에 아무것도 없는 인용 문자열은 널

문자열입니다. 인용 문자열의 두 개의 연속 아포스트로피는 단일 문자를 나타냅니다.

문자열은 UTF-16으로 인코딩 된 유니 코드 문자열로 내부적으로 표현됩니다. 기본 다국어

평면(Basic Multilingual Planel :BMP)의 문자는 2 바이트가 필요하고 BMP가 아닌 문자에서는 4

바이트가 필요합니다.

제어 문자열은 하나 이상의 연속된 제어 문자들로 각각의 문자는 0 ~ 65535 (십진수)까지 또는

UTF-16 인코딩 $ 0부터 $ FFFF (16 진수)까지 일정한 부호 없는 정수 다음에 # 기호로 구성되며

지정된 코드 값에 해당하는 문자를 나타냅니다. 각 정수는 문자열에서 2 바이트로 내부적으로

표현됩니다. 제어 문자와 멀티 바이트 문자를 표시하는데 매우 유용합니다.

레이블

레이블로 식별자 또는 양수를 사용할 수 있습니다. 델파이 컴파일러는 0부터 4294967295

(uint32 범위)까지 숫자 레이블을 허용합니다.

레이블은 goto 문에서 사용됩니다.

Page 10: 프로그래밍 언어 기초(델파이,C++)

10

주석문과 컴파일러 지시어

구분 기호로 작동 할 때를 제외하고는 주석은 컴파일 되지 않습니다 또는 컴파일러 지시어. 주석을

작성하는 몇 가지 방법이 있습니다:

{왼 쪽과 오른쪽 괄호 사이에 텍스트는 주석입니다. }

(*왼쪽 괄호-더하기-*와 *-더하기-오른쪽 괄호 사이의 텍스트 역시 주석입니다 *)

// 슬래시 두 개와 라인 끝 사이의 텍스트는 주석입니다.

주석은 중첩할 수가 없습니다. 예를 들어, (* {} *) 입니다. 이 형태도 주석을 포함하는 코드 섹션을

주석처리 하는데 매우 유용합니다.

주석 문자의 세 가지 유형을 사용하는 방법과 시기에 대한 몇 가지 권장 사항입니다:

개발하는 동안 만든 임시 변경 사항에 대한 주석은 이중 슬래시 (/ /)를 사용합니다.

작업하는 동안 빠르게 더블 슬래시 문자를 삽입하기 위해 코드 편집기의 편리한 CTRL + /

(슬래시) 방법을 사용할 수 있습니다.

개발 주석 및 다른 주석을 포함한 코드 블록 주석 모두에 괄호 "(* ... *)"을 사용합니다

이 주석 문자는 주석의 다른 유형을 포함하여 소스의 여러 행을 허용하며, 컴파일러에 의해

제거 할 수 있습니다.

코드를 유지하기 위한 소스 문서에는 괄호({})를 사용합니다 {또는 (* 를 입력 한 후에 달러

기호 ($)를 포함한 주석은 컴파일러 지시어 입니다. 예를 들어, {$WARNINGS OFF}는 컴파일러가

경고 메시지를 생성하지 않는 것을 알려줍니다.

컴파일러 지시어의 전체 목록은 엠바카데로 DocWiki에서 찾을 수 있습니다.

http://docwiki.embarcadero.com/RADStudio/XE2/en/Delphi_Compiler_Directives_(List)_Index

Page 11: 프로그래밍 언어 기초(델파이,C++)

11

데이터 타입

델파이 데이터 타입

델파이 데이터 타입은 정수 데이터 타입, 실수 데이터 타입, 문자열과 문자 데이터 타입, 필드 데이터

타입, 불린 데이터 타입과 다른 데이터 타입의 컬렉션이 포함되어 있습니다.

정수 데이터 타입

Byte: 8-비트 부호 없는 정수

ShortInt: 8-비트 부호 있는 정수

Word: 16- 비트 부호 없는 정수

SmallInt: 16- 비트 부호 있는 정수

Cardinal: 32- 비트 부호 없는 정수

LongWord: 32- 비트 부호 없는 정수

Integer: 32- 비트 부호 있는 정수

LongInt: 32- 비트 부호 있는 정수

UInt64: 64- 비트 부호 없는 정수

Int64: 64- 비트 부호 있는 정수

NativeInt: 64-비트 또는 32-비트 플랫폼에 따라 달라지는 부호가 없는 정수

Page 12: 프로그래밍 언어 기초(델파이,C++)

12

문장

델파이와 C++에서의 문장은 할당과 복합문이 있으며 if 와 case (델파이)와 switch (C++)등을 포함한

조건문이 있습니다. for (델파이와 C++), repeat (델파이), while(델파이와 C++) 와 do while (C++) 문장들을

포함한 반복문이 있습니다. 이 부분은 각 각 두 언어의 문장 타입들을 다루게 될 것입니다.

델파이 문장

할당 문장: 변수를 할당하거나 다른 변수에 식을 할당합니다.

variable := variable or expression

복합문: 몇 개의 문장을 블록에 포함하여 사용합니다.

begin <statement(s)> End

If 문: 하나 이상의 문장의 조건 테스트 및 실행.

if <logical expression> then <statement or compound statement> if <local expression> then <statement or compound statement> else <statement or compound statement>

Case 문: 표현식의 값들과 각 값들에 대한 실행 문장들을 나열합니다. 때론 case 문이 중첩된

if/then/else 문보다 읽고 따라가기가 더 쉽습니다.

case expression of caselist1: <statement or compound statement>

… caselistn: <statement or compound statement> else <statement or compound statement> end

For 문: 값 또는 컬렉션 또는 열거 형의 범위에 기초하여 문장들을 반복합니다.

for <counter> := <initial value> to <final value> do <statement or compound statement>

for <counter> := <initial value> downto <final value> do <statement or compound statement>

for <element> in <some collection or enumeration> do <statement or compound statement>

Repeat 문: 끝에서 논리 테스트를 하면서 루프를 반복합니다.

repeat <statement of block of statements> until <logical expression>

Page 13: 프로그래밍 언어 기초(델파이,C++)

13

While 문: 처음에 논리 테스트를 하는 반복 루프.

while <logical expression> do <statement or compound statement>

GoTo 문: (일부 컴퓨터 공학자에 의한 구조화 프로그래밍에서는 안 좋음)

goto <label>

Try 와 Raise 문: 예외를 걸러내고, 예외를 발생 시킵니다. try <statement(s)> except <exception handling statements> end try <statements> finally <statements> end raise <exception>

Page 14: 프로그래밍 언어 기초(델파이,C++)

14

함수와 프로시저

델파이와 C++ 모두 제사용 가능한 루틴 작성을 지원합니다.

델파이 프로시저와 함수

루틴이라 불리는 프로시저와 함수는 프로그램의 다른 위치에서 호출되는 독립적인 문장 블록입니다.

함수는 실행할 때 반환 값이 있는 루틴입니다. 프로시저는 반환 값이 없는 루틴입니다. 함수 호출 시,

결과 값을 반환하기 때문에, 할당 문에서 표현식으로 사용될 수 있습니다.

프로시저와 함수를 선언 할 때, 루틴의 이름, 매개변수의 유형과 수, 그리고 함수인 경우는 반환 값의

유형들을 지정합니다; 선언의 이 부분은 가끔 헤딩, 또는 헤더 프로토타입라고 합니다. 그리고

프로시저와 함수가 호출될 때 실행하는 코드의 블록을 작성합니다; 이 부분을 루틴의 바디 또는

루틴의 블록이라고 부릅니다. 델파이 프로시저와 함수의 더 자세한 내용은 엠바카데로 DocWiki에서

보실 수 있습니다. http://docwiki.embarcadero.com/RADStudio/en/Procedures_and_Functions

프로시저 선언

델파이 프로시저 선언 형식입니다:

procedure procedureName(parameterList); directives; localDeclarations; begin statements end;

procedureName(프로시저이름)은 유효한 식별자이고, statements(문)은 프로시저가 호출 될

때 실행하는 문장의 순서입니다, 그리고 parameterList(매개변수 목록), directives(지시어),

localDeclarations(로컬 선언)는 선택 사항입니다.

프로시저의 구문 블록 안에서, 프로시저 로컬 선언 부분에 선언된 다른 식별자와 변수를 사용할 수

있습니다; 매개변수 목록은 로컬 변수 세트를 정의하므로 로컬 선언 부분에 매개변수 이름을 다시

선언하지 않습니다. 결과적으로, 모든 프로시저 선언 안의 모든 식별자를 사용할 수 있습니다.

함수 선언

함수 선언은 반환 유형과 값을 지정하는 것을 제외하고는 프로시저 선언과 동일합니다. 함수 선언

형식은 다음과 같습니다:

function functionName(parameterList):returnType;directives; local Declarations; begin statements end;

functionName(함수 이름)은 유효한 식별자이고, returnType (반환값)은 반환값 타입이며,

statements(문)은 함수가 호출 될 때 실행하는 문장의 순서입니다. parameterList (매개변수

Page 15: 프로그래밍 언어 기초(델파이,C++)

15

목록), directives (지시어), local Declarations (로컬 선언)은 선택 사항입니다..

함수의 구문 블록은 프로시저에 적용하는 동일한 규칙으로 적용됩니다. 구문 블록 안에서, 함수 로컬

선언 부분에 선언된 다른 식별자와 변수, 매개변수 목록에서 매개 변수 이름 및 함수 선언 안의 모든

식별자들을 사용할 수 있습니다. 또한, 미리 정의된 변수 Result 처럼 함수 이름 자체가 반환 값을

갖는 특별한 변수 역할을 합니다.

구문 블록 안에서, 선언된 반환 타입과 일치하는 값을 할당하는 한, 함수 이름이나 Result에 값을

할당할 수 있습니다. 함수의 실행이 종료될 때 Result 또는 함수의 이름에 할당 된 값이 무엇이든

함수의 반환 값이 됩니다. 함수가 Result 또는 함수 이름에 값을 할당하지 않고 종료하면, 함수의 반환

값은 정의 되지 않습니다.

연산자

두 언어는 이진 산술, 논리 연산, 관계 연산자 및 포인터 연산자를 포함합니다. 델파이는 또한

집합 및 문자열 연산자를 포함하고 있습니다.

델파이 연산자

이진 산술 연산자

연산자 연산 피연산자 타입 결과 값 유형 예제

+ 더하기 정수, 실수 정수, 실수 X+Y

- 빼기 정수, 실수 정수, 실수 Result -1

* 곱하기 정수, 실수 정수, 실수 P * InterestRate

/ 나누기 실수, 실수 실수 X/2

Div 나누기 정수, 실수 정수 Total div UnitSize

Mod 나머지 정수 정수 Y mod 6

단항 산술 연산자

연산자 연산 피연산자 타입 결과 값 유형 예제

+ sign identity Integer, realinteger real +7 - sign negation Integer, realinteger real -X

다음과 같은 규칙이 산술 연산자에 적용됩니다:

x와 y의 타입에 관계없이, X / Y 유형은 확장(Extended) 타입입니다. 다른 산술 연산자의 경우, 적어도

하나의 피 연산자가 real인 경우 결과는 Extended(확장) 타입이며, 그렇지 않으면 하나 이상의 피

연산자가 Int64인 경우 결과는 Int64 타입이며, 그렇지 않으면 결과 유형은 integer 입니다.

피연산자의 유형이 integer의 하위 범위라면, integer 타입으로 간주합니다.

x div y 의 값은 x / y 의 0에서 가장 가까운 정수로 반올림 된 값입니다.

Page 16: 프로그래밍 언어 기초(델파이,C++)

16

mod 연산자는 피연산자를 나누어 얻은 나머지를 반환합니다. 즉, x mod y = x - (x div y) * y.

x / y, x div y, 또는 x mod y 등의 표현 식에서 y가 제로인 경우 실행 시에 오류가 발생합니다.

불린 연산자

불린 연산자는 not, and, or, 및 XOR는 모든 불린 유형의 피연산자를 취하고 불린 타입의 값을

반환합니다.

연산자 연산 피연산자 타입 결과 값 유형 예제

Not 부정 Boolean Boolean not

And 연결 Boolean Boolean Done and (Total >0)

Or 분리 Boolean Boolean A or B

xor 배타적 분리 Boolean Boolean A xor B

논리(비트) 연산자

다음 논리 연산자는 정수 피연산자에 비트 조작을 수행합니다.

예를 들어, X (바이너리로)에 저장된 값이 001101이고 Y에 저장된 값이 100001이라면, 문: Z := X or Y; Z에

101101 값을 할당합니다.

연산자 연산 피연산자 타입 결과 값 유형 예제

Not bitwise 부정 integer integer not X

And bitwise and integer integer X and Y Or bitwise or integer integer X or Y xor bitwise xor integer integer X xor Y shl bitwise shift left integer integer X shl 2 Shr bitwise shift left integer integer Y shr I

비트 연산자에 다음 규칙이 적용됩니다:

not 연산의 결과는 피연산자와 같은 유형입니다.

and, or, 또는 xor 연산의 피연산자가 모두 정수라면, 결과는 두 가지 유형의 가능한 모든 값을

포함하는 가장 작은 범위 미리 정의 된 정수 타입입니다.

x shl y 와 x shr y 는 x의 값을 왼쪽으로 또는 y 비트의 오른쪽으로 이동하는데 x by 2^y로

곱하거나 나누기와 같습니다(x가 부호가 없는 정수인 경우); 결과는 x와 같은 타입입니다.

예를 들어, N이 01101 값 (10진수 13)을 저장하고 N sh 1 은 11010 (10진수 26)을 반환합니다.

y의 값은 x의 타입의 모듈로(MODULO) 크기로 해석된다는 것을 참고하십시오. 따라서 예를

들면, x가 정수이면 정수 32 비트이고 40 mod 32 는 8 이기 때문에, x shl 40는 x shl 8 로

해석됩니다.

문자열 연산자

연산자 연산 피연산자 타입 결과 값 유형 예제

+ 문자 연결 패킹된 문자 문자열 S + '.'

다음 규칙은 문자 연결에 적용됩니다:

Page 17: 프로그래밍 언어 기초(델파이,C++)

17

+ 에 대한 피연산자는 문자열, 패킷 문자열 (문자 타입의 패킷 배열), 또는 문자가 될 수

있습니다.

그러나, 피연산자 하나가 WideChar 유형이라면, 다른 피연산자는 반드시 long

string(UnicodeString, AnsiString 또는 WideString)이어야 합니다.

+ 연산의 결과는 모든 문자열 유형과 호환됩니다. 그러나, 피연산자 모두가 short strings 또는

characters 이고 결합된 길이가 255 보다 큰 경우라면, 결과는 첫 번째 255 문자까지 잘립니다.

포인터 연산자

관계형 연산자 <, >, <=, 및> = 은 PAnsiChar과 PWideChar (관계형 연산자를 참조)유형의 피연산자를 취할

수 있습니다. 다음 연산자는 또한 피연산자로 포인터를 사용할 수 있습니다. 포인터에 대한 더 자세한

정보는, 데이터 타입, 변수, 및 상수에서 포인터와 포인터 타입을 보십시오.

연산자 연산 피연산자 타입 결과 타입 예제

+ 포인터 더하기 문자 포인터, 정수 문자 포인터 P+I

- 포인터 빼기 문자 포인터, 정수 문자 포인터, 정수 P-Q

^ 포인터 역참조 포인터 포인터 기본 타입 P^

= 등식 포인터 불린 P=Q

<> 부등식 포인터 불린 P <> Q

^ 연산은 역 참조 포인터입니다. ^연산의 피연산자는 일반 포인터를 제외하고 모든 유형의 포인터가 될

수 있고 역참조 전에 타입캐스트 되어야 합니다.

P 와 Q가 같은 주소를 포인트 하는 경우에만 P = Q 는 참(True)입니다; 그렇지 않다면, P <> Q 는

참(True)입니다.

+ 와 - 연산자는 문자 포인터의 오프셋을 증가하고 감소할 수 있습니다. 또한 두 문자 포인터의

오프셋 사이의 차이를 계산하기 위해 – 연산자를 사용할 수 있습니다. 다음은 적용되는 규칙입니다:

I 는 정수이고 P는 문자 포인터라면, P + I는 P에 주어진 주소에 I를 더합니다; 즉 P 뒤에 I 문자

주소에 대한 포인터를 반환합니다. (I + P 표현식은 P + I와 동일합니다.)

P – I는 P에 주어진 주소에서 I를 뺍니다; 즉 P 전에 I 문자 주소에 대한 포인터를 반환합니다.

PAnsiChar 포인터에서는 true입니다; PWideChar 포인터 경우 P + I는 SizeOf(WideChar)를 P에

더합니다.

P 와 Q 모두 문자 포인터라면, P - Q 는 P (더 높은 주소)에 주어진 주소와 Q (더 낮은 주소)에

주어진 주소 사이의 차이를 계산합니다; 즉, P와 Q 사이에 문자의 수를 나타내는 정수를

반환합니다. P + Q는 정의 되어 있지 않습니다.

Page 18: 프로그래밍 언어 기초(델파이,C++)

18

집합 연산자

다음 연산자는 피연산자로 집합을 사용합니다.

연산자 연산 피연산자 타입 결과 타입 예제

+ 합집합 set set Set1 + Set2

- 차집합 set set S - T

* 교집합 set set S * T

<= 작거나 같다 set Boolean Q <= MySet

>= 크거나 같다 set Boolean S1 >= S2

= 같다 set Boolean S2 = MySet

<> 같지 않다 set Boolean MySet <> S1

in 멤버에 속한다 ordinal, set Boolean A in Set1

다음 규칙은 +, -, 와 *에 적용됩니다:

O는 X 또는 Y (또는 둘 다)에 속하는 경우에만 순서를 나타내는 O는 X + Y에 속합니다. O 가

X에는 속하지만 Y에는 속하지 않는 경우에만 O는 X – Y에 속합니다. O가 X 와 Y에 모두 속하는

경우에만 O 는 X * Y에 속합니다.

결과 집합에서 A는 가장 작은 서수 값이고 B 는 가장 큰 값인 곳에서 a +, -, or * 연산의

결과는 A..B의 집합 유형입니다.

다음 규칙은 <=, >=, =, <>, 및 in에 적용됩니다:

X의 각 멤버가 Y의 멤버인 경우에만 X <= Y는 참(True)입니다; Z >= W는 W <= Z와 같습니다.

U 와 V 가 정확히 같은 멤버를 가지고 있는 경우에만 U= V 는 참(True)입니다; 그렇지 않으면,

U <> V 는 참입니다. 순서를 나타내는 있는 O 와 집합 S인 경우, O가 S의 멤버인 경우에만 O in

S 는 참(True)입니다.

관계 연산자

관계 연산자는 두 피연산자를 비교하기 위해 사용됩니다. 연산자 =, <>, <=, 및 >= 또한 집합에

적용됩니다.

연산자/연산/피연산자 유형/결과 유형/예

= 같다 클래스, 클래스 참조, 인터페이스, 문자열, 패킹 문자열 Boolean I

= Max

<> 같지 않다 클래스 참조, 인터페이스, 문자열, 패킹 문자열 Boolean

X <> Y

< 작다 문자열, 패킹 문자열 PCharBoolean

X<Y

> 크다 문자열, 패킹 문자열 PCharBoolean

Len > 0

<= 작거나 같음 문자열, 패킹 문자열 PCharBoolean

Cnt <= I

>= 크거나 같음 문자열, 패킹 문자열 PCharBoolean I

Page 19: 프로그래밍 언어 기초(델파이,C++)

19

>= 1

가장 단순한 유형에 대한, 비교는 간단합니다. 예를 들면, I = J 는 I 와 J 가 같은 값을 갖는 경우에만

참(True)이고 같은 값이 아닌 경우는 I <> J 는 참(True)입니다. 다음 규칙을 관계 연산자에 적용합니다:

피연산자는 실수와 정수를 비교할 수 있다는 점을 제외하고, 호환 형식 이어야 합니다.

문자열은 문자열을 구성하는 문자를 구성하는 순서 값에 따라 비교됩니다. 문자 타입은

길이가 1인 문자열로 간주합니다.

두 패킷 문자열은 비교될 컴포넌트의 같은 수를 가지고 있어야 합니다. N 컴포넌트의 패킷

문자열이 문자열로 비교할 때 패킷 문자열은 길이 n의 문자열로 처리됩니다.

두 개의 포인터가 같은 문자 배열 안을 포인트 한다면 PAnsiChar (와 PWideChar) 피 연산자

만을 비교하기 위해 연산자 <, >, <=, 및 >=를 사용합니다.

연산자 = 와 <> 는 클래스와 클래스-참조 유형을 피연산자로 사용할 수 있습니다. 클래스

타입의 피연산자를 사용하여, = 와 <> 는 포인터에 적용되는 규칙에 따라 평가됩니다. 클래스

C 와 D 가 같은 오브젝트 인스턴스를 포인트 하는 경우에만: C = D 는 참(True)입니다, 그렇지

않으면 C <> D 는 참(True) 입니다. 클래스-참조 타입의 피연산자를 사용하면, C 와 D가 같은

클래스를 표시하는 경우에만 C = D는 참(True)입니다, 그렇지 않으면 C <> D 는 참(True)입니다.

클래스 안에 저장된 데이터는 비교하지 않습니다. 클래스에 대한 더 자세한 내용은 “클래스와

오브젝트”를 보십시오.

@ 연산자

@ 연산자는 변수의 주소 또는 함수, 프로시저, 및 메소드의 주소를 반환합니다; 즉, @는 피연산자에

대한 포인터를 생성합니다. 포인터에 대한 자세한 내용은 데이터 타입, 변수 및 상수에서 "포인터와

포인터 타입"을 참조하십시오. 다음 규칙들은 @에 적용됩니다:

X가 변수 인 경우 @ X는 X의 주소를 반환합니다. (X가 프로시저 변수 인 경우 특별한 규칙이

적용됩니다, 데이터 타입, 변수 및 상수에서 "구문과 표현식에서 프로시저 타입"을

참조하십시오). 기본 {$ T} 컴파일러 지시자가 유효한 경우라면 @ X의 유형은 포인터입니다.

{$T+} 문장에서, T는 X 타입인 곳에서 @X는 ^T 유형입니다(이 차이는, 할당의 호환성을 위해

중요합니다, 할당 호환성을 참조하십시오).

F가 루틴이라면(함수 또는 프로시저), @F는 F의 엔트리 포인트를 반환합니다. @F의 타입은

항상 포인터입니다.

@가 클래스에 정의 된 메소드에 적용될 때, 메소드 식별자는 클래스 이름으로 접근해야

합니다. 예를 들면, @TMyClass.DoSomething 는 TMyClass 클래스의 DoSomething 메소드를

포인트 합니다.

클래스와 메소드에 대한 자세한 정보는 클래스와 개체를 참조하십시오.

참고: @연산자를 사용하는 경우, 주소를 컴파일 시점에 알 수 없고 런타임에 추출 할 수 없기

때문에 인터페이스 메소드의 주소를 구할 수 없습니다.

연산자 우선순위

복합 표현식에서 우선 순위 규칙은 연산이 수행되는 순서를 결정합니다.

Page 20: 프로그래밍 언어 기초(델파이,C++)

20

연산자 우선 순위

@, not 첫 번째(가장 높은 순위)

*,/,div,mod,and,shl,shr,as 두 번째

+,-,or,xor 세 번째

=,<>,<,>,<=,>=,in,is 네 번째(가장 낮은 순위)

Page 21: 프로그래밍 언어 기초(델파이,C++)

21

파이어몽키 어플리케이션의 프로그램 구조 File > New 메뉴에서 “FireMonkey HD Application – Delphi”, “FireMonkey 3D Application – Delphi”, “FireMonkey

HD Application – C++Builder” 또는 “FireMonkey 3D Application –C++Builder”를 클릭하여 파이어몽키를

사용한 새로운 윈도우와 맥 어플리케이션을 작성합니다. 선택을 한 후, 델파이 또는 C++ 프로젝트

파일(.dpr 또는 .cpp), 메인 폼 파일(.fmx)와 소스 코드 유니트(델파이의 .pas와 C++의 .cpp) 그리고 헤더

파일(C++ 프로젝트의 경우 .h)등이 생성됩니다.

예제 “파이어몽키 HD 어플리케이션 – 델파이” 프로젝트 콘텐트

시작 프로젝트를 선택한 후 아래 프로젝트 매니저 보기에서 내용을 찾을 수 있습니다.

메인 프로그램 소스 코드 – Project1.dpr

메인 프로그램 소스 파일은 다음 구문들을 포함합니다(프로젝트 매니저의 Project1.exe 노드에서 오른쪽

마우스 클릭하여 컨텍스트 메뉴에서 “View Source”를 선택하거나 또는 Project1.exe 노드가 선택되었을

때 Control-V를 누른다):

program Project1; uses

FMX.Forms, Unit1 in 'Unit1.pas' {Form1};

{$R *.res} begin

Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run;

end.

Page 22: 프로그래밍 언어 기초(델파이,C++)

22

예약어 “program”은 여러분의 어플리케이션이 프로그램임을 표시합니다.“uses” 절은 프로그램을 컴파일

하기 위해 필요한 따로따로 컴파일 할 수 있는 모든 유니트의 목록들을 포함합니다(잠시 후에

유니트에 대한 자세한 내용을 다루겠습니다). “{$R *.res}” 컴파일러 지시어는 델파이 컴파일러가 모든

어플리케이션에서 필요한 리소스 파일(비트맵, 아이콘, 커서, 기타 등등)들을 포함하도록 합니다. “begin”

와 “end.” 구문 사이에 프로그램을 시작했을 때 실행되는 문장들을 정의합니다. 파이어몽키

어플리케이션 안에 메인 폼에 대한 “Application.CreateForm” 문이 하나는 있다는 것에

주목하십시오(어플리케이션에 여러 개의 폼이 있다면 하나 이상이 있을 수 있습니다).

Application.Run 문은 어플리케이션을 시작하고 어플리케이션을 닫을 때(또는 종료)까지 실행의 나머지

부분을 남겨두고 폼과 모든 이벤트 핸들러를 제어합니다.

델파이 어플리케이션 메인 폼 – 폼 보기와 텍스트 보기

파이어몽키 어플리케이션의 메인 폼은 폼 자신을 제외한 다른 컴포넌트 없이 빈 폼으로 시작합니다.

폼 디자이너에서 볼 수 있고 코드 에디터에서 텍스트 모드로도 볼 수 있습니다.

Page 23: 프로그래밍 언어 기초(델파이,C++)

23

델파이 어플리케이션 메인 폼 – 유니트 소스 코드

어플리케이션 메인 폼과 연관된 파일은 unit1.pas 소스 코드 파일입니다.

unit Unit1; interface uses

System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs;

type TForm1 = class(TForm) private

{ Private declarations } public

{ Public declarations } end;

var Form1: TForm1;

implementation {$R *.fmx} end.

예약어 unit는 따로 컴파일 되는 메인 폼의 소스 코드의 시작을 정의합니다(메인 프로그램 소스 코드와

별도로). 델파이 유니트는 Interface 섹션과 Implementation 섹션: 두 개의 메인 섹션으로 나눕니다.

Interface 섹션은 유니트에 대한 모든 타입, 상수 및 변수 선언을 포함합니다. Implementation 섹션은

함수, 프로시저,

메소드 및 이벤트 핸들러 어플리케이션 로직을 포함합니다.

Unit1의 Interface 섹션은 유니트를 컴파일 하기 위해 필요한 모든 파이어몽키 및 런-타임 라이브러리

유니트의 목록을 포함하는 uses 절을 포함합니다. Interface 섹션은 또한 TForm 부모 클래스로부터 계승

받은 TForm1 클래스 선언을 포함합니다. 델파이 클래스는 private, public 및 protected 섹션을 가지고

있습니다.

폼 디자이너에서 또는 코드 에디터에서 컴포넌트를 추가하는 경우, 컴포넌트의 선언은 TForm1

클래스에 추가될 것입니다.

Interface 안에 var 섹션은 폼 변수 Form1을 포함하는 모든 전역 변수를 선언합니다.

어플리케이션 로직에서 필요에 따라 이 섹션에 다른 전역 변수를 정의합니다.

처음에 시작 프로젝트를 작성할 때 Implementation 섹션은 어플리케이션 실행에 이 유니트에 대한

파이어몽키 폼 파일을 링크 할 수 있게 컴파일러에게 알려주는 {$ R *. fmx} 지시어만 포함합니다. “end.”

문은 컴파일러에게 유니트의 끝이라는 것을 알려줍니다.

컴포넌트의 이벤트 핸들러를 폼에 추가할 때, 이벤트 메소드가 Interface 섹션의 TForm1 클래스 선언

안에 나타나는 것을 보실 수 있습니다. 메소드 구현의 기본 골격 또한 Implementation 섹션에

표시됩니다.

Page 24: 프로그래밍 언어 기초(델파이,C++)

24

예제 “파이어몽키 HD 어플리케이션 – C++빌더” 프로젝트 콘텐트

C++ 프로젝트 메인 소스 코드 – Project6.cpp

메인 프로그램 소스는 다음 구문들을 포함합니다(프로젝트 매니저의 Project6.exe 노드에서 오른쪽

마우스 클릭하여 컴텍스트 메뉴에서 “View Source”를 선택하거나 또는 Project6.exe 노드가 선택되었을

때 Control-V를 누른다): //--------------------------------------------------------- #include <fmx.h> #pragma hdrstop #include <tchar.h> //--------------------------------------------------------- USEFORM("Unit1.cpp", Form1); //--------------------------------------------------------- extern "C" int FMXmain() { try { Application->Initialize(); Application->MainFormOnTaskBar = true; Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception("");

Page 25: 프로그래밍 언어 기초(델파이,C++)

25

} catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //---------------------------------------------------------

메인 프로그램 소스 코드에서 다음 라인들을 보실 수 있습니다: #include

“#include <fmx.h>”는 컴파일러에 코드를 컴파일 하기 위해 필요한 파이어몽키 헤더 파일 선언을

가져오라고 알려줍니다. C 와 C++ 헤더 파일들은 보통 구현 코드에서 사용되는 타입, 클래스, 상수 밑

다른 아이템들의 선언을 포함합니다.

#include <header_name> #include "header_name" #include <macro_definition>

#include 지시어는 이름이 주어진 다른 파일들을(파일로 알려진, 헤더 파일 또는 헤더) 소스 코드

안으로 끌어 옵니다. 이 문법은 세 가지 버전이 있습니다:

첫 번째와 두 번째 버전은 매크로 확장이 시도되지 않는다는 것을 의미합니다; 다시 말해서,

header_name 은 매크로 식별자로 절대 검사되지 않습니다. header_name은 확장자(헤더 파일에

대해 전통적으로. H) 및 옵션 경로 이름과 경로 구분 기호가 있는 유효한 파일 이름이어야

합니다.

세 번째 버전은 #include 다음에 “<”첫 번째 공백이 아닌 문자로 표시한다면, 그것은

<header_name> 또는 " header_name "형식 중 하나로 유효한 구분 헤더 이름으로 매크로

식별자를 확장하는 매크로 정의가 있다고 가정합니다.

선행 처리기가 #include 라인을 제거하고 개념적으로 소스 코드의 그 지점에서 include 파일의 전체

텍스트로 대치합니다. 소스 코드 자체는 변경되지 않습니다, 그러나 컴파일러는 확대 텍스트를 봅니다.

#include 위치에 따라 포함된 파일 안의 모든 식별자의 범위와 기간에 영향을 줄 수 있습니다.

헤더_이름 안에 명시적 경로를 배치하는 경우라면, 디렉터리도 검색됩니다.

<header_name> 와 "header_name" 형식간의 차이점은 include 파일을 찾기 위해 채택하는 검색

알고리즘에 있습니다:

인용 형식 - "header_name" 버전은 사용자-제공하는 include 파일을 지정합니다; 파일들은 다음 순서로

검색됩니다:

#include 문을 포함하는 파일과 같은 디렉터리.

그 파일을 포함하는(#include) 파일들의 디렉터리들.

현재 디렉터리.

Include 파일 검색 경로(-I) 옵션에 따라 지정된 경로.

Page 26: 프로그래밍 언어 기초(델파이,C++)

26

<>-괄호 형식 - <header_name> 버전은 기본 include 파일을 지정합니다. 검색이 include 파일 검색 경로(-

I) 옵션에 의해 정의 된 순서대로 include 디렉터리에서 각각의 연속으로 이루어집니다. 파일이 디폴트

모든 디렉터리에 없다면, 오류 메시지가 발생합니다.

#pragma

# pragma를 사용하여 또한 # pragma를 지원하는 다른 컴파일러를 방해하지 않고, 소스 코드에서

컴파일러 지시어를 설정할 수 있습니다. 컴파일러가 지시어-이름을 인식하지 못한다면 오류 또는 경고

메시지 없이 # pragma 지시어를 무시합니다.

"# pragma hdrstop의"라인은 “미리 컴파일 되는 헤더"를 만드는 것 중지하라고 컴파일러에게 알려줍니다.

미리 컴파일 되는 헤더 작성 및 사용은 두 가지 주요 가지 작업을 수행합니다.

C++ 파일의 컴파일 시간을 줄일 수 있습니다

컴파일 처리 해야 하는 코드 라인 수를 줄일 수 있습니다(일부의 경우, 크기의 여려 명령에 의해)

엠바카데로 DocWiki에서 미리 컴파일 된 헤더에 관한 더 자세한 내용을 보실 수 있습니다.

http://docwiki.embarcadero.com/RADStudio/en/Precompiled_Headers_Overview USEFORM("Unit1.cpp", Form1)

USEFORM는 폼 이름("Form1에")와 폼과 관련된 소스 코드 유니트("Unit1.cpp")를 나열하는 C + +

매크로입니다.

extern "C" int FMXmain()

extern "C"는 C + + 프로그램에서 엉망이 되는 프로그램의 함수 이름을 방지하는 데 사용됩니다. 이

라인은 반환 유형이 "int" 또는 integer인 파이어몽키 메인 프로그램 함수의 이름을 정의합니다.

try, throw, catch

C++ 예외 처리는 3개의 키워드를 사용해야 합니다: try, throw, 및 catch. 키워드 throw 는 예외를

생성하는데 사용됩니다. try 블록은 예외를 발생하는 구문을 포함하고 하나 이상의 catch 문이

따라옵니다. 각 catch 문은 특정 예외를 처리합니다.

try 블록은 예외를 처리하고자 하는 하나의 문 또는 구문들을 포함합니다. 프로그램은 throw 문을

실행하여 예외를 발생합니다. throw 문은 일반적으로 함수 안에서 발생합니다. try 블록은 catch에 위해

지정된 핸들러에 의해 즉시 따라 오는 try에 의해 지정됩니다. try 블록은 프로그램이 실행하는 것처럼

제어의 흐름을 지정하는 구문입니다. 예외가 try 블록에서 발생되는 경우, 프로그램 제어는 적절한

예외 처리 핸들러로 전환됩니다.

핸들러는 예외를 처리 할 수 있도록 설계된 코드 블록입니다. C++ 언어는 try 블록 후 바로 하나

이상의 핸들러가 필요합니다. 프로그램은 프로그램이 생성 할 수 있는 각 예외에 대한 핸들러를

포함해야 합니다. throw 문은 다양한 유형의 오브젝트를 발생시킬 수 있습니다. C + + 개체는 일반적으로

값, 참조, 또는 포인터에 의해 발생 될 수 있습니다. 추가적으로, throw 문은 정수 또는 포인터와 같은

원시 타입을 throw 할 수 있습니다.

Page 27: 프로그래밍 언어 기초(델파이,C++)

27

catch 문은 몇 가지 형식이 있습니다. 개체는 값, 참조, 또는 포인터에 의해 체크 할 수 있습니다. 또한,

const 수식은 catch 매개변수에 사용할 수 있습니다. 블록이 여러 가지 다른 종류의 예외를 잡을 수

있도록, 단일 try 블록에 대한 여러 catch 문들이 있을 수 있으며, 발생할 수 있는 각 예외에 대한

catch 문이 있어야 합니다.

단일 try 문에 대한 여러 개의 catch 문을 사용하여, 각 유형 예외에 대한 핸들러를 가질 수 있습니다.

예외 개체가 어떤 기본 클래스에서 파생했다면, 일부 파생된 예외에 대한 특화된 핸들러를 추가

할뿐만 아니라, 기본 클래스에 대한 일반적인 처리 핸들러를 포함 할 수 있습니다. 예외가 발생했을 때

이를 검색하고 싶은 순서대로 캐치 문을 배치하여 이 작업을 수행합니다. try 블록을 수행하면서

발생하는 모든 예외를 잡기 위한 핸들러를 원한다면, catch (...) 특별한 형식을 사용하십시오. 이를 모든

예외를 위해 호출 되야 하는 예외 처리 시스템이라고 합니다.

Application->

어플리케이션 개체를 사용하는 메인 프로그램에서 여러 라인을 보실 수 있는데 어플리케이션을

초기화하기 위한, 메인 폼을(메인 프로그램에서 여러 개의 폼을 가질 수 있거나 또는 코드에서 즉시

폼을 만들 수 있습니다)생성하기 위한, 어플리케이션을 "실행"하기 위한 어플리케이션의 메소드를

호출합니다. 파이어몽키는 일부 사용자 이벤트(File |Exit 메뉴 항목과 같은)로 프로그램을 종료할 때까지

또는 런타임 예외가 발생할 때까지 계속 실행합니다.

return 0

return 문은 메인 프로그램(또는 현재 함수)에서 다시 호출 루틴(이 경우, 다시 운영 체제) 으로

빠져나가는데 사용되는데 선택적으로 값을 반환합니다. 제로 값은 프로그램의 성공적인 종료를

나타냅니다. 다른 값을 반환할 수 있습니다.

C++ 어플리케이션 메인 폼 – 폼 보기와 텍스트 보기

어플리케이션의 파이어몽키 메인 폼은 폼 자신을 제외한 다른 컴포넌트 없이 빈 폼으로 시작합니다.

폼 디자이너에서 볼 수 있고 코드 에디터에서 텍스트 모드로도 볼 수 있습니다.

Page 28: 프로그래밍 언어 기초(델파이,C++)

28

폼 디자이너에서 시각적 및 비-시각적 컴포넌트들을 어플리케이션에 추가할 수 있고 폼에 나타날

것입니다. 오브젝트 인스펙터를 사용하여 폼과 폼이 포함하고 있는 컴포넌트들을 사용자 지정합니다.

C++ 어플리케이션 메인 폼 – 유니트 소스 코드 및 헤더 파일

메인 폼과 관련된 파일은 unit1.cpp 소스 코드입니다. //--------------------------------------------------------- #include <fmx.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.fmx" TForm1 *Form1; //--------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------

C++에서 컴파일 될 코드를 소스 코드 안에 넣습니다. 선언은 헤더 파일(.h)안에 배치합니다.

//--------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------- #include <System.Classes.hpp> #include <FMX.Controls.hpp> #include <FMX.Forms.hpp> //--------------------------------------------------------- class TForm1 : public TForm { __published:// IDE-managed Components private:// User declarations public:// User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------- #endif

Page 29: 프로그래밍 언어 기초(델파이,C++)

29

폼 사용하기

IDE에서 폼을 작성할 때, 델파이와 C++빌더는 어플리케이션의 메인 엔트리 포인트에서 코드를

포함하여 자동으로 폼을 메모리에 생성합니다. 일반적으로, 이것은 필요한 동작이고 변경할 필요가

없습니다. 즉, 메인 창은 프로그램의 실행 기간을 동안 지속되므로 메인 폼을 작성할 때 기본 동작을

변경하지 않을 것 입니다.

그러나 프로그램 실행 동안 프로그램의 모든 폼이 메모리에 있기를 원하지 않을 것 입니다. 즉,

어플리케이션의 폼이 한꺼번에 메모리에 할당돼 있기를 원하지 않는다면, 폼을 표시하고 싶을 때 폼을

동적으로 생성할 수 있습니다.

폼은 모달(modal) 또는 모드리스(modeless) 형식이어야 입니다. 모달 폼은 사용자가 다른 폼으로

전환하기 전에 닫혀야 하는 폼입니다(예를 들어, 사용자가 입력해야 하는 대화 상자). 모드리스 폼은

다른 창에 의해 가려질 때까지 또는 사용자가 닫거나 최소화할 때까지 표시되는 창입니다.

자동-생성 폼과 동적으로 폼을 생성하기 위해 어플리케이션 코드에서 완벽하게 제어 할 수 있습니다.

엠바카데로 DocWiki에서 폼 사용, 작성 및 제어에 대한 몇 개의 기사를 보실 수 있습니다:

메모리에 있는 폼 제어하기 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Controlling_When_Forms_Reside_in_Memory

자동-생성 폼 띄우기 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Displaying_an_Auto-created_Form

폼 동적으로 생성하기 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Creating_Forms_Dynamically

모드리스 폼 작성하기 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Creating_Modeless_Forms_Such_as_Windows

로컬 변수를 사용하여 폼 인스턴스 생성 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Creating_a_Form_Instance_Using_a_Local_Variable

폼에서 데이터 가져오기 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Retrieving_Data_from_Forms

모달 폼에서 데이터 가져오기 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Retrieving_Data_from_Modal_Forms

모드리스 폼에서 데이터 가져오기 - http://docwiki.embarcadero.com/RADStudio/XE2/en/Retrieving_Data_from_Modeless_Forms

FMX.Forms.TForm

TForm은 표준 파이어몽키 어플리케이션 창(폼)을 나타냅니다. 설계 시점에 폼 디자이너에서 폼을

작성할 때, TForm의 후손으로 구현됩니다. 폼은 프로그램의 메인 창, 대화상자 또는 각종 설정 환경

관련 창들을 나타낼 수 있습니다. 폼은 TButton, TCheckBox, TComboBox 오브젝트과 같은 모든

파이어몽키 오브젝트 및 기타를 포함합니다.

Page 30: 프로그래밍 언어 기초(델파이,C++)

30

델파이 및 C++ 예제 프로그램 중 하나 살펴보기 – ControlsDemo

프로그래밍 언어 및 파이어몽키를 사용하여 윈도우와 맥 어플리케이션 구축 방법에 대해 배우기 위한

좋은 방법은 샘플 프로젝트와 소스 코드를 보는 것 입니다.

다음에서 델파이와 C++용 “Controls Demo” 을 보실 수 있습니다.

C:\Users\Public\Documents\RAD Studio\9.0\Samples\FireMonkey\ControlsDemo C:\Users\Public\Documents\RAD Studio\9.0\Samples\CPP\FireMonkey\ControlsDemo

소스 코드를 직접 보시거나 4장 동영상 비디오를 볼 수 있습니다.

오브젝트 설계(UML 클래스 다이어그램을 사용하여)

프로그래밍 언어 및 파이어몽키를 사용하여 윈도우와 맥 어플리케이션을 구축 방법에 대해 배울 수

있는 또 다른 좋은 방법은 모델보기를 사용하여 프로그램에서 사용하는 클래스의 정의를 살펴보는

것입니다. 또한 모델보기를 사용하여 클래스를 작성하고 수정할 수 있습니다.

모델보기는 모델링 프로젝트의 논리적 구조와 계층 구조의 모델 트리를 보여줍니다. 모델보기를

열려면, View>Model View 메뉴 명령을 사용하거나 프로젝트 매니저 창 하단에 있는 '모델보기"탭을

클릭합니다. 처음으로 모델보기를 선택한 경우 다음과 같은 대화 상자가 표시됩니다:

“Yes”를 클릭하고 IDE는 모델 트리를 작성하기 위해 프로젝트 소스와 헤더 파일을 처리합니다. 소스

코드 중 아무것도 손상되지 않을 것입니다. 모델링 기술은 클래스에 대한 정보를 포함하는 XML

파일을 만듭니다. 모델 트리는 모델링 프로젝트의 모델의 논리적 표현을 제공 합니다. 모델 트리가

프로젝트에서 모델링 요소의 계층 구조를 보여줍니다: 루트 노드는 프로젝트 노드 이고 네임

스페이스(패키지) 및 다이어그램 노드가 다음에 오고, 다이어그램에 표시된 다른 모델링 요소의 노드

입니다. 모델보기 트리에서 노드를 더블 클릭하여 특정 클래스, 인터페이스, 또는 멤버의 코드

에디터를 엽니다. 참고: 네임 스페이스가 여러 소스 파일을 가질 수 있기 때문에 모델보기 트리에서

네임 스페이스 노드를 더블 클릭해도 특정 소스 코드 파일을 열 수 없습니다.

모델보기는 모델 트리 노드를 오른쪽 마우스 버튼 클릭하면 표시할 수 있는 컨텍스트 메뉴를

제공합니다.

Page 31: 프로그래밍 언어 기초(델파이,C++)

31

컨텍스트 메뉴에서 사용할 수 있는 명령은 선택된 모델링 요소에 따라 달라집니다. 컨텍스트 메뉴를

사용하면 모델보기에서 모델에 직접 새로운 요소를 추가 할 수 있습니다. 컨텍스트 메뉴에서 제공하는

작업의 일부입니다.

다이어그램보기(델파이, C + + 경우 C + + 클래스 익스플로러를 사용합니다)에서 UML

다이어그램 열기

프로젝트에 새로운 UML 다이어그램(델파이) 추가(또는 삭제)

UML 다이어그램(델파이)위에 모델링 요소 추가(또는 삭제)

모델링 요소 복사, 자르기 및 붙여넣기

하이퍼링크 작성

제약조건 추가

코드 에디터에서 선택된 모델링 요소의 선언으로 이동

다이어그램 보기에서 해당 UML 다이어그램 위에서 모델보기에서 선택한 모델링 요소 찾기

사용자 속성 추가.

문서 생성

그 외 작업

RAD Studio의 모델링은 코드 편집기와 다이어그램 보기에서 클래스를 변경할 수 있습니다(모델이 바로

소스 코드에 보이기 때문에, 모두 동기화해서 보관됩니다).

Page 32: 프로그래밍 언어 기초(델파이,C++)

32

윈도우와 맥 플랫폼 특정 코드 처리

윈도우에서 특정 처리를 하고 맥에서는 다른 일을 해야 하는 코드를 처리하는 방법에는 여러 가지가

있습니다. 두 가지 일반적인 방법은 1) 조건부 컴파일(컴파일 시간)과 2) TOSVersion 기록을 사용하는

것입니다.

조건부 컴파일

조건부 컴파일은 상수의 존재와 평가, 컴파일러 전환 상태 및 조건 기호의 정의에 기초를 두고

있습니다. 조건부 기호는 불린 변수처럼 작동합니다: 그것들은 정의되거나(true) 또는 정의 되지

않습니다(false). 모든 유효한 조건부 기호는 정의 될 때까지 거짓(false)으로 간주됩니다.

델파이의 경우, {$DEFINE} 지시어는 지정된 기호를 true로 설정하고 {$UNDEF} 지시어는 false로

설정합니다. 또한 커맨드-라인 컴파일러와 함께 -D 스위치를 사용하거나 Project > Options > Delphi

Compiler 페이지에서 조건부 정의 기호 필드에 기호를 추가하여 조건부 기호를 정의 할 수

있습니다. 델파이의 조건부 지시어 {$IFDEF}, {$IFNDEF}, {$IF}, {$ELSEIF}, {$ELSE}, {$ENDIF}, 및 {$IFEND}는

조건부 기호의 상태에 따라 코드를 컴파일 하거나 표시하지 않게 할 수 있게 해줍니다. {$IF} 와

{$ELSEIF}는 선언된 델파이 식별자에서 조건부 컴파일을 기본으로 할 수 있도록 허용합니다. {$ IFOPT}는

지정된 컴파일러 스위치가 활성화되어 있는지 여부에 따라 컴파일 하거나 코드가 표시되지 않습니다.

델파이 미리 정의 된 조건들은 아래 엠바카데로 DocWiki에 나열되어 있습니다:

http://docwiki.embarcadero.com/RADStudio/XE2/en/Conditional_compilation_(Delphi)

C++의 경우, 컴파일러는 빈 줄과 해당 소스 코드 라인을 교체하여 조건부 컴파일을 지원합니다.

지시어의 결과로 무시되는 라인은 따라서 컴파일 할 수 없습니다. 모든 조건부 컴파일 지시어는 소스

에서 완료해야 하고 또는 시작되는 파일에 포함해야 합니다. C + +의 조건 지시어는 #if, #ifdef, #ifndef,

#elif, #else 및 # endif가 있습니다. #if 정의 식별자 표현 대신 #ifdef 와 #ifndef 지시어를 사용할 수

있습니다. 그러나, #if 정의 식별자 표현이 선호됩니다. # ifdef와 # ifndef 지시어는 언어의 이전

버전에서의 호환성만을 위해 제공됩니다. #ifdef 와 #ifndef 조건부 지시어는 식별자가 현재 정의되어

있는지 아닌지를 테스트하기 위해 사용합니다. 즉, 이전의 #define 명령어는 그 식별자에 대해

처리되었는지 강제로 그대로 있는지를 체크합니다. 엠바카데로 DocWiki에서 더 자세한 정보를 보실 수

있습니다. http://docwiki.embarcadero.com/RADStudio/en/If,_elif,_else,_And_endif

델파이와 C++ 파이어몽키 어플리케이션에서, 윈도우와 맥 용 조건 정의 변수 설정이 있습니다.

파이어몽키 델파이 소스 코드의 예입니다.

{$IFDEF MACOS} or ((Button = TMouseButton.mbLeft) and (Shift = [ssLeft, ssCtrl])) {$ENDIF} Syntax for C++ conditional compilation: #if constant-expression-1 <section-1> <#elif constant-expression-2 newline section-2>

Page 33: 프로그래밍 언어 기초(델파이,C++)

33

. . . <#elif constant-expression-n newline section-n> <#else <newline> final-section> #endif

TOSVersion

RAD 스튜디오는 또한 런타임 라이브러리의 System.SysUtils 유니트에 정의되어 있는 "TOSVersion"라는

런타임 구조를 정의합니다. TOSVersion는 운영 체제에 대한 정보, OS 버전 정보와 프로세서를

포함합니다. 런타임에 특정 플랫폼 코드를 실행하는 프로그램에서 TOSVersion를 사용할 수 있습니다:

플랫폼(윈도우 또는 맥 OS X): pfWindows, pfMacOS

구조(Intel x86 or Intel x64): arIntelX86, arIntelX64

엠바카데로 DocWiki에서 TOSVersion 정의에 대한 내용을 보실 수 있습니다. http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.TOSVersion

TOSVersion는 사용할 수 있는 두 개의 메소드를 가지고 있습니다:

Check - 현재 운영 체제의 버전이 지정 값과 같은지 또는 그 이상인지를 반환합니다.

ToString - TOSVersion의 문자열 설명을 반환합니다.

Page 34: 프로그래밍 언어 기초(델파이,C++)

34

요약, 해야 할 일, 리소스

4장에서, 파이어몽키 어플리케이션의 소스코드와 프로젝트 안에 무엇이 있는지 살펴보았습니다. 개체

지향 프로그래밍, 클래스, 오브젝트 속성, 메소드, 이벤트 등을 검토 했습니다. 또한 기본 언어 문법의

일부와 에디터에서뿐만 아니라 모델보기에서 소스 코드를 읽는 방법을 살펴보았습니다. 델파이와 C++

프로그래밍 언어를 짧은 시간 안에 배우는 것은 불가능합니다. 다행히, 각 프로그래밍 언어를

활용하는데 도움을 주는 많은 자습서, 비디오, 도서 및 기사가 있습니다.

5장에서, 윈도우 및 맥 파이어몽키 HD 어플리케이션을 생성합니다, 사용자 인터페이스 (UI)와

컴포넌트들을 사용하여 훌륭한 모습의 어플리케이션을 구축 할 수 있습니다.

한편, 4장에서 배운 것을 발전시키고 5장을 준비하기 위해 몇 가지 해야 할 일, 읽어야 할 기사와

보아야 할 동영상이 있습니다.

해야 할일

아래의 추가 리소스 링크를 사용하여 델파이와 C + + 언어에 대해 자세히 알아보십시오.

자신의 델파이 또는 C + + 파이어몽키 프로젝트를 만듭니다. 프로젝트 마법사에서 생성 된

소스 코드를 살펴보십시오.

RAD 스튜디오에 포함되어 있는 델파이와 C + + 프로젝트의 예제 일부를 로드하고

읽어보십시오. C:\Users\Public\Documents\RAD Studio\9.0\Samples 에서 보실 수 있습니다.

우리는 또한 소스 포지에서 최신 버전과 새로운 샘플을 가지고 있습니다.

http://radstudiodemos.svn.sourceforge.net/viewvc/radstudiodemos/branches/RadStudio_XE2/

추천 자료 – 책과 전자서적

다음 책 및 전자 서적(상용 및 무료)은 델파이 및 C + + 개발자를 위한 권장 도서입니다.

델파이

Bob Swart가 쓴 판매용 델파이 XE2 책과 전자서적: 이 책은 밥의 실제 경험을 통해 수백 페이지를

제공하며 학습하여 여러분의 시간과 노력을 줄여줍니다. 밥의 책은 PDF 형식과 출력하기 유용한

양식으로 Lulu.com 구입할 수 있습니다 -http://www.lulu.com/shop/search.ep?contributorId=300146).

델파이 XE2 개발 기초(145 페이지) http://www.drbob42.com/courseware/51.htm

델파이 XE2 iOS 개발(150 페이지) http://www.drbob42.com/courseware/56.htm

델파이 XE2 DataSnap 개발(276 페이지) http://www.drbob42.com/courseware/53.htm

델파이 XE2 XML, SOAP 및 웹 서비스(152 페이지) http://www.drbob42.com/courseware/52.htm

마르코 칸투의 델파이 핸드북: 마르코는 몇 년 동안 델파이에 대해 책을 작성했습니다. 마르코의 책의

대부분은 아마존에서 인쇄 양식과 PDF 형식으로 사용할 수 있습니다. 여기 마르코의 핸드북, 델파이

및 파스칼 기초 책과 전자 책의 목록입니다.

Page 35: 프로그래밍 언어 기초(델파이,C++)

35

델파이 XE 핸드북 - http://www.marcocantu.com/handbooks/#dxeh

델파이 2010 핸드북 - http://www.marcocantu.com/dh2010

델파이 2009 핸드북 - http://www.marcocantu.com/dh2009/

델파이 2007 핸드북 - http://www.marcocantu.com/dh2007/

델파이 핸드북 모음집 (두 번째 에디션) 전자-서적 PDF - http://sites.fastspring.com/wintechitalia/product/delphihandbookscollection

파스칼 기초 - http://www.marcocantu.com/epascal/default.htm

C++

Thinking in C++ by Bruce Eckel (Second Edition), free eBooks Volume 1 (Bruce Eckel) and Volume 2 (Bruce Eckel and Chuck Allison) -

http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html

Thinking in C++ Solution Volume 1 Solution Guide ($12 USD, 전자 책만) - http://www.mindview.net/Books/TICPP/Solutions/

참조 자료 링크

시작하기 코스 방문 페이지 -

http://www.embarcadero.com/firemonkey/firemonkey-e-learning-series

존 레이 토마스가 쓴 “ RAD IDE 에 곧 출시될 C++ - 64비트, C++11, ARM, iOS 및 안드로이드의

미래” - http://edn.embarcadero.com/article/42275

델파이:

엠바카데로 DocWiki – 델파이 참고자료 - http://docwiki.embarcadero.com/RADStudio/en/Delphi_Reference

델파이 기본 - http://www.delphibasics.co.uk/

델파이 프로그래밍에 관하여 - http://delphi.about.com/

델파이 초보자를 위한 가이드 - http://delphi.about.com/od/beginners/a/delphicourse.htm

델파이 소개 - http://www.functionx.com/delphi/Lesson01.htm

C++:

톰 앤더슨이 쓴 C++ 빠른 소개 (29 페이지) http://www.cs.washington.edu/homes/tom/c++example/c++.pdf

MIT 오픈 교육용: C++ 소개- http://ocw.mit.edu/courses/electrical-engineering-and-computer-

science/6-096-introduction-to-c-january-iap-2011/

C++ 언어 자습서 - http://www.cplusplus.com/doc/tutorial/

Bjarne Stroustrup – C++ 프로그래밍 언어 홈 페이지 - http://www2.research.att.com/~bs/C++.html

엠바카데로 DocWiki C++ 참고자료 - http://docwiki.embarcadero.com/RADStudio/en/C%2B%2B_Reference

C++빌더 자습서 및 VCL 주제 – 약간 오래되었지만 배우기 쉬운 - http://www.functionx.com/bcb/index.htm

C++ 빌더 실용 학습 시리즈 – 시간이 좀 지났지만 여전한 고전 자습서 - http://www.yevol.com/en/bcb/

C++빌더 개발자 저널 - http://bcbjournal.org/

Page 36: 프로그래밍 언어 기초(델파이,C++)

36

프로그래밍 추상화 – 스탠포드 교수이며 스탠포드 iTuneU 후계자인 Julie Zelenski가 쓴 -

“프로그래밍 방법론” 코스. C + + 프로그래밍 언어를 사용하여 재귀, 알고리즘 분석, 데이터

추상화와 같은 고급 프로그래밍 주제를 다룹니다- http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=384232917

이 장은 “우니도우와 맥 개발의 시작을 위한 파이어몽키 코스북”의 4장 내용 전체입니다. 코스북

전체를 PDF로 무료 다운로드 받을 수 있습니다. http://tech.devgear.co.kr/13556