달력

10

« 2024/10 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 5. 25. 21:19

[13일차]파일처리 Objective-C2010. 5. 25. 21:19


4. 디렉토리 작업

NSFileManager에는 디렉토리를 다루는 메서드를 제공합니다.

 

-(NSString *)currentDirectoryPath

현재 디렉토리 경로 NSString으로 반환

 

-(BOOL)changeCurrentDirectoryPath: (NSString *)path

path로 현재 디렉토리를 변경

 

-(BOOL) copyPath:(NSString *)from toPath:to handler:handler

from으로부터 to로 디렉토리 구조를 복사

 

-(BOOL)createDirectoryAtPath: (NSString *)path attributes:(NSDictionary *) attr

path를 생성하고 attr에 속성을 저장

 

-(BOOL)fileExistsAtPath: (NSString *)path isDirectory:(BOOL *)flag

path가 디렉토리인지 여부를 flag에 저장                // 변수대입

 

-(NSArray *)directoryContentsAtPath:(NSString *)path

path의 내용을 배열로 리턴

 

-(BOOL)removeFileAtPath:(NSString *)path handler:handler

path 디렉토리를 삭제

 

-(BOOL) movePath:(NSString *)from toPath: (NSString *)to handler:handler

디렉토리 이름 변경                                  // to 존재하면 에러


5. 디렉토리 내용 열거

- (NSDirectoryEnumerator *)enumeratorAtPath:(NSString *)path
            // nextObject     allObjects : 전체를 NSArray타입으로 리턴
path
에 지정된 디렉토리내의 모든 서브 디렉토리와 파일목록을 가져 옵니다.
==> 하위디렉토리까지 전부조사

- (NSArray *)directoryContentsAtPath:(NSString *)path

path에 존재하는 파일 목록을 배열로 리턴
==> 파일명만 배열로 리턴 - 서브디렉토리 확인하지 않음

- (NSDictionary *)fileAttributesAtPath:(NSString *)path traverseLink:(BOOL)flag
path
에 지정된 파일 또는 디렉토리의 속성을 가지고 옵니다.

flag YES로 지정하면 심볼릭 링크된 파일의 원본 파일의 정보를 가져오며, NO일 경우에는 링크된 파일의 정보를 가지고 옵니다.

:
Posted by 에너지발전소

C 언어의 개요

1. C언어의 역사

C언어는 1972년 벨 연구소의 Dennis Ritchie에 의해 만들어졌습니다.

Dennis Ritchie UNIX 운영체제의 개발을 맡고 있었는데 운영체제는 그 특성상 하드웨어를 직접 제어할 수 있어야 했습니다.

또한 당시의 컴퓨터 환경이 지금과는 달라 CPU의 속도나 메모리의 용량이 충분하지 않았기 때문에 프로그램의 크기는 작아야 했고 속도는 빨라야 했습니다.

이런 모든 요구를 만족시킬 수 있는 유일한 언어는 어셈블리밖에 없었습니다.

그러나 어셈블리는 특정 기계에 종속적이며 이식성이 없기 때문에 여러 플랫폼에 사용하는 것이 목적인 UNIX와는 잘 어울리지 않았습니다.

그래서 Dennis Ritchie는 기존의 언어를 사용하지 않고 어셈블리의 강력한 기능과 고급언어의 이식성을 동시에 갖춘 새로운 언어를 직접 만들었습니다.

물론 Dennis Ritchie 혼자서 C언어를 다 만든 것은 아니며 과거 언어들의 장점을 정리해서 만든 것입니다.

C언어의 뿌리는 ALGOL언어이며 Dennis Ritchie는 동료인 켄 톰슨(Ken Thompson)이 만든 B언어를 개량하여 C언어를 만들었습니다.

C언어의 계보를 그려 보면 다음과 같습니다.

이 언어에 C라는 이름을 붙인 이유는 B보다 한 단계 더 발전했다는 의미로 B다음의 알파벳인 C를 사용한 것입니다.

