처음에
샘플 프로그램은 크게 진보했습니다만, 이 계산 결과를 어떻게 해서 화면위로 표시할지에 대해서는 아직 설명하지 않았습니다. Objective-C언어 바로 그것에는 그러한 기능은 없습니다만, 운좋게도, 화면에 표시하는 함수를 만든 사람이 있으므로 그것을 이용합시다. 결과를 화면위로 표시하는 방법은 여러가지 선택사항이 있습니다만, 여기에서는 애플의 Cocoa환경에 의해 제공되는 NSLog()을 이용합니다. 이것이라면 아무런 걱정도 없이 결과를 화면에 표시할 수 있습니다. 
 NSLog()함수는 원래 처리 결과가 아니고 에러·메세지를 표시하기 위해서 만들어져 있습니다. 그러나 매우 간단히 사용할 수 있기에, 이 가이드에서는 NSLog()을 결과 표시에 이용하기로 합니다. 좀더 Cocoa에 숙달하면, 더욱 정성들인 표시 방법을 사용할 수 있게 되는 것이지요. 

NSLog사용
NSLog ()의 사용방법을 알아봅시다. 

[1]
int main()
{
  NSLog(@”Julia is a pretty actress.”);
  return 0;
}

실행하면 「Julia is a pretty actress. 」이라고 하는 텍스트가 표시됩니다. 「@”」이라고 「”」의 사이의 문장을 문자열(string)이라고 부릅니다. 
문자열이외에, NSLog()함수는 현재의 시간과 어플리케이션(application)이름등, 여러가지 추가 정보를 함께 표시합니다. 예를 들면 나의 시스템상에서는, 샘플 [1]의 결과는 아래와같이 표시됩니다. 

2005-12-2217:39:23.084 test [399] Julia is a pretty actress.  

 문자열은 0개이상의 문자를 가집니다. 
 주의:이하의 샘플에서는 main()함수 안(속)에서 중요한 부분만을 발췌하고 있습니다. 
 
[2]
NSLog(@””);
NSLog(@” ”);

[2.1]은 0개의 문자를 포함합니다. 이것은 공백의 문자열 (즉 길이가 0의 문자열)이라고 불립니다. [2.2]은 모양을 뒤집어서 공백문자열이 아닙니다. 이 문자열은 공백을 하나 포함하고 있습니다. 즉 길이가 1의 문자열입니다. 

 몇개의 특수한 문자조합은, 문자열 안에서 특별한 의미를 가지고 있습니다. 이러한 문자조합을 escape sequence라고 부릅니다.
 
예를 들면, 위의 샘플의 문장의 마지막 단어를 행을 바꾸어서 다음 행에 표시하고 싶을 때, [3.1]과 같이 특수한 문자n을 추가합니다.
n은 ”new line character”의 생략입니다. 

[3]
NSLog(@”Julia is a pretty nactress.”);

화면에의 표시는 다음과 같습니다. (필요한 부분만 발췌하고 있습니다). 
 
Julia is a pretty
actress.
 
[3.1]의 backslash (\, 옵션 키+\키로 입력할 수 있습니다)은 이스케이프 문자라고 부르고 뒤의 문자는 보통인 문자가 아니고 특별한 의미를 가지고 있다라고 하는 것을 NSLog()함수에 전하고 있습니다. 이 경우 「n」은 행 바꿈을 의미합니다. 
 그러면 만약 backslash 바로 그것을 표시하고 싶을 때, 어떻게 하면 좋습니까? 그 경우 backslash를 backslash 앞에 또 하나 추가하면 됩니다. 이것으로서 두번째의 backslash를 표시하게 NSLog()에 지시할 수 있습니다. 샘플은 아래대로입니다. 
[4]
NSLog(@”Julia is a pretty actress. \n”);
[4.1]의 결과는 아래와같이 될 것입니다. 
Julia is a pretty actress. \n

변수표시
현재, 고정 문자열 표시밖에 하지 않았습니다. 다음은 계산의 결과값을 화면위로 표시해 봅시다. 