C언어는 간결하면서도 강력한 프로그램을 작성하기에 적합하여 오늘날 가장 대중적인 프로그래밍 언어로 사용되고 있습니다.

차후에 C 언어는 C++ 로 발전하게 되는데 이때는 D언어라 하지 않고 C언어에서 하나 증가하는 연산자로 사용하는 C++라는 이름으로 불리게 됩니다.

이러한 시기 중간에 80년대 초에는 Brad Cox SmallTalk의 객체 지향 적인 개념과 C의 강력함을 동시에 사용하는 언어인 Objective – C를 설계하게 됩니다.

이를 기반으로 1988 NeXT Software(Steve Jobs)가 라이센스를 넘겨받아 새로운 개뱔 환경과 라이브러리를 개발합니다.

이를 다시 1996년에 애플이 이 회사를 인수하여 차세대 운영체제 개발에 이용하기로 하고 이러한 개발환경을 Cocoa라고 명명하게 됩니다.

사용법 자체는 C++와 유사합니다. (main 함수가 특정 클래스에 속하지 않음)

이 언어가 IPhone SDK의 모태가 됩니다.

C#이나 Java C++와 이 Objective-C를 개량한 객체지향언어입니다.

따라서 현재 사용되는 대부분의 언어는 C언어에 모태를 두고 있습니다.

C언어를 잘 하게 되면 다른 언어를 잘 할 수 있는 이유이며 언어를 공부할 때 C언어를 가장 먼저 공부하는 이유이기도 합니다.


 

2. C언어의 특징

① 문법이 간결하며 예약어가 적고 제공하는 연산자가 다양하기 때문에 짧은 명령으로 많은 일을 할 수 있습니다.

② 효율성이 좋아 대규모의 프로그램을 만들 수 있습니다.

제작된 프로그램의 크기가 작고 속도도 빠릅니다.

③ 운영체제 개발을 목적으로 만든 언어이므로 하위 수준 프로그래밍이 가능하며 어셈블리 수준의 하드웨어 제어를 할 수 있습니다.

④ 모든 분야에 활용할 수 있을 정도로 범용적입니다.

사무 처리, 과학 기술, 상업용 등 거의 대부분의 응용 프로그램을 개발할 수 있습니다.

⑤ 성능을 위해 불필요한 에러 처리를 하지 않습니다.

타입의 불일치나 배열 경계 점검 등은 프로그래머가 직접 해야 하므로 개발자는 항상 이 점을 주의해야 합니다.

⑥ 이식성이 좋습니다.

대부분의 플랫폼에서 C/C++ 언어를 사용할 수 있으므로 재 컴파일만 하면 타 운영체제에서 실행되는 프로그램을 쉽게 만들 수 있습니다.

C언어가 발표되기 전의 언어들은 각각 장단점이 있어서 특정 분야에서 독점적인 지위를 가지는 고유한 영역을 확보하고 있었습니다.

Pascal이나 Basic은 교육용 언어로 분류되었고 COBOL은 상업용 소프트웨어 작성에 효율적이었으며 FORTRAN은 과학 기술용 언어로 주로 사용되었습니다.

또한 LISP는 인공 지능 구현에 적합했으며 어셈블리는 시스템 프로그래밍을 위한 최적의 언어였습니다.

C언어는 거의 모든 분야에 광범위하게 사용되게 됩니다.

C 언어는 원래 목적이었던 UNIX제작은 물론이거니와 Microsoft사의Windows NT와 같은 운영체제를 만들 때도 사용되며 빠른 속도를 요하는 게임프로그래밍에서도 C언어 내부에 어셈블리언어를 삽입시켜 제작하게 됩니다.

이러한 강력한 특징 때문에 모든 프로그래머들이 처음 프로그래밍을 접할 때 C언어부터 배우게 됩니다.

하지만 이러한 많은 장점에도 불구하고 C언어에도 치명적인 단점은 존재합니다.

C언어는 플랫폼(하드웨어나 운영체제)에 종속적입니다.

특정 개발 환경하에서 만든 프로그램은 그 개발환경과 동일하거나 유사한 경우에만 실행이 됩니다.

이러한 이유는 C언어는 미리 컴파일을 한 후 오브젝트 프로그램(기계어와 유사)을 만들고 이를 기반으로 실행 프로그램을 만들기 때문입니다.

또한 C언어는 웹에는 취약한 기반입니다. - C언어가 나올 때는 Web이 없었습니다.

이러한 단점을 해결하기 위해 등장한 것이 Java와 닷넷입니다.

이러한 언어들은 중간코드까지만 만들고 두고 Java Virtual Machine이나 닷넷 프레임워크가 실행하게 됩니다.


 

3. C 언어 수행과정

프로그램을 작성한다는 것은 사용하는 언어의 문법에 맞게 명령들을 작성하는 것을 의미합니다.

언어의 문법에 맞게 명령들을 기술한 파일을 원시 파일(Source File)이라고 하며 원문 그대로 소스(Source)파일 이라고도 부릅니다.

소스는 고급 언어로 작성되어 있기 때문에 컴퓨터가 바로 이해할 수 없으며 따라서 실행할 수도 없습니다.

컴퓨터는 오로지 이진수로 된 기계어밖에 이해하지 못합니다.

그래서 소스를 컴퓨터가 이해할 수 있는 기계어 코드로 번역해야 하는데 이 동작을 컴파일(Compile)이라고 합니다.

컴파일이란 소스에 작성된 명령들을 컴퓨터 언어인 기계어로 번역하는 작업이며 컴파일을 해주는 프로그램을 컴파일러(Compiler)라고 부릅니다.

컴파일러는 소스 파일에 작성된 고급 언어 명령을 해석하여 기계어 코드로 바꾸고 그 결과를 목적 파일(Object File)에 써 넣게 됩니다.

따라서 컴파일러는 소스 파일을 목적 파일로 바꾸는 시스템 프로그램입니다.

목적 파일은 소스의 명령들을 번역한 기계어 코드를 가진 파일이되 이 파일도 곧바로 실행할 수 없습니다.

왜냐하면 프로그램은 기계어 코드 외에도 운영체제가 요구하는 코드를 추가로 가져야 하기 때문입니다.

목적 파일을 실행 파일로 바꾸기 위해서는 이 실행 파일이 운영체제의 요건에 맞도록 형태를 조금 바꾸고 스타트업(StartUp)이라는 추가 코드를 가져야 합니다.

목적 파일에 이런 처리를 하여 실행 파일로 만드는 동작을 링크(Link)라고 하며 링크를 해 주는 프로그램을 링커(Linker)라고 부릅니다.

하나의 프로그램이 작성되는 과정은 다음과 같이 그릴 수 있습니다.

Source File

à

Object File

à

Excute File

소스 파일은 컴파일러에 의해 컴파일되어 목적 파일이 되며 목적 파일은 링커에 의해 링크되어 최종적으로 실행 가능한 실행 파일이 됩니다.

소스 파일을 번역하여 곧바로 실행 파일을 만들지 않고 목적 파일이라는 중간 과정을 거치는 이유는 여러 개의 소스를 합쳐 하나의 실행 파일을 만들어낼 수 있어야 하기 때문입니다.

하나의 소스에 필요한 모든 명령을 다 기술할 수 없으므로 소스를 여러 개 작성하고 이것을 모두 연결하면 완전한 실행 파일이 나오게 됩니다.


A.c

à

A.obj

 

 

Linking

à

Excute

 

 

B.c

à

B.obj

 

 

 

 

C.c

à

C.obj

 

 

 

 

A.c를 컴파일하여 A.obj를 만들고 B.c, C.c는 각각 B.obj, C.obj를 만듭니다.

각 목적 파일은 소스 파일의 명령을 번역한 기계어 코드를 가지고 있을 것입니다.

이렇게 개별 소스를 컴파일해서 만들어진 세 개의 목적 파일을 연결하면 하나의 실행 파일이 되며 링크 단계에서 이미 만들어진 라이브러리도 결합되게 됩니다.