[5]
int x, integerToDisplay;
x = 1;
integerToDisplay = 5+ x;
NSLog(@”The value of the integer is %d.", integerToDisplay);

NSlog의 괄호의 사이에 우선 문자열이 있고 다음에 콤마와 변수명이 있는 것에 주의해 주십시오. 
그리고 문자열에는 어떠한 이상한 기호%d가 포함되어 있습니다. backslash와 같이 %문자도 특별한 의미를 가지고 있습니다. 만약 %의 다음에 d (decimal number, 즉 10진수)이 있을 경우, 그 문자는 실행시에 콤마의 다음 값, 즉 여기에서는 변수integerToDisplay의 값에 바꿔 놓을 수 있습니다. [5]의 실행 결과는 아래와같이 될 것입니다. 

The value of the integer is  6.

float를 표시시키려면 %d 대신 %f를 사용합니다. 
 
[6]
float x, floatToDisplay;
x = 12345.09876;
floatToDisplay = x/3.1416;
NSLog(@”The value of the float is %f. ",floatToDisplay);

소수점이하 몇자리까지 표시시킬지 지정할 수도 있습니다. 
소수점이하 두자리까지 표시하기 위해서는 %과 f의 사이에 2을 끼워줍니다.
 
[7]
float x,floatToDisplay;
x = 12345.09876;
floatToDisplay = x/3.1416;
NSLog(@”The value of the float is %. 2f. ",floatToDisplay);

나중에, 계산의 반복처리를 가정하면, 변수 리스트를 만들고 싶을지도 모르겠습니다. 화씨와 섭씨의 변환 테이블을 상상해 보아 주십시오. 만약 값을 예쁘게 표시하고 싶다면, 고정 폭의 둘의 칼럼에 값을 표시하고 싶어진다고 생각합니다. %과 f (혹은 %과 d)의 사이에 두는 것으로, 그 폭을 지정할 수 있습니다. 단 당신의 지정 폭이 숫자의 실제의 폭보다도 좁을 경우, 실제의 값의 폭이 우선됩니다. 

[8]
int x =123456;
NSLog(@"%2d", x);
NSLog(@"%4d", x);
NSLog(@"%6d", x);
NSLog(@"%8d", x);

샘플 [8]의 출력(표시 결과)은 이하 대로입니다.  
 
123456
123456
123456
  123456

[8.2, 8.3]의  두행에서는 지나치게 작은 자리수를 지정하고 있습니다만, 그래도 모두 표시 될 수 있는 범위에있습니다. [8.5]에서는 실제의 숫자보다도 큰 자리수를 지정하고 있으므로, 여분의 스페이스가 숫자 앞에 표시되고 있습니다. 

숫자의 폭과 소수점이하의 자리수를 조합시켜서 지정할 수도 있습니다. 

[9]
float x=1234.5678;
NSLog(@”Reserve a space of  10, and show  2 signi? cant digits.”);
NSLog(@"% 10.2d", x);

복수의 값 표시
두개이상의 변수를 표시하는 것도 물론 가능합니다. [10.3]. 단 %d와 %f가 변수의 형과 정확하게 호응하고 있는지 정확히 확인해 주십시오. 

[10]
int x = 8;
float pi = 3.1416;
NSLog(@”The integer value is %d, whereas the float value is %f. ", x, pi);

심볼값의 대응
초심자가 가장 많이 틀리는 것중 하나가 NSLog()등의 함수로 옳지 않은 형을 지정해버리는 미스를 올릴 수 있습니다. 결과가 이상하거나, 이유도 없이 프로그램이 크래쉬해버릴 경우, 데이터형을 확인해 주십시오. 
 예를 들면 최초의 값이 틀릴 경우, 두번째의 값도 정확하게 표시되지 않을지도 모릅니다. 
[10b]
int x = 8;
float pi = 3.1416;
NSLog(@”The integer value is %f, whereas the float value is %f. ", x, pi);
// 정확하게는 NSLog(@”The integer value is %d, whereas the float value is %f. ", x, pi);
결과는 다음과 같이 됩니다. 
The integer value is  0.000000, whereas the float value is  0.000000.

Foundation 링크
최초의 프로그램을 실행하기 전에 또 하나만 해결해야 할 문제가 남아있습니다. 
 샘플 프로그램은 이 편리한 NSLog()함수를, 함수의 코드를 아무 것도 쓰지 않고 있는데도 어떻게 실행합니까? 사실은 프로그래머가 힌트를 주지 않으면, 샘플 프로그램은 NSLog()함수를 실행할 수 없습니다. 실행할 수 있도록 하기 위해서는, NSLog ()을 포함하는 여러가지 도구를 모은 라이브러리(프레임워크라고 불립니다)을 읽을 (임포트(import) 한다) 필요가 있습니다. 임포트(import) 하기 위해서는 이하의 명령을 사용합니다. 
#import <Foundation/Foundation.h>
이 명령은 프로그램 코드의 첫부분에 둘 필요가 있습니다. 여기까지 배운 내용을 모두 매듭지으면, 이하와 같은 코드가 완성됩니다. 다음 장에서는 실제로 이 프로그램을 움직여 봅니다. 

[11]
#import <Foundation/Foundation.h>
float circleArea (float theRadius);
float rectangleArea (float width,float height);
int main ()
{
  float pictureWidth, pictureHeight, pictureSurfaceArea,  circleRadius, circleSurfaceArea;
  pictureWidth = 8.0;
  pictureHeight = 4.5;
  circleRadius = 5.0;
  pictureSurfaceArea = rectangleArea(pictureWidth,  pictureHeight);
  circleSurfaceArea = circleArea(circleRadius);
  NSLog(@”Area of circle:% 10.2f.", circleSurfaceArea);
  NSLog(@”Area of picture:%f.", pictureSurfaceArea);
  return  0;
}

float circleArea (float theRadius)// 처음 자작 함수
{
  float theArea;theArea = 3.1416* theRadius * theRadius;
  return theArea;
}

float rectangleArea(float width,float height) //두번째의 자작 함수
{
  return width*height;
}

원문 http://www.cocoalab.com/?q=node/10

'become Xcoder' 카테고리의 다른 글

06:조건분기  (0) 2011.06.21
05:프로그램을 컴파일해서 실행  (0) 2011.06.21
04:화면에 표시하기  (0) 2011.06.21
03:함수  (0) 2011.06.21
02:노 코멘트(no comment)? 그것은 안됨!  (0) 2011.06.21
01:프로그램은 인스트럭션의 연속  (0) 2011.06.21
Posted by tklee