이런 식으로 소스를 여러 개 작성해서 최종적으로 링크하는 방식을 분할 컴파일이라고 하는데 여러 사람이 같이 작업하거나 기능별로 모듈을 개발할 때 일반적으로 사용하는 방법입니다.

하나의 실행 파일을 만들려면 편집기로 명령들을 기술하여 소스를 만들고 이 소스를 컴파일하여 목적 파일로 만든 후 다시 링크 과정을 거쳐야 합니다.

아직도 일부 Linux, Unix 환경에서는 이 방법대로 개발하기도 합니다.

최근의 개발툴들은 자체에 편집기, 컴파일러, 링커를 모두 내장하고 있기 때문에 한번에 소스를 실행 파일로 바꿀 수 있습니다.

뿐만 아니라 디버거, 프로파일러, 리소스 편집기 등 개발에 필요한 편의 기능까지 같이 제공하는데 이런 환경을 통합 개발 환경(IDE, Integrated Development Environment)이라고 부릅니다.

이러한 IDE로 가장 유명한 것이 Visual Studio 입니다.

개발 환경 내에서 편집, 개발, 디버깅, 최적화까지 다 할 수 있기 때문에 무척 편리하며 생산성 향상에 크게 기여하고 있습니다.

컴파일러란 소스 파일을 목적 파일로 변환하는 프로그램을 의미하는데 요즘은 통합 개발 환경이 워낙 일반화되었기 때문에 개발 환경 자체를 컴파일러라고 부르기도 합니다.

UNIX 환경에서는 .obj가 아니고 .o 파일이 생성될 것입니다.


 

4. C 컴파일러의 종류

C/C++ 컴파일러에는 많은 종류가 있습니다.

컴파일러가 생성해 내는 기계어는 특정 CPU와 운영체제에서만 동작하기 때문에 컴파일러는 본질적으로 플랫폼에 종속적입니다.

매킨토시용 컴파일러로 인텔 계열 CPU에서 동작하는 프로그램을 작성할 수 없으며 도스용 컴파일러로 Windows용 프로그램을 작성할 수 없습니다.

운영체제 별로 C/C++ 컴파일러를 분류해 보면 다음과 같습니다.

운영체제

컴파일러

도스용

터보 C, 볼랜드 C++, MS C

Windows

Visual C++, 볼랜드 C

유닉스용

gcc

Gcc + Mingw

Dev C++

최근에는 WindowsTurbo C도 등장했습니다.

같은 컴파일러라도 버전에 따라 기능과 사용 방법, 지원하는 문법 수준이 다르므로 사용할 컴파일러를 선택하는 것은 아주 어려운 일입니다.

현재 가장 많이 사용되는 컴파일러는 마이크로소프트사의 Visual C++입니다.

Windows 전용 컴파일러이므로 Windows용 프로그램을 가장 잘 생성하며 작업 환경이 편리합니다.

코드를 자동으로 생성해 주는 위저드 기능과 MSDN이라는 방대한 도움말, 프로젝트 관리 기능 등 개발자를 위한 많은 지원들이 포함되어 있습니다.

Visual C++ Windows 전용의 컴파일러이기 때문에 도스에 대한 지원이 없습니다.

대신 도스와 비슷한 콘솔 환경을 지원하는데 콘솔에서는 기본적인 입출력만 해 볼 수 있으며 도스에 비해 화면 제어 능력이 취약합니다.

Visual C++(Visual C++)은 마이크로소프트사에서 만든 C/C++ 컴파일러입니다.

1992 4월에 첫 버전인 1.0이 발표되었으며 꾸준한 버전업을 거쳐 2009년 현재 Visual 스튜디오 2008까지 발표되었으며 조만간 Visual C++ 2010도 발표될 예정입니다.

Visual C++은 단순한 C/C++ 컴파일러가 아니라 여러 가지 다양한 프로젝트를 만들 수 있는 종합 개발 툴입니다.

Visual C++ 2008을 설치한 경우에는 마이크로소프트사의 홈페이지에 접속해서 자신의 Visual C++ 2008 언어에 맞는 서비스 팩을 같이 설치하는 것이 좋습니다.

서비스 팩을 설치하지 않으면 컴파일이나 링크가 되지 않는 경우가 발생할 수 도 있습니다.


 

5. 첫번째 실습 예제

Microsoft VC++2008을 실행합니다.

메뉴에서 파일 -> 새로 만들기 -> 프로젝트 항목을 선택하여 새로 프로젝트를 만듭니다.

왼쪽 화면에서 Win32를 선택하고 오른쪽 화면에서 Win32 콘솔 응용 프로그램을 지정하고 이름 란에 프로젝트 이름을 입력합니다.

그리고 다음 화면에서 추가 옵션에서 빈 프로젝트 란에 체크하고 마침을 누릅니다.

그리고 오른쪽 화면의 솔루션 탐색기에서 소스파일을 선택하고 마우스 오른쪽을 클릭해서 [추가] – [새 항목]을 선택합니다.

그리고 오른쪽의 화면에서 C++ 파일을 선택하고 파일 이름란에 파일명을 입력합니다.

이 때 주의할 점은 순수 C파일을 만들 때는 확장자를 .c로 해주어야 한다는 것입니다.

확장자를 입력하지 않으면 cpp가 붙게 되어 C++ 파일이 됩니다.

다음으로 소스 편집 창에 아래와 같은 코드를 입력합니다.

C언어는 영어 대소문자를 구별하므로 정확하게 입력하도록 합시다.

1-1 실습예제

#include <stdio.h>

int main()

{

    printf("안녕하세요반갑습니다. \n");

        system("pause");

    return 0;

}

위의 코드에서 들여쓰기나 줄 바꿈은 큰 의미가 없으므로 정확하게 들여쓰거나 줄바꿈을 할 필요는 없습니다.

작성한 프로젝트를 Compile(Bulid 메뉴에서 Compile을 선택하거나 Ctrl + F7)하여 Source 파일을 Compile하고 난 후 Bulid(Bulid 메뉴에서 Bulid 를 선택하거나 F7)를 수행한 후 Excute(Bulid 메뉴에서 Excute 를 선택하거나 Ctrl + F5)를 수행하여 실행 시켜봅시다.

만약 에러가 없다면 console 화면에 안녕하세요 반갑습니다라는 메시지를 화면 상에 출력 시켜 주게 될 것입니다.

프로그램을 작성하다 보면 컴파일이 제대로 되지 않을 수도 있는데 이럴 때 컴파일러는 다음 두 방법으로 사용자의 실수를 지적해 줍니다.

 에러(Error): 문법상 명백하게 잘못된 점이 있어서 번역을 할 수 없는 경우 에러 메시지를 출력하고 컴파일을 하지 않게 됩니다.

가장 흔한 경우는 오타가 있고 형식이 맞지 않다든가 반드시 필요한 지정이 빠진 경우 등이 에러로 처리됩니다.

에러가 있는 상태로는 컴파일을 계속할 수 없으므로 반드시 수정해야 합니다.

경고(Warning): 좀 이상한 문장이기는 하지만 컴파일에 큰 문제가 없는 경우 경고를 해주는 것입니다.

경고의 내용은 무시해도 되지만 만일 사용자의 실수가 있어서 나오게 되는 경우라면 수정을 해주는 것이 좋습니다.

 

만일 에러가 발생했다면 디버그 모드를 실행해 볼 수 있습니다.

디버그 모드 실행은 코드를 한 줄씩 실행하면서 어디가 잘못되었는지 알아내는 방법입니다.

값이 애매한 경우나 어디서 잘못 되었는지 모르는 경우 디버그 모드를 이용하면 버그를 쉽게 찾을 수가 있습니다.

이 때 소스 코드는 디버그용으로 컴파일된 것이어야 합니다.

메뉴에서 [Build] – [Start Debug] – [Go]를 선택해서 디버그로 실행하면 됩니다.

F5를 단축키를 이용할 수도 있습니다.

F10, F11을 이용해서 코드를 한 줄씩 실행시켜볼 수 있으며 현재 실행하고 있는 줄을 표시해서 보여주게 됩니다.


 

gcc 컴파일러를 이용한 소스 작성 및 실행

gcc는 통합 개발환경이 아닙니다.

따라서 문서 편집 기능이 없습니다.

윈도우에서 사용한다면 먼저 메모장을 이용해서 파일을 작성합니다.

파일 명 뒤에 확장자를 .c로 해서 저장합니다.

[시작] – [실행] – [cmd]를 쳐서 콘솔 창으로 이동합니다.

cd 명령을 이용해서 gcc가 있는 디렉토리로 이동합니다.

그런 다음 gcc 소스 파일 경로 및 이름.c –o 실행 파일 경로 및 파일명.exe

로 컴파일합니다.

실행은 콘솔 창에서 실행 파일의 경로 및 파일 명을 입력하면 됩니다.

 

1. 메모장에 아래와 같이 작성해서 C:\Test.c로 저장

#include <stdio.h>

int main()

{

         printf("Hello World");

}

 

2. [시작] – [실행] – [cmd]

 

3. 실행 창에서 아래 와 같이 입력

C:\gcc\Bin>gcc c:\test.c -o c:\test.exe

C:\gcc\Bin>c:\test

Hello World


 

6. C 프로그램의 구조

1) 전처리부(Preprocessor)

- 먼저 컴파일 되는 부분

 

2) 전역 변수 선언부

- 전역 자료 형이나 변수를 선언하는 부분

 

3) 사용자정의함수 선언부

- 사용자가 직접 만들어 사용하는 함수를 선언하는 부분

 

4) 메인 함수부

- 기본적으로 존재해야 하는 함수

 

하지만 이 구조가 꼭 지켜져야 하는 것은 아닙니다.

main() 함수는 꼭 있어야 하지만 때론 전역변수 선언부나 사용자정의 함수부분은 존재하지 않을 수도 있습니다.

 

1-2 실습예제

#include <stdio.h>

int a;

void hello( )

{

        printf("안녕하세요\n");

        a = 2;

        printf("이예제는%d번째예제입니다\n",a);

}

int main( )

{

        hello();

        system("pause");

        return 0;

}

 


 

7. C 언어의 구성요소

1)키워드(Keyword)

C언어 차제가 의미를 미리 정해 놓은 단어들이며 예약어(Reserved word)입니다.

C언어가 이미 사용하고 있는 단어들이므로 다른 목적으로 사용할 수 없습니다.

키워드와 똑같은 이름의 변수나 함수를 만들 수 없습니다.

만약 키워드와 같은 이름의 변수를 사용하면 컴파일러는 이것을 변수로 인식하지 않고 키워드로 인식하므로 변수나 함수의 역할을 할 수 없을 것입니다.

C언어의 키워드에는 아래와 같은 것들이 있습니다.

 

auto, case, cdecl, const, char, continue, default, do, double, else, enum,

extern, float, for, goto, if, int, long, register, return, short, signed,

sizeof, static, struct, switch, typedef, union, unsigned, void, volatile,

while, asm, class, delete, friend, inline, mutable, new, operator, private,

protected, public, template, this, virtual, explicit, ....

 

일반적으로 Visual C++에서는 파란색 글씨로 보이게 됩니다.

 

2) 사용자정의 명칭(Identifier)

사용자정의 명칭은 사용자가 직접 만들어서 사용하는 것입니다.

변수나 함수는 다른 것들과 구분되어야 하므로 영역 내에서는 자기만의 고유한 이름을 가져야 합니다.

만약 두 변수가 동일한 영역에서 같은 이름을 가진다면 컴파일러가 이 변수들을 구분하지 못하므로 제대로 컴파일되지 않을 것이다.

폴더 안에 속한 파일 이름들이 다르듯이 C언어에서도 사용자 정의 명칭은 동일한 영역에서 중복해서 사용할 수 가 없습니다.

사용자 정의 명칭은 사용자가 직접 정의하는 것이므로 이름을 자유롭게 붙일 수 있습니다.

입력하기 편리하도록 적당한 길이의 명칭을 작성하는 것이 좋고 최대한 의미를 기억하기 쉽도록 만드는 것이 좋습니다.

사용자정의명칭은 자유롭게 정의할 수 있으나 몇 가지 제약사항이 따릅니다.

① 키워드는 쓸 수 없습니다.

키워드는 C언어 자체가 이미 사용하고 있는 단어이기 때문에 명칭으로 사용해서는 안됩니다.

② 알파벳, 숫자, _ 로 구성됩니다.

그 외의 특수한 문자들이나 중간에 공백은 사용할 수 없습니다.

③ 첫 문자는 알파벳이나 _ 만 올 수 있습니다.

숫자는 사용자정의명칭의 중간에는 나올 수 있지만 숫자로 시작할 수는 없습니다.

C언어는 대소문자를 구분합니다.

대문자로 정의한 경우와 소문자로 정의한 경우는 전혀 다른 정의가 됩니다.

3)상수(Constant)

고정된 값을 가지는 것을 말합니다.

5, 10.7, ‘A’, “abc” 처럼 처음부터 고정된 값을 말합니다.

5는 정수상수이며 10.7은 실수상수, ‘A’는 문자상수, “abc”는 문자열 상수입니다.

 

4)연산자(Operator)

계산을 지시하는 기호들을 연산자라고 합니다.

+, -, *, / 같은 사칙 연산자들도 있고 이외에도 관계, 대입, 논리 연산자 등 다양한 연산자가 있습니다.

또한 C 언어만의 고유한 포인터 연산자, 삼항 연산자 등 도 있습니다.

 

5)구두점(Punctuator)

C언어에서 구성 요소를 구분하여 좀 더 분명한 의미를 가지도록 하는 구두점이 있습니다.

쉼표, 따옴표, 괄호, 세미콜론 등이 구두점으로 사용됩니다.

모든 명령의 마지막에는 세미콜론이 와야 합니다.

이 사실은 매우 중요합니다.

처음 C프로그램을 작성하는 분들은 세미콜론에 주의해야 합니다.

 

6)공백 문자(White Space)

스페이스와 탭, 개행(줄 바꿈)코드 등이 공백입니다.

공백 문자는 눈에 보이지 않지만 구성 요소들을 구분하는 아주 중요한 역할을 합니다.

 

7)주석(Comment)

설명을 위해 삽입되는 문자나 문장을 말합니다.

주석은 프로그램을 읽는 사람이 의미를 쉽게 파악할 수 있도록 설명을 붙여 놓는 것입니다.

어려운 부분이거나 보충설명이 필요한 부분 등에 대해서는 주석으로 설명을 달아 놓을 수 있습니다.

여러 줄의 주석은 /*로 시작해서 */로 끝나고 한 줄 주석을 쓰고 싶을 때는 //를 사용합니다.

주석은 컴파일러가 번역하지 않으므로 한글과 영문 모두 가능합니다.

프로그램을 작성할 경우에는 주석을 삽입하여 다른 사람이 알아보기 쉽게 하고 차후에 자신이 자신의 프로그램을 수정하는 경우에도 사용할 수 있으므로 습관화 하는게 좋습니다.

주석은 이외에도 에러가 발생한 경우 특정부분을 주석 처리하여 에러를 찾는데도 이용하기도 합니다.

 


 

다음이 주석을 활용한 예제입니다.

1-3 실습예제

/*

두개의문장을출력하는예제

*/

#include <stdio.h>

int main()

{

        printf("안녕하세요\n");

        printf("반갑습니다\n");

        //\n 은줄을바꿔주는제어문자입니다.

        system("pause");

        return 0;

}

 


 

8. 프로그램 작성 규칙

1) C언어는 대소문자를 구분하므로 키워드나 명칭 등을 작성할 때 대소문자 구분에 유의해야 합니다.

변수를 선언할 때는 Score로 선언해 놓고 쓸 때는 score로 쓰면 이 변수는 선언되지 않은 것으로 취급됩니다.

또한 main Main으로 써도 안되며 예약어들도 대소문자에 맞게 써야 한다.

INT num; 이라고 쓰면 안됩니다.

C의 예약어들은 모두 소문자입니다.

 

2) C 프로그램은 항상 main 함수로 시작합니다.

C는 함수 위주의 언어이며 필요한 함수를 자유롭게 만들어 쓸 수 있는데 함수 중에 반드시 있어야 하는 함수가 바로 main 함수입니다.

main은 프로그램의 시작점이 되며 이름이 고정되어 있습니다.

컴파일러는 main에서부터 실행을 시작합니다.

하나의 프로젝트에 반드시 하나의 main()만 존재해야 합니다.

 

3) 모든 문장은 세미콜론으로 끝이 나는데 세미콜론은 자연어의 마침표에 해당합니다.

컴파일러는 세미콜론을 기준으로 어디서 어디까지가 한 문장인지를 구분하므로 모든 명령 끝에 반드시 세미콜론을 달아 주도록 해야 합니다.

 

4) C언어는 프리 포맷(Free Format)을 지원합니다.

문법에만 맞으면 한 줄에 붙여 쓸 수도 있고 여러 줄에 나누어 쓸 수도 있습니다.

조금 여백을 주기 위해 괜히 한 줄을 비워 둘 수도 있으며 들여쓰기나 공백의 개수도 편한 대로 작성할 수 있습니다.

 

연습문제) 자기 자신의 이름을 출력하는 프로그램을 작성하시오.

#include <stdio.h>

int main()

{

         printf("박 문석\n");

         system("pause");

         return 0;

}


:
Posted by 에너지발전소
2010. 5. 24. 20:52

[12일차]Protocol Objective-C2010. 5. 24. 20:52


6. 프로토콜의 정합성 여부확인
* 재정의하면 안되는 메서드
+(BOOL)conformsToProtocol:@protocol(프로토콜이름)
                                         ==>대신에 프로토콜클래스 객체를 이용해도 됨
-(BOOL)conformsToProtocol:@protocol(프로토콜이름)
:호출하는 인스턴스나 클래스가 프로토콜이름에 기재된 프로토콜을 인증하고 있으면 YES 아니면 NO를 리턴
:프로토콜 클래스 객체 얻기
Protocol * 변수명 = @protocol(프로토콜이름)


앞쪽의 프로토콜과 클래스 구현부
    <ProtocolToString>    =>Test<ProtocolToString>


7. 비공식 프로토콜 =>@required (필수), @optional (선택) 로 전향
:
=>NSObject의 카테고리를 생성해서 메서드를 구현해도되고 안해도 되는 형태
=>프로토콜의 인증을 받으려면 프로토콜에 선언되어 있는 모든 메서드를구현


*AutoreleasePool (임시변수 생성시 활용)
1. AutoreleasePool
=>foundation에 속한 클래스읭 인스턴스들은 시스템이 메모리공간을 해제할 수 있도록 AutoreleasePool에 등록이 되어야 합니다.
=>인스턴스들이 release를 호출하지 않아도 pool이 drain을 호출하는 순간 자동적으로 release를 수행
=>AutoreleasePool에 등록하는 방법은 autorelease라는 메서드를 호출하면 됩니다. 현재위치에서 가장 가까운 pool에 등록됨
=>등록을 해도 retainCount에는 변함이 없으며 pool이 drain 될때 retainCount만 1씩 감소

1)생성
NSAutoreleasePool * 변수명 = [[NSAutoreleasePool alloc] init];

2)해제
[변수명 drain];
=>NSAutoreleasePool.h 에 정의 및 구현

* 자동적으로 retainCount가 변하는 경우
=> 강한 참조를 사용하는 collection에 삽입되는 경우 retain을 호출한것과 동일한 효과
=> collection에서 제거되는 경우 release를 호출한것과 동일한 효과
=>Copy메서드를 이용한 복사시에도 retain을 호출하는 효과

ex)retain, alloc, release를 호출하지 않아도 retainCount가 변하는 경우
:
Posted by 에너지발전소