07:반복처리

become Xcoder 2011.06.21 23:11
처음
지금까지 배워 온 코드는 모두다 각명령당 일회밖에 실행하지 않았습니다. 물론 [1]과 같이 같은 코드를 되풀이하는 것으로, 같은 처리를 되풀이할 수는 있습니다. 
[1]
NSLog(@”Julia is a pretty actress.”);
NSLog(@”Julia is a pretty actress.”);
NSLog(@”Julia is a pretty actress.”);
그러나 한행이상의 처리를 몇번이나 되풀이할 필요가 자주 있습니다. 다른 프로그래밍언어와같이 Objective-C도 몇가지 반복처리 방법이 있습니다. 

for()
만약 반복하는 회수가 이미 알고 있는 것이라면, 샘플 [2]과 같이 회수를 직접 지정할 수도 있습니다. 2.7회 되풀이할 수는 없기때문에 반복회수는 당연히 int형(등의 정수형)으로 지정합니다. 
[2]
int x;
for (x =1;x <=10;x++)// [2.2]
{
  NSLog(@”Julia is a pretty actress.”);// [2.4]
}
NSLog(@”The value of x is %d", x);

샘플 [2]에서는, [2.4]의 문자열이 10회 나타내집니다. [2.2]의 for() 이라는 것이 되풀이의 명령입니다. 
우선 if와 같이 for()의 뒤에 세미콜론;은 필요 없습니다. 다음에 for()의 괄호 안에 주목해 주십시오. 괄호 안은 세미콜론;로 매듭지어진 세개의 식에 나뉘어져 있습니다. 왼쪽에서 「x =1;」, 「x <=10;」, 「x++」 왼쪽에서 차레로 보아 갑시다. 우선, 변수x에 1이 대입됩니다 (x=1). 그리고 컴퓨터는 그 다음에 씌어져 있는 조건(x <=10)을 평가합니다. 만약 이 조건이 참이라면 [2.3]로부터 시작되는 중 괄호 {} 안의 코드가 실행됩니다. 그리고 실행한 뒤, 마지막에 for의 가장오른쪽의 문장 「x++」이 실행됩니다. 즉 x의 값이 1 늘어납니다. 「x++」이 실행되면 다시 for에 돌아가고, 한복판의 조건식이 평가되, 참이라면 (x=2이므로 2 <= 10은 참) 다시 {} 안이 실행되는 되풀이가 됩니다. x가 11이 되면 조건x <= 10은 성립하지 않게 되므로 for의 반복(일반적으로 for루프라고 부릅니다)은 끝나고, 마지막 처리 [2.6]이 실행됩니다. 최종적으로 x는 10이 아니고 11인 것에 주의해 주십시오. 
 때로는 x++보다 복잡한 조건으로 되풀이할 것도 있습니다만, 필요한 것은 조건식을 적당한 것에 교환하는 것만입니다. 다음 샘플 [3]은 화씨를 섭씨로 변환하는 프로그램입니다. 
[3]
float celsius, tempInFahrenheit;
for (tempInFahrenheit = 0;tempInFahrenheit <= 200;tempInFahrenheit = tempInFahrenheit + 20)
{
  celsius =(tempInFahrenheit -32.0)*5.0/9.0;
  NSLog(@"%10.2f ->% 10.2f", tempInFahrenheit, celsius);
}

이 샘플 프로그램의 출력(계산 결과)은 이하 대로입니다. 
0.00->-17.78
20.00->-6.67
40.00-> 4.44
60.00-> 15.56
80.00-> 26.67
100.00-> 37.78
120.00-> 48.89
140.00-> 60.00
160.00-> 71.11
180.00-> 82.22
200.00-> 93.33

while()
Objective-C에는 또 2개의 반복방법이 있습니다. 
while (){}

do {} while ()
입니다. 
 
 전자는 조금전에 배운 for루프와 기본적으로 같습니다. 조건식의 평가로부터 시작됩니다. 만약 평가 결과가 처음부터 거짓(false)이라면 루프 안의 처리는 한 번도 실행되지 않습니다. 
[4]
int counter = 1;// [4.1]
while (counter <= 10)
{
  NSLog(@”Julia is a pretty actress. \n”);
  counter = counter + 1;// [4.5]
}
NSLog(@”The value of counter is %d", counter);

for()구문에서는 counter의 초기화 (이전의 샘플에서는 x=1;)이라고 counter의 인크리먼트(increment)(값을 1 늘리는 것. 전번의 샘플의 x++)은, for의 () 안에서 정리해서 실행되었습니다만 [2.2], while에서는 따로따로 실행 할 필요가 있습니다 [4.1] [4.5]. 이 샘플을 실행하면 counter는 11이 됩니다. 

do {} while ()구문에서는 평가에 앞서 우선 안괄호 안이 처리됩니다. 즉 {} 안의 처리가 반드시 최소한 한 번은 실행됩니다. 
int counter = 1;
do
{
  NSLog(@”Julia is a pretty actress. \n”);
  counter = counter + 1;
}
while (counter <= 10);
NSLog(@”The value of counter is %d", counter);

do{} while() 구문의 경우, while ()의 뒤에 세미콜론;이 필요한 것에 주의해 주십시오. 이 샘플을 실행하면, counter는 11이 됩니다. 
 당신의 프로그래밍의 지식은 대단히 늘어났으므로, 다음은 좀더 어려운 과제에 도전해 봅시다. 다음 장에서는 드디어 GUI 프로그램을 만들어 봅니다. 

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

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

07:반복처리  (0) 2011.06.21
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
Posted by tklee

06:조건분기

become Xcoder 2011.06.21 23:10
if()
특정의 조건에 일치할 때만 있는 처리를 하고 싶을 경우가 있습니다. 이러한 조건을 지정하기 위한 특수한 구문이 있습니다 [1.2] 
[1]
// age는 int형의 변수로, 사용자의 연령이 대입되고 있습니다
if (age > 30)//>기호의 의미는 「보다큰 」
{
  NSLog(@”age is older than thirty.”);// [1.4]
}
NSLog(@”Finished.”);// [1.6]

[1.2]에 if()라고 하는 명령이 있습니다. 이것은「조건분기」명령이라고 부릅니다. 이 괄호 안에는 조건으로 지정하고 싶은 논리식 (옳은지 옳지 않은지를 판정하는 식)을 지정합니다. 그 조건에 일치하면, 예를 들면 여기에서는 「age >30」 (변수age의 값이 30보다 크다)이라면, 다음 안 괄호 {} 안의 코드가 실행되어, [1.4]의 문자열이 표시됩니다. 그리고 [1.6]은 if 안괄호의 밖에  있기 때문에 조건에 일치해도 하지 않아도 [1.6]의 문자열이 표시됩니다. 여전히 if()의 행의 마지막에는 세미콜론;은 필요 없습니다. 붙이면 동작하지 않으므로 주의해 주십시오. 여전히 이 앞의 코드는 5장에서 만든 샘플 프로그램을 사용해서 실제로 시도하면서 읽는 것을 추천합니다. 

if() else()
if…else구문을 사용하는 것으로, 조건에 일치하지 않았을 경우의 처리를 지정할 수도 있습니다 [2]. 
[2]
// age는 int형의 변수로, 사용자의 연령이 대입되고 있습니다
if (age > 30)
{
  NSLog(@”age is older than thirty.”);// [2.4]
}
else
{
  NSLog(@”age is not older thirty.”);// [2.8]
}
NSLog(@”Finished.”);

조건에 일치하지 않는 (변수age가 30보다 크지 않은, 즉 30이하의) 경우, [2.8]의 문자열이 표시됩니다. 
 
비교
[2.2]에 「보다 크다」 (>) 기호 이외에, 이하의 비교를 위한 기호 (이러한 기호를 「비교연산자」라고 부릅니다)을 사용할 수 있습니다. 
== 같다
>보다 크다
<보다 작다
>= 이상
<= 이하
!= 같지 않다
「같다」 연산자는 특히 주의해 주십시오. =가 둘입니다. 처음은 그것을 잊어서 =을 하나만 사용해버리는 것이 종종 있습니다만, 하나의 =은 「대입」의 연산자이며, 좌변에 우변의 값을 대입하기 위한 기호입니다. 이것은 초심자에게 자주 틀리는 것입니다.「둘의 값이 같은 것인가 아닌가 조사할 때는==을 사용한다」라고 하는 것을 잘 기억해 두어 주십시오. 
 비교의 연산자는, 어떤 처리를 특정한 회수만 되풀이할 때에, 특히 편리합니다. 그것은 다음 장의 테마가 됩니다. 우선은, 나중에 도움이 될 지도 모르는 if의 다른 사용방법에 대해서 배웁시다. 

연습
비교에 대해서 좀더 자세하게 배웁시다. 비교 연산의 결과는 2종류밖에 없습니다. 정(옳다= true)인가 부(옳지 않다= false)입니다. 

 Objective-C에서는 true와 false는 1과 0의 수치로 표현됩니다. 또 BOOL형이라고 불리는, true와 false를 표현하기 위한 특수한 데이터형도 있습니다. true를 표현하기 위해서 1 혹은 YES라고 쓸 수도 있습니다. false라면 0 혹은 NO입니다. 
 
[3]
int x = 3;
BOOL y;
y =(x == 4);// y는 0이 됨

보다 많은 조건을 지정할 수도 있습니다. 하나이상의 조건이 모두 옳음이라고 하는 조건을 지정하기 위해서는 논리적AND를 이용합니다. 연산자는 && 하나이상의 조건의 어느 것인가 옳음이라고 하는 조건을 지정하기 위해서는 논리화(화합)OR을 이용합니다. 연산자는 || (세로막대둘)입니다. [4.1]은 「age가 18이상에서 동시에 age가 65보다 작다」라고 하는 의미입니다. 
[4]
if ((age >=18)&& (age < 65))
{
  NSLog(@”Probably has to work for a living.");
}
혹시
if ((age >= 18)|| (age <65))
로 변경하면 「age가 18이상 혹은 age가 65보다 작다」 (즉 모든 숫자가 일치합니다)란 의미가 됩니다. 
 또 조건식을 네스트 (조합시킨다) 것도 가능합니다. 단지, 어떤 조건식 안괄호 {} 안에 다른 조건식을 넣는 것 뿐입니다. 먼저 최초의 조건이 일치할 것인가 아닌가 조사할 수 있어 (전문적으로는「평가한다」라고 말합니다), 만약 true(일치한다)이라면, 계속해서 안의 조건이 평가됩니다. 
[5]
if (age >= 18)
{
  if (age < 65)
  {
    NSLog(@”Probably has to work for a living. ”) ;
  }
}

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

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

07:반복처리  (0) 2011.06.21
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
Posted by tklee
처음
지금까지 만든 코드는 우리들 인간이 읽을 수 있는 단순한 텍스트에 지나치지 않습니다. 그러나 그것은 완전한 인간의 문장이라고도 말할 수 없고, 그렇다고 해서 Mac이 이해할 수 있는 수준은 아닙니다. 이것만으로는 아무런 가치도 없습니다. 당신이 쓴 프로그램 코드를, Mac이 실행가능한 런타임 코드로 변환하기 위해서는, 컴파일러라고 불리는 특수한 프로그램이 필요합니다. 그것은 애플이 무상으로 제공하고 있는 Xcode개발 환경에 포함되어 있습니다. 우선은 Mac OS X 디스크로부터 Xcode를 인스톨해 주십시오. 그리고 http://developer.apple.com으로부터 항상 최신판을 다운로드하게 유념해주십시요(다운로드에는 무료인 등록이 필요합니다). 

프로젝트 작성
인스톨한 Developer폴더내의 Applications폴더에 들어 있는 Xcode를 기동해 주십시오. 처음으로 기동할 때는, Xcode는 당신에게 두세번 질문을 할 것입니다. 모두는 환경설정으로 뒤에서 변경할 수 있으므로, 우선은 디폴트의 설정을 선택해 두면 문제 없습니다. 그리고 다음에 「파일」메뉴로부터 「New Project」을 선택합니다. 현재 사용가능한 프로젝트 타입의 리스트가 다이얼로그로 표시됩니다. 

 
Xcode어시스턴트를 사용해서 프로젝트를 작성
여기에서는 GUI를 가지지 않는 간단한 Objective-C프로그램을 만들것이기에, 윈도우 아래 쪽에 있는 「Command Line Utility」 아래로부터 「Foundation Tool」을 선택해 주십시오. 


이름과 저장장소를 선택
「justatry」등등의 어떠한, 어플리케이션(application)의 이름을 넣어 주십시오. 다음에 프로젝트 파일을 저장하는 장소를 선택하고 「완료」버튼을 클릭합니다. 
 지금 만든 프로젝트는 터미널에서 실행할 수 있습니다. 만약 그렇게 하고 싶을 때,그리고 얼마나의 수고를 줄이고 싶을 경우는 프로젝트의 이름은 단어 하나정도로 해 주십시오. 또 관습적으로 터미널에서 실행하는 프로그램의 첫머리 문자는 소문자를 사용하게 됩니다. 반대로 GUI를 가지는 프로그램의 이름은 대문자로부터 시작합니다. 

Xcode를 사용
그건 그렇고, 당신은 이제 프로그래머로서 이제부터 몇번이나 보게 될 윈도우를 열고 있습니다. 윈도우에는 두개의 프레임이 있습니다. 왼쪽은 프로그램을 만들어 내는 모든 파일을 조작하기 위한 「그룹과 파일」프레임입니다. 현재로서는 표시되고 있는 파일이 많이 있지 않습니다만, 다국어대응의 GUI프로그램을 만들 때는 여러가지 언어의 GUI를 위한 많은 파일이 여기에 두어집니다. 파일은 그룹화되어 폴더 안에 넣을 수 있습니다만, 이 폴더는 어디까지나 Xcode의 내부의 내용이고, 당신의 Mac의 하드 디스크 안에 대응하는 폴더는 없습니다. Xcode는 당신의 파일를 정리하기 위해서 가상적인 폴더 기능을 제공하고 있습니다. 


「그룹과 파일」프레임으로부터 「justatry」그룹을 열고, 「Source」라고 하는 그룹을 열어 주십시오. 안에 「justatry.m」이라고 하는 파일이 있습니다 [1]. 모든 프로그램은 main()이라고 하는 이름의 함수를 가지고 있다라고 하는 것을 기억하고 있습니까? 이 파일이 main()함수를 가지고 있습니다. 이 장의 후반에 이 코드를 변경합니다. justatry.m파일을 더블 클릭에서 열면, 당신은 조금 놀랄수도 있으겁니다. 애플은 당신을 위해서 이미 main()함수를 준비해 주고 있습니다. 
[##_http://tklee-notes.tistory.com/script/powerEditor/pages/1C%7Ccfile6.uf@170962414E028FAD029407.png%7Cwidth=%22740%22%20height=%22511%22%20alt=%22%22%20filename=%2205-03_xcode_window.png%22%20filemime=%22image/jpeg%22%7C_##] 
Xcode로 main()함수를 표시하고 있는 중
[1]
#import <Foundation/Foundation.h>
int main (int argc, const char * argv []) // [1.3]
{
  NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init ];// [1.5]

  // insert code here...  
  NSLog(@”Hello, World!”) ;
  [pool release];// [1.9]
  return 0;
}

프로그램을 슬쩍보고, 이해가 갈 것 같은 부분을 발견해서 봅시다. 
·NSLog ()등의 함수를 사용하기 위해서 필요한 import명령은 샤프기호#로부터 시작된다
·main()함수
·이 프로그램의 내용을 기술하기 위한 안괄호
·코드를 쓰게 지시하는 코멘트
·화면위로 문자열을 표시하기 위한 NSLog()명령
·돌아감 값을 돌려주는 return  0;명령

아직 당신이 이해가 가지 않는 행도 몇갠가 있습니다. 
·main()함수의 괄호 안에 있는 두개의 묘한 인수 [1.3]
·NSAutoreleasePool로부터 시작되는 명령 [1.5]
·pool과 release라고 하는 단어를 포함하는 또하나의 명령 [1.9]

혹시 내가 독자라면, 잘 모른 곳투성이의 코드를 보여줄때「나중에는 반드시 알게될꺼야」라고 들으면 그다지 기쁘지 않습니다. 그러므로 나는 이 가이드로 사전에 함수의 개념에 대해서 설명해 두었습니다. 그래서, 지금 모르는 것은 그다지 많지 않은 것이 아닐까라고 생각합니다. 
 함수는 프로그램을 구조화하는 수단이며, 모든 프로그램은 main()을 가지고, 함수란 어떤 것인가를 이미 배웠습니다. 그러나 유감스럽지만 샘플[1]의 내용을 지금 당장 모두를 설명할 수는 없습니다. 죄송합니다만, 이것들의 명령 (즉 [1.3, 1.5, 1.9])에 대해서는 당분간 무시해 주십시오. 간단한 프로그램을 쓸 수 있게 되기 위해서, 기억해 두어야 할 Objective-C의 문법이 이외에 몇갠가 있습니다. 그러나 다행인 것은 이미 당신은 특히 어려운 둘의 장을 이미 클리어하고 있어서 다음의 세개의 장은 매우 간단하는는 것입니다.(그 앞 다시 어려운 내용에 들어갑니다). 
 만약 당신이 정말로, 아무런 설명도 없이 나아가는 것이 싫으면, 이 요약을 읽어 주십시오. 
main함수의 두개의 인수는 프로그램을 터미널에서 실행하기 위해서 필요하게 됩니다. 프로그램은 실행시에 메모리를 확보합니다. 프로그램의 실행이 끝나면, 그 프로그램이 확보하고 있었던 메모리는, 메모리를 필요로 하고 있는 다른 어플리케이션에 받습니다. 당신의 프로그램이 필요로 하고 있는 메모리를 확보하는 것은, 프로그래머로서의 당신의 일입니다. 또 작업이 끝나면 확보하고 있었던 메모리를 해제합니다. (다른 어플리케이션이 사용할 수 있는 상태로 한다) 것도, 똑같이 중요한 일입니다. 이 메모리의 처리가 pool을 포함하는 두개의 명령이 하고 있는 것입니다. 

빌드해서 실행
애플이 준비해 준 프로그램을 우선 실행해 봅시다. 「Build and Go」이라고 하는 이름이 붙은 쇠망치의 아이콘을 클릭하고, 프로그램을 빌드(컴파일) 해 실행해 봅니다. 


Build and Go」버튼
 
  프로그램이 실행되어, 몇개의 정보와 함께 결과가 「실행 로그」윈도우에 표시됩니다. 로그의 마지막에 「the program has exited (stopped) with return 0」이라고 표시되어 프로그램은 종료합니다. 3장 [7.9]에 main()함수는 0을 되돌린다고 배웠습니다만, 이 프로그램도 종료하기 전에 마지막부분에 제대로 0을 되돌리고 있습니다. 여기까지는 문제 없는 것 같습니다. 

버그테스트
[1]에 되돌아가서, 프로그램에 버그가 있으면 어떻게 될지 시도해 봅시다. 예를 들면 NSLog()의 내용을 다른 것으로 바꿔 끼우고, 마지막에 세미콜론을 일부러 잊어 봅시다. 

[2]
#import <Foundation/Foundation.h>
int main (int argc, const char * argv [])
{
  NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init];

//  insert code here...  
  NSLog(@”Julia is a pretty actress”) // 아이쿠, 세미콜론을 잊었다!
  [pool release];// [2.9]
  return 0;
}

툴바의 「Build」아이콘을 클릭해서 어플리케이션(application)을 빌드합니다. 빨간 원이 [2.9]줄 앞에 표시될 것입니다. 


 
Xcode가 컴파일에서 에러가 발생한 것을 경고

빨간색 동그라미를 클릭하면 윈도우의 맨아래로 경고가 간단한 설명이 표시됩니다. 
error: parse error before "release”.

「parse」는 컴파일러가 처음에 하는 것으로, source code를 처음부터 최후까지 조사하고, 컴파일러가 정확하게 이해가 가는가 아닌가를 체크하는 작업입니다. 컴파일러가 코드를 정확하게 이해가 가도록 여러가지 단서를 준비하는 것은 당신의 책임입니다. 예를 들면 import명령에는 샤프 기호#을 붙이지 않으면 안됩니다. 그리고 [2.8]줄의 끝을 명확히 하기 위해서, 문장의 마지막에는 세미콜론을 붙일 필요가 있습니다. 컴파일러가 [2.9]줄까지 오면 무엇인가 이상한 것에 알아 차립니다. 그러나, 문제는 이 행이 아니고, 세미콜론을 붙이는 것을 잊은 그 전의 행에 있다고 하는 것까지는 컴파일러는 모릅니다. 여기에서 중요한 것은, 컴파일러는 될수 있는 한 이해하기 쉬운 피드백을 하지만, 실제로 그 경고는 (상당히 정확하게 가깝지만) 반드시 버그가 정확한 장소와 내용을 내보이고 있다고는 할 수 없다고 하는 것입니다. 
 세미콜론을 추가하고, 프로그램이 다음에는 정확하게 동작하는 것을 확인해 주십시오. 
 
처음의 어플리케이션(application)
이전 장에서 만든 코드를 가지고 와서, 애플이 준비해 준 코드 [1]에 끼워 넣어 봅시다. 샘플 [3]과 같이 됩니다.
 
[3]
#import <Foundation/Foundation.h>
float circleArea (float theRadius);// [3.3]
float rectangleArea (float width,float height);// [3.4]
int main (int argc, const char * argv []) // [3.6]
{
  NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init ];
  int pictureWidth;
  float pictureHeight, pictureSurfaceArea, circleRadius,  circleSurfaceArea;
  pictureWidth = 8;
  pictureHeight = 4.5;
  circleRadius = 5.0;
  pictureSurfaceArea = pictureWidth * pictureHeight;
  circleSurfaceArea = circleArea(circleRadius);// [3.16]
  NSLog(@”Area of picture:%f.   Area of circle:% 10.2f. ", pictureSurfaceArea, circleSurfaceArea);
  [pool release];
  return 0;
}

float circleArea (float theRadius)// [3.23]
{
  float theArea;
  theArea = 3.1416* theRadius * theRadius;
  return theArea;
}

float rectangleArea (float width,float height)// [3.30]
{
  return width*height;
}

우선은 시간을 들여서 이 프로그램의 구조를 파악해주십시요. 자작 함수circleArea() [3.23]와 rectangleArea() [3.30]의 헤더(함수 프로토타입 선언)이 main()함수 [3.6] 앞에 두어지고 있습니다. 그것들의 자작 함수는 main()함수 [3.5] 안괄호의 밖에 놓여 있습니다. 그리고 이전에 만든 main()함수의 내용을, 애플이 코드를 기입하라고 코멘트로 지시하고 있는 장소에 두었습니다. 
 이 코드를 실행하면, 이하와 같은 결과가 표시될 것입니다. 

Area of picture:36.000000. Area of circle:78.54.
justatry has  exited with status  0.

디버그
프로그램이 더욱 복잡하게 되다보면, 디버그가 보다 어려워집니다. 그 때문에, 프로그램이 실행중에, 안에서 도대체 무엇이 일어나고 있는 것일지 조사할 필요가 나옵니다. Xcode라면 간단히 그것을 할 수 있습니다. 
변수의 값을 알고 싶은 장소의, 코드 왼쪽의 회색 여백을 클릭하는 것 뿐입니다. Xcode는 파란색의 화살표 아이콘을 거기에 삽입하고, 「breakpoint」 (프로그램의 실행을 일시적으로 정지해서 내용을 체크하기 위한 포인트)을 설정합니다. 여기에서는 아래와 같이 [3.16]에 breakpoint를 두어 봅시다. 

      
breakpoint를 세트
breakpoint에서 처리가 멈추었을 경우, 멈춘 행의 처리는 아직 실행되고 있지 않습니다. 즉 어떤 계산 결과를 확인하고 싶을 경우, 그 계산의 행에 breakpoint를 두면 멈추었을 때에는 아직 계산이 실행되지 않고 있다라는 것에 주의해 주십시오. 그 때문에 보통 확인하고 싶은 계산의 다음 행에 breakpoint를 두게 됩니다. 
 그러면 다음에 쇠망치 아이콘을 길게 클릭해 주십시오. 메뉴가 표시됩니다. 


빌드와 실행 팝업메뉴(pop-up menu)
여기서 「Build and Go (Debug)」를 선택해 주십시오. 아래와 같은 윈도우가 표시됩니다. 

 
Xcode의 debugger를 사용하는 것으로 한줄한줄 프로그램을 실행해서 변수의 변화를 확인할 수 있는 프로그램은 최초의 breakpoint까지 실행됩니다. 윈도우 오른쪽상의 페인에서는, 여러가지 변수의 값을 확인할 수 있습니다. breakpoint에서 멈춘 뒤로 변경된 값은 적색으로 표시됩니다. 프로그램을 계속해서 실행하기 위해서는 「Continue」 버튼을 누릅니다. 이 debugger는 매우 강력한 툴입니다. 잠시동안 여러가지 시도해 보아, 사용방법에 익숙해 주십시오. 

정리
Mac OS X용 간단한 프로그램을 작성해서 디버그해서 실행하는 내용은 이것으로 끝입니다. 
만약 당신이 GUI를 가지는 프로그램을 만들지 않는 것이라면, 이제부터 당신이 해야 할 것은 보다 세련된 비GUI프로그램을 개발 할 수 있게 Objective-C로 관한 지식을 늘리는 것만입니다. 이 앞의 몇장으로 우리들이 하는 것은 정말로 그것입니다. 차후에, 결국 GUI베이스의 어플리케이션(application)에 도전합니다. 열심히 합시다! 

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

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

07:반복처리  (0) 2011.06.21
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
Posted by tklee
처음에
샘플 프로그램은 크게 진보했습니다만, 이 계산 결과를 어떻게 해서 화면위로 표시할지에 대해서는 아직 설명하지 않았습니다. 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

03:함수

become Xcoder 2011.06.21 23:03
소개
지금까지 본 예제 코드는 가장 긴 것이라도 단 5줄밖에 없었습니다. 몇천줄에 해당하는 프로그램을 짜는것은 아직 머나먼 이후의 일이지만, Objective-C의 특징으로서, 프로그램의 구성의 방법에 대해서 빠른 단계에서 설명하기로 합니다. 
 만약 프로그램이 길고 끊김이 없는 명령의 연속으로 되어 있었다로 하면, 버그를 찾아 수정하는 것은 매우 곤란해집니다. 또, 특정한 동일한 처리가 프로그램내의 복수의 장소로 존재할 경우, 거기에 버그가 있으면, 복수의 버그를 수정하지 않으면 안됩니다. 그런 때, 하나둘은 반드시 못보고 넘기는 것입니다. 그 때문에 코드를 구조화하고, 버그의 수정을 보다간단하게 하는 방법에 대해서 고려해야 합니다. 
 이 문제의 해결 방법으로서, 기능에 따라서 각 명령을 그룹화하는 것을 올릴 수 있습니다. 예를 들면 원의 표면적을 계산하는 명령이 있었다로 합니다. 이 코드가 정확하게 기능하는 것을 한 번 확인하면, 그 이후는 거기에 버그가 있는 것인가 아닌가를 다시 볼 필요는 없습니다. 「함수」라고 불리는 코드의 세트는, 각각 이름을 가지고, 그 이름을 부르는 것으로 함수가 가지는 기능을 사용할 수 있습니다. 이, 함수를 사용한다고 하는 사고방식은 매우 기초적인 것으로, 각프로그램은 적어도 하나는 함수를 가지고 있습니다. main()함수입니다. 컴파일러는 우선 이 main()함수를 발견하고, 여기에서 프로그램의 실행을 시작합니다. 

main()함수
main()함수를 더욱 자세히 보겠습니다.

[1]
main()
{
  // main ()의 본체. 여기에 코드를 쓴다.  
}

[1.1]의 행은 함수의 이름, 즉 main이라고 하는 것이 함수의 이름입니다. 괄호가 이름에 이어집니다. main은 예약어이며, main함수는 각프로그램에 반드시 필요합니다. 만약 자신의 함수를 만들 때는, 그 함수에 자유롭게 이름을 붙일수 (main과 같은 예약어를 제외) 수 있습니다. 괄호에도 의미가 있습니다만, 그것에 대해서는 나중에 설명합니다. 계속해서 행 [1.2, 1.4]에는 안괄호 {}이 있습니다. 함수의 코드는 이 중 괄호 안에 씁니다. 1장으로 사용한 샘플을 다시 봅시다. 
 
[2]
main ()
{
  //이하에 변수의 선언
 float pictureWidth, pictureHeight, pictureSurfaceArea;
 //변수의 초기화(각변수에 적당한 값을 세트)
pictureWidth = 8.0;
pictureHeight = 4.5;
//실제의 계산 처리
pictureSurfaceArea = pictureWidth * pictureHeight;
}

처음의 함수
main()함수에 계속되어 코드를 추가할 경우, 디버그가 보다 어려워져버립니다. 이러한 구조화되지 않고 있는 코드는 피해야 한다고 하는 것은 이미 배웠습니다. 여기에서는 좀더 구조화된 프로그램을 써 봅시다. 프로그램에 필수적인 main()함수와는 달리, circleArea()함수를 만들어 봅니다 [3]. 

[3]
main ()
{
  float pictureWidth, pictureHeight, pictureSurfaceArea;
  pictureWidth = 8.0;
  pictureHeight = 4.5;
  pictureSurfaceArea = pictureWidth * pictureHeight;
}
circleArea() // [3.8]
{
}

간단합니다만, [3.8]로부터 시작되는 함수는 아직 아무런 기능도 없습니다. 함수를 만들 때, main()함수의 밖에 둔다고 하는 것을 우선 기억해 주십시오. 다른 말로 바꿔 말하면, 함수는 네스트(nest= 「상자」와도 번역됩니다) 되지 않습니다. 
 새롭게 만든 circleArea()함수는 main()함수로부터 불립니다. 함수를 부른다 (실행한다)에는 어떻게 하면 좋을가 [4]을 보아 주십시오. 

[4] main ()
{
  float pictureWidth, pictureHeight, pictureSurfaceArea,  circleRadius, circleSurfaceArea;// [4.4]
  pictureWidth = 8.0;pictureHeight = 4.5;
  circleRadius = 5.0;// [4.7]
  pictureSurfaceArea = pictureWidth * pictureHeight;

  // 여기에서 함수의 호출!  
  circleSurfaceArea = circleArea(circleRadius);// [4.11]
}
(프로그램의 나머지의 부분에 관해서는 [3]의 샘플을 보아 주십시오)

인수전달
[4.4]에 새롭게 두개의 float형의 변수를 추가하고, [4.7]에 변수circleRadius를 초기화(값을 대입)했습니다. 가장 중요한 것은 [4.11], circleArea()함수를 읽고 있는 부분입니다. 보아서 아는 대로, 변수circleRadius가 괄호 안에 두어지고 있습니다. 이것은 circleArea ()의 「인수」라고 불립니다. 
circleRadius가 가지는 값이 함수circleArea ()에 받습니다. 그리고, circleArea ()이 실제의 계산 처리를 마치면 함수는 계산 결과를 되돌립니다. [4.11]에서는 함수circleArea ()의 결과를 변수circleSurfaceArea에 대입하고 있습니다. [3]로 본 circleArea()함수를 [5]과 같이 고쳐 써 봅시다 (circleArea()함수만 이하에 싣습니다). 

[5]
circleArea (float theRadius)// [5.1]
{
  float theArea;
  theArea = 3.1416* theRadius * theRadius;//원주율×반경의 자승 [5.4]
  return theArea;
}

[5.1]행에서, circleArea()함수의 입력(인수)로서 float형의 값이 필요한 것을 선언하고 있습니다. 이 입력을 받으면, 그 값을 theRadius라고 하는 이름의 변수에 세트 합니다. 그리고 [5.4]의 계산 결과를 보존해 두기 위한 변수가 필요하므로, main()함수 [4.4]과 같이, [5.3]에서 변수theArea를 선언하고 있습니다. 변수theRadius의 선언은 [5.1]의 괄호 안에서 끝나고 있는 것에 주의해 주십시오. 
[5.5]에서는 계산 결과를, 이 함수를 호출한 원래의 함수에 되돌리고 있습니다 (함수의 결과를 반환값이라고 합니다). 결과로서, [4.11]에 변수circleSurfaceArea에 계산 결과가 세트 됩니다. 
 [5]의 함수의 샘플에는 나중 하나 해야 할 것이 남아있습니다. 함수가 되돌리는 값(반환값)의 데이터의 형을 지정하지 않으면 안됩니다. 컴파일러가 그것을 필요로 하고 있기 때문입니다. 거기에서, [6.1]과 같이 반환값의 형으로서 float를 지정합니다. 

[6]
float circleArea (? oat theRadius)// [6.1]
{
  float theArea;
  theArea = 3.1416* theRadius * theRadius;
  return theArea;
}

[6.1]의 선두의 float는, 함수에 의해 되돌려지는 데이터 (즉 여기에서는 변수theArea의 값)이 float형인 것을 내보이고 있습니다. main()함수 [4.8]에서 circleArea()로부터 되돌아가 값을 받는 변수circleSurfaceArea도 같은 형(역시 float)이다라고 하는 것을, 프로그래머로서 확실히 확인해 주십시오. 그렇게 하면 컴파일러로부터 나중에 불평을 되는 걱정은 없습니다. 
 모든 함수가 인수를 필요로 하고 있는 것이 아닙니다. 만약 인수가 없어도 내용이 없는 괄호 ()는 필요합니다. 

[7]
int throwDice()
{
  int noOfEyes;
  //1로부터 6의 값을 랜덤해서 만드는 코드
  return noOfEyes;
}

반환값
모든 함수가 반환값을 가지는 것이 아닙니다. 함수에 반환값이 없을 경우, void형을 지정합니다. 또 return명령은 있어도 없어도 괜찮습니다. 반환값이 없는 함수로 return을 사용할 경우, return의 뒤에는 변수명이나 값등은 쓰지 않습니다. 

[8]
void beepXTimes(int x)
{
  //비프 소리를 x회 울리는 코드
  return;
}

다음 pictureSurfaceArea ()과 같이 복수의 인수를 잡는 함수의 경우, 각인수는 콤마에서 단락 짓습니다. 

[9]
float pictureSurfaceArea (float theWidth,float theHeight)
{
  //코드
}

main()함수는 int형의 값을 되돌리는 것이라고 결정되어 있습니다. 물론 return이 필요합니다. 기본적으로는 프로그램에 문제가 발생하지 않은 것을 나타내기 위해서, 0을 되돌립니다 [10.9]. main()함수의 리턴값은 int이므로, [10.1]과 같이 main() 앞에 int를 씁니다. 그러면 지금까지의 코드를 모아 봅시다.

[10]
int main ()
{
  float pictureWidth, pictureHeight, pictureSurfaceArea,  circleRadius, circleSurfaceArea;
  pictureWidth = 8;pictureHeight = 4.5;
  circleRadius = 5.0;
  pictureSurfaceArea = pictureWidth * pictureHeight;
  circleSurfaceArea = circleArea(circleRadius);// [10.9]
  return  0;// [10.10]
}
float circleArea (float theRadius)// [10.13]
{
  float theArea;
  theArea = 3.1416* theRadius * theRadius;
  return theArea;
}

마무리 
[10]을 보아서 아는시는 대로, [10.1]에 main()함수가, [10.13]에 스스로 정의한 함수가 있습니다. 만약 이 코드를 컴파일하면, 컴파일러는 아직 잘 컴파일 할 수 없습니다. [10.9]줄로, circleArea()라고 하는 이름의 함수는 모르는 거라고 불평을 합니다. 왜일까요? 정말로 컴파일러는 main()로부터 읽기 시작했을때, 잘 모르는 단어를 우연히 부닥쳤다라고 하는 것인 것 같습니다. 그리고 컴파일러는 여기에서 읽는 것을 그만두고, 당신에게 경고를 냅니다. 컴파일러를 충족시키기 위해서는, main() 앞에 함수의 정의(전문적으로는 「함수 프로토타입 선언」이라고 말합니다)을 추가하면 OK입니다. [11.1]. 특별히 어려운 것은 없습니다. 행의 마지막에 세미콜론을 두는 것이외는 [10.13]줄과 완전히 같습니다. 이것으로, 컴파일러는 함수를 찾아도 놀라서 경고를 내는 것은 없어집니다. 

[11]
float circleArea (float theRadius);// function declaration
int main()
{
  이후 [10]에 같음

이제 프로그램을 실제로 컴파일합니다만, 우선은 몇몇의 나머지의 작업을 처리합시다. 
프로그램을 코딩할 때는, 나중에 코드를 재이용할 수 있도록 주의를 기울입시다. 이 프로그램도 [12]과 같이 rectangleArea()함수를 만들고, main()함수로부터 부르게 변경할 수 있습니다. 만약 함수를 한 번밖에 사용하지 않을 경우라도, 함수에 정리하는 것은 유익한 것입니다. main()함수는 보다 읽기 쉬워져, 디버그할 때도 버그가 어디에 있는 것인가 보다 찾기 쉬워집니다. 아주 긴 명령을 전부 체크할 필요는 없어지고, 안괄호에서 둘러싸진 함수의 내용만을 체크하면 됩니다.
 
[12]
float rectangleArea (float length,float width)
{
  return (length * width);
}

이러한 간단한 함수의 경우, [12.3]과 같이 계산과 결과를 돌려주는 것을 하나로 정리할 수 있습니다. [10.15]에서는 보다 이해하기 쉽게 하기 위해서, 실제로는 불필요한 변수theArea를 정의하고 있습니다. 

 이 장에서 작성한 함수는 하찮은 것입니다만, 함수의 정의(즉 최초의 행)를 변경하지 않는 한, 호출하는 측의 함수에 아무런 영향도 줄 일 없이 함수의 내용을 변경할 수 있는 점은 매우 중요하므로 기억해 두어 주십시오. 
 예를 들면 함수내의 변수의 이름을 자유로 변경할 수 있고,또 변경해도 정확하게 동작하고, 다른 코드에 영향을 주기도 않습니다. 누군가가 작성한 함수를, 안에서 무엇을 하고 있는 것일지를 몰라도 사용할 수도 있습니다. 그 때 알아둬야 할 것은 함수를 어떻게 해서 사용하면 좋을가, 즉 :

 ·함수의 이름
 ·함수가 취하는 인수의 수, 순번, 데이터의 형
 ·반환값으로서 어떠한 데이터를 반환하는가 ,및 데이터의 형

샘플[12]의 경우에는
 ·rectangleArea
 ·인수는 둘, 최초의 인수가 세로폭, 다음이 가로 폭, 형은 어느쪽도 float
 ·함수는 어떠한 반환값을 반환하고, 그 형은 float ([12.1]의 행으로부터 압니다)

변수의 보호
함수내부의 코드는 main()함수나 기타의 함수로부터 분리되고 있습니다. 그러므로 어떤 함수의 내부의 변수의 값은, 가령 다른 함수내부에서 같은 이름의 변수를 사용하고 있어도, 통상은 그 변경의 영향을 받을 것은 없습니다. 
 이것은 Objective-C의 가장 중요한 기능입니다. 5장에서 이 기능에 대해서 다시 설명합니다. 그러나 그 전에, 샘플 [11]을 Xcode에서 움직여 봅시다. 

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

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

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
00:시작하기 앞에  (0) 2011.06.21
Posted by tklee
소개
처음에 이해하기 쉬운 변수의 이름을 사용하는 것으로, 코드를 보다읽이 쉽고, 이해하기 쉽게 할 수 있다고 하는 것은 이미 배웠습니다. 
//[1]
float pictureWidth, pictureHeight, pictureSurfaceArea;
pictureWidth = 8.0;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;
현재는 몇줄 안되는 길이의 예제를 사용하고 있습니다만, 실제로는 더욱 긴 코드를 쓰게 됩니다. 프로그램을 쓸 때는, 실제로 당신이 어떤 것을 만들고 싶은 것일지를 생각할뿐만 아니라, 정확하게 문서화되고 있을지도 고려 할 필요가 있습니다. 잠시동안 프로그래밍으로부터 멀어진 뒤로 코드로 변경을 첨가하고 싶어졌을 때, 코드의 각 부분이 어떤 역할을 하고 있는지, 왜 이러한 차레로 코드가 나열해 있는 것는지를 재빠르게 상기시킬수 있기 때문에, 코멘트(코드 안의 주석)가 큰 힘이 됩니다. 우선은 코멘트부터 쓰기 시작하는 프로그래머조차 있는 정도입니다. 
 어쨌든, 당신의 코드에 코멘트를 써 넣는 작업에 얼마만큼의 시간을 할애하는 것을 강하게 추천합니다. 코멘트에 써버린 시간은 어차피 여러가지 형태로 만회할 수 있는 것을 보증합니다. 또, 당신의 코드를 다른 사람과 공유할 때, 당신이 제공하는 코멘트에 의해 그 사람은 재빠르게 당신의 코드가 이해가 갈 것입니다. 
 
주석달기
코멘트를 입력하기 위해서는, 두개의 슬래시(slash)를 코멘트의 문장의 머리에 둡니다. 
// 이것이 코멘트입니다
Xcode에서는 코멘트는 보통 녹색으로 표시됩니다. 만약 코멘트가 길게 여러행에 걸칠 때는 /* */의 사이에 둡니다. 
/* 이것이 복수행에 건너는 코멘트입니다. */

Outcommenting
여기서는 약간만 프로그램의 디버그에 대해서 설명합니다. Xcode는 디버그를 위한 훌륭한 기능을 가지고 있습니다. 디버그를 위한 낡은 방식의 하나에 outcommenting 이라고 부르는 방식이 있습니다. 당신의 코드의 일부를 /* */에서 둘러싸는 것으로, 그 부분의 기능을 일시적으로 무효로 한다 (주석처리한다) 수 있습니다. 문제가 있음직 한 부분을 무효로 하는 것으로 기타의 부분이 정확하게 동작하고 있는 것인가 아닌가를 확인할 수 있고, 버그의 장소를 찾을 수 있습니다. 만약 주석처리한 부분이 특정한 변수에 값을 대입하는 역할을 가지고 있을 경우등은, 변수에 적당한 값을 대입하는 일행을 일시적으로 추가하는 것으로, 코드의 나머지의 부분에 문제가 없을지 조사할 수 있습니다. 

왜 코멘트가 필요? 
코멘트의 중요성은 아무리 강조해도 지나치지 않습니다. 코드가 무엇을 가고 있는 것일지를 평범한 문장으로 쓰는 것도 유용합니다. 이것에 의해 코드가 무엇을 하고 있는 것일지 추측할 필요가 없어지고, 만약 그 부분으로 문제를 경험한 것이라면, 그 문제도 곧 파악할 수 있게 됩니다. 예를 들면 만약 무엇인가의 책에 설명되고 있는 특정한 수학적 기능을 사용하고 있을 경우, 관계가 있는 코드의 가까이 그 책의 참조를 두어야 하지요. 
 때로는, 실제의 코드를 쓰기 앞에 코멘트를 써버리는 것도 유익합니다. 코멘트를 쓰는 것으로 당신의 생각을 매듭지을 수 있고, 그 결과 코드도 보다간단한 것이 될 것입니다. 
 이 가이드의 예제 코드는, 본문내에 많은 설명이  있기 때문에, 평소 내가 쓰고 있는 것 같은 코멘트는 기입하지 않았습니다. 

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

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

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
00:시작하기 앞에  (0) 2011.06.21
Posted by tklee
소개
만약에 당신이 차의 운전을 배울 때, 여러가지 일을 동시에 처리하는 연습을 할 필요가 있습니다. 클러치와 가솔린과 브레이크 페달등 각각에 대해서 알고 있지 않으면 안됩니다. 프로그래밍도 같아서, 많은 것을 마음에 새겨 둘 필요가 있습니다. 그렇치 않으면 당신의 프로그램은 크래쉬해버리는 것이지요. 어쩌면 당신은 운전을 배우기 시작하기 전부터 차의 내부구조 정도야 훤히 알고 있었을지도 모르겠습니다만, Xcode를 사용해서 프로그래밍을 시작하기 전에 이러한 잇점은 없습니다. 당신을 혼란시키지 않도록, 실제의 개발 환경에 관한 자세한 설명은 뒤로 하고 , 우선은 당신이 잘 알고 있을 법한 간단한 수식을 Objective-C의 코드로 공부를 시작하기로 합시다. 

초등학교에서 다음과 같은 계산식의 빈곳 체우기 문제를 했을겁니다.
2 + 6 = ... 
... = 3 * 4 (*기호는 컴퓨터로 곱하기(×)을 나타내는 일반적인 기호입니다) 중학교에 들어가면 이러한 공백을 사용하는 것은 남들보다 뒤쳐지고 , x와 y라고 불리는 변수 (혹은 「대수」라고 하는 부르는 법)을 사용하게 됩니다. 다시 생각해 보면, 이러한 대수롭지 않은 기호의 변경이 당시는 왜 혼란이라고 어렵게 느낀 것일까요?
2 + 6 = x
y = 3 * 4

변수
Objective-C에서도 마찬가지로 변수를 사용합니다. 변수는, 예를 들면 숫자와 같은, 특정한 데이터를 나타내기 위한 편리한 이름에 지나지 않습니다. 아래에 변수에 특정한 값을 대입하는 Objective-C의 명령 문장, 즉 코드가 있습니다. 

//[1]
x = 4;

세미콜론
x라고 하는 이름의 변수에 4 라고 하는 값이 대입됩니다 (「x는 4이다」라고 하는 의미가 아니므로 주의. 어디까지나 값의 대입입니다). 명령 문장의 마지막에 세미콜론(;)이 있는 것에 주의해 주십시오. 
모든 명령 문장의 마지막에는 세미콜론을 두지 않으면 안됩니다. 왜일까요? 샘플 [1]의 코드는 기계적으로 보일지도 모르겠습니다만, 컴퓨터는 이 코드라도 무엇을 해야 할지 완전히 이해가 가지 않습니다. 당신이 입력한 이러한 문장을, Mac이 이해가 가는 0과 1의 2진수로 변환하기 위해서는, 컴파일러라고 불리는 특수한 프로그램이 필요합니다. 인간이 입력한 문장을 읽고, 이해하는 것은 컴파일러에 있어서 매우 대단한 작업입니다. 그래서 당신은 특정한 단서, 예를 들면 특정한 명령이 어디에서 끝나고 있는 것인가라고 하는 정보를 컴파일러에 줄 필요가 있습니다. 그것이 세미콜론이 나타내는 의미입니다. 

 만약 세미콜론을 하나라도 당신의 코드에 빼먹는다면 그 코드는 컴파일(source code를 Mac이 실행할 수 있는 형식으로 변환하는 것) 할 수 없고, Mac이 실행가능한 프로그램을 만드는 것이 되지 않습니다. 단, 컴파일러가 당신의 코드를 컴파일 할 수 없을 때는 당신에게 불평을 하므로, 그다지 지나치게 걱정하지 않아도 괜찮습니다. 다음의 장에 설명하겠습니다만, 컴파일러는 코드의 어디가 틀린 것인지 찾는 것을 도와 줍니다.
 
변수의 이름을 붙이기
변수의 이름자체는 컴파일러에 있어서는 특별한 의미는 없습니다만, 이해하기 쉬운 변수의 이름은 프로그램을 보다 읽기 쉽고, 보다 이해하기 쉽게 합니다. 그리고 코드 안의 에러를 발견할 때에 큰 도움이 됩니다. 
 프로그램의 에러는 일반적으로 버그라고 부르고 있습니다. 또 버그를 찾아 수정하는 것을 디버그라고 부릅니다. 
그 때문에, 실제의 코드를 쓸 때, 예를 들면 x 처럼 무엇을 나타내는지 이해하기 힘든 변수의 이름은 피해야 합니다. 예를 들면 이미지의 가로 폭을 나타내는 변수라면, pictureWidth라고 하는 이름을 기입해야 하지요 [2]. 
//[2]
pictureWidth = 8;

세미콜론 붙히는것을 잊어먹는것은 컴파일러에 있어서 큰문제가 된다고 하는 것부터, 프로그래밍은 사소한부분까지 중요하다고 하는 것을 알 것입니다. 주의해야 할 잘잘한 규칙의 하나로서, 코드는 대문자와 소문자를 구별한다고 하는 것을 말할 수 있습니다. pictureWidth라고 하는 변수명은 pictureWIDTH나 PictureWidth라고 하는 이름과는 같지 않습니다. 일반적인 규약을 따라, 나는 몇몇의 단어를 조합해서 변수명으로서 사용하고, 최초의 단어의 끝 머리 문자는 소문자에서, 그 이외의 단어는 대문자로 시작하도록 하고 있습니다. 샘플 [2] 처럼합니다. 이러한 규칙을 지키는 것으로, 프로그래밍중에 대문자소문자의 혼동을 줄일 수 있습니다. 
변수의 이름은 하나의 단어(때에로 한 문자)로부터 만들어 내니 주의해 주십시오. 
 프로그래머는 자유롭게 변수의 이름을 선택할 수 있습니다만, 지켜야 할 몇개의 룰도 존재합니다. 그 룰 모두를 설명할 수도 있습니다만, 현시점으로 그것을 읽는 것은 조금 지루한 것이지요. 지켜야 할 최소의 룰은, Objective-C에 의해 이미 예약되고 있는 이름 (즉 Objective-C에 있어서 특별한 의미를 가지는 단어)을 사용해서는 안된다라고 하는 것입니다. 단어를 조합해서 변수명을 만들면 (예를 들면 pictureWidth), 그 변수명은 문제 없습니다. 변수명을 읽이 쉽게 하기 위해서는 변수명 안에 적당히 대문자를 사용하는 것들 입니다. 이 규칙을 지키는 것으로, 당신이 만드는 프로그램의 버그를 줄일 수 있을 것입니다. 
몇개의 룰을 배워 이제 단락을 마치기로 합시다. 문자의 이외에 숫자도 사용할 수 있습니다만, 변수명을 숫자로부터 시작할 수는 없습니다. 또 underscore(_)을 사용할 수도 있습니다. 아래에 몇몇의 변수이름 예제가 있습니다. 

옳은 변수명의 예
door8k
do8or
do_or

잘못된 변수명의 예
door  8(공백을 포함하고 있다)
8door (숫자로부터 시작되고 있다)

언급되지 않는 예
Door8(대문자로부터 시작되고 있다)


계산내에서 변수를 사용
이것으로, 변수을 어떻게 값을 주면 좋을지 알았으므로, 계산을 실행할 수 있습니다. 사진의 면적을 계산하는 코드를 봅시다. [3]
 
//[3]
pictureWidth=8;
pictureHeight=6;
pictureSurfaceArea= pictureWidth*pictureHeight;
놀랍게도 컴파일러는 공백의 유무는 무시합니다 (하지만 변수명이나 키워드는 제외함). 코드를 더 보기 쉽게 하기 위해서, 공백을 사용할 수 있습니다. 
//[4]
pictureWidth = 8;
pictureHeight = 6;
pictureSurfaceArea = pictureWidth * pictureHeight;

정수와 실수
이제 예제 [5], 특히 최초의 2줄에 주의해서 봅시다. 
//[5]
pictureWidth = 8;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;
수치는 크게 나누어서 2종류로 구별할 수 있습니다. 정수값(integer)과 실수(float)입니다. 
[5.1]과 [5.2]이 각각의 수치의 예입니다. 정수값은, 예를 들면 어떠한 명령을 특정한 회수로 되풀이하기 위해서 회수를 꼽는 (제7장 참조) 때등에 사용됩니다. 또 실수치,혹은 부동 소수치는, 예를 들면 야구의 타율등을 나타내는데도 사용합니다. 
샘플 [5]은 아마도 제대로 동작하지 않습니다. 문제는, 당신이 사용하려고 하고 있는 변수의 이름과, 그 변수가 가지는 데이터의 타입(데이터의 「형」이라고 부릅니다), 즉 정수값인가 소수치인가를 사전에 컴파일러에 전하지 않으면 안된다는 점입니다. 전문적으로 말하면 이것은 「변수의 선언」이라고 불립니다. 
//[6]
int pictureWidth;
float pictureHeight, pictureSurfaceArea;
pictureWidth = 8;
pictureHeight = 4.5;
pictureSurfaceArea = pictureWidth * pictureHeight;

[6.1]의 행의 처음에 「int」라고 하는 단어는, 변수pictureWidth가 정수값int형인 것을 나타내고 있습니다. 다음 행에서는, 변수명을 콤마에서 매듭짓는 것으로, 한번에 둘의 변수를 선언하고 있습니다. 더욱 자세하게 말하면 [6.2]의 기술은 둘의 변수 둘다를 소수치float형인 것 가리키고 있습니다. 이 경우, pictureWidth만을 다른 둘의 변수와 다른 형으로 하는 것은 조금 이상합니다만, int와 float를 곱셈하면 그 결과가 float가 되기 위해서, [6.2]에서는 pictureSurfaceArea라고 하는 변수를 float로서 선언하고 있는 것이라고 하는 것을 이해해 주십시오. 

컴파일러는 왜, 변수가 정수일지 그것과도 소수를 포함하는 수치일지를 알 필요가 있습니까? 컴퓨터 프로그램은, 실행할 때 데이터를 보존하기 위해서 컴퓨터의 메모리의 일부를 필요로 합니다. 그 때문에 컴파일러는 각변수를 위해서 메모리(바이트)영역을 확보하고 있습니다. 다른 형의 데이터, 이 경우 int와 float는, 각각 다른 메모리의 양이라고 표현(메모리 위로 어떻게 써 넣을 것인가)이 필요하기 때문, 컴파일러는 각각의 변수에 필요한 것 만큼의 메모리와 옳은 표현을 준비할 필요가 있습니다.

만약 매우 큰 수치나 매우 정밀도가 높은 소수의 수치을 사용하고 있으면, 어떻게 됩니까? 그것들의 큰 값은 컴파일러가 준비한 조금의 메모리 용량에 끝까지 들어가지 않게 되어버립니까? 그 대로. 이것에는 둘의 해결 방법이 있습니다. 하나는 int,float보다도 큰 (혹은보다 정밀도가 높다) 수치를 가질 수 있는 별도의 변수를 사용하는 것입니다. 많은 시스템은 long long과 double라고 하는 보다 큰 변수의 타입을 가지고 있습니다. 만약 이 변수에조차 끝까지 들어가지 않을 경우, 두번째의 해결 방법입니다만, 프로그래머로서 그 문제를 경계하는 것이 당신의 일입니다. 어쨌던 이것은 이러한 입문 가이드의 내용에는 어울리지 않으므로 적당히 해 둡니다. 
 덧붙이자면, 정수값도 소수치도 예를 들면 당신의 은행계좌와 같이 큰값을 다룰 수 있습니다. 만약 변수가 음수의 값이 될 수 없음을 알고 있는 것이라면, 그 변수가 취급할 수 있는 수치의 범위를 넓힐 수 있습니다. 
//[7]
unsigned int chocolateBarsInStock;
초콜릿 바의 수에 음수의 값은 있을 수 없으므로, 여기에서는 unsigned int를 사용할 수 있습니다. 
unsigned int타입의 변수는 0이상의 값을 다룰 수 있습니다. 

변수의 선언
변수의 선언과 동시에 그 변수에 값을 대입하는 것도 가능합니다. 
//[8]
int x = 10;
float y=3.5, z = 42; 이렇게 하는 것으로 타이핑의 양을 조금만 절감할 수 있습니다. 

수학적 연산
이전의 샘플로, 곱셈명령을 시험해 보았습니다. 이하의 기호 (정식으로는 연산자라 부릅니다)에 의해, 기본적인 수학적 계산을 할 수 있습니다. 
+ 가산
- 감산
* 곱셈
/ 나눗셈

연산자를 사용하는 것으로 여러가지 종류의 계산을 할 수 있습니다. 만약 프로의 Objective-C프로그래머의 코드를 읽는 기회가 있으면, 다른점을 알아 차릴겁니다. 
 x = x + 1;이라고 쓰는 대신 프로그래머는 [9]이나 [10]과 같은 서식을 잘 사용합니다. 
//[9]
x++;
//[10]
++x;
어느쪽의 의미도 「x를 1 늘린다」입니다. 단 경우에 따라서는, ++이 변수 앞에 있을지 뒤에 있을지에 의해 큰 차이가 있습니다. [11]과 [12]의 샘플을 보아 주십시오. 
//[11]
x =10;
y =2*(x++);
//[12]
x =10;
y =2*(++x);
[11]의 코드가 실행되면, y는 20에, x는 11이 됩니다. 즉 2*x가 y에 대입된 뒤, x의 값이 1 늘려집니다. 대조적으로 [12.2]에서는, 2을 곱하기 전에 x의 값이 1 늘려집니다. 그러므로 실행후는 x는 11에 y는 22이 됩니다. 샘플 [12]은 다음 샘플 [13]과 같은 의미입니다. 
//[13]
x = 10;
x++;
y = 2* x;
따라서 프로그래머는 둘의 행을 한행으로 간추릴 수 있습니다. 개인적으로는 [11]과 같은 서식은 프로그램을 읽기 어렵게 한다고 생각합니다. 이러한 생략을 하는 것도 괜찮습니다만, 거기에는 버그의 가능성도 있다고 하는 것에 주의해 주십시오. 

괄호
당신이 이미 어떻게든 고등학교를 졸업한 후라면, 이것은 이미 완전히 옛날의 기억이 되고 있을지도 모르겠습니다만, 괄호는 계산을 실행하는 순번을 지정하는데도 사용되는,이라고 하는 것을 상기해 주십시오. 또 *과 /은 +과 -보다도 우선됩니다. 즉 4+2*3은 10이 됩니다. 괄호를 사용하는 것으로 우선 순위가 낮은 +이나 -을 먼저 실행할 수 있습니다. 예를 들면 (3+4)*2은 14이 됩니다. 

나눗셈
나눗셈연산자를 사용할 때는 대수롭지 않은 주의가 필요합니다. int에 대하여 사용할 경우와 float의 경우에서는 결과가 다르기 때문입니다. 다음 [14, 15]의 예를 보아 주십시오. 
//[14]
int x = 5, y = 12, ratio;
ratio = y / x;
//[15]
float x = 5, y = 12, ratio;
ratio = y / x;
[14]의 예에서는 결과는 2이 됩니다. [15]의 샘플로만, 아마 당신이 기대하고 있을 것인 결과 2.4을 얻을 수 있습니다. 

 나머지 구하기
그다지 당신이 아마 그다지 친숙하지 않을 연산자로서 %(나머지)가 있습니다. 이 연산자는 퍼센티지(percentage)를 계산하는 것이 아닙니다. %의 결과는 앞의 숫자를 뒤의 숫자로 나누었을 때의 나머지입니다. (수치뒤의 숫자가 0, %의 동작은 정의되고 있지 않습니다). 
//[16]
int x = 13, y = 5, remainder;
remainder = x % y;
변수remainder의 결과는 3이 됩니다. 
아래에 몇몇의 %계산의 결과를 보여줍니다.
21 % 7 is equal to  0
22 % 7 is equal to  1
23 % 7 is equal to  2
24 % 7 is equal to  3
27 % 7 is equal to  6
30 % 2 is equal to  0
31 % 2 is equal to  1
32 % 2 is equal to  0
33 % 2 is equal to  1
34 % 2 is equal to  0
50 % 9 is equal to  5
60 % 29 is equal to  2
% 연산 아이는 때로 편리하게 사용할 수 있습니다만, int형의 값에만 사용할 수 있다고 하는 점에 주의해 주십시오. 
%를 사용방법의 하나로서 짝수인가 홀수인가의 판정이 있습니다. 짝수라면 % 2의 결과가 0이 됩니다. 그렇지 않으면 홀수입니다. 예로서 아래에 샘플을 소개합니다. 
//[17]
int anInt;
//Some code that sets the value of anInt
if ((anInt % 2)==0)
{
  NSLog(@”anInt is even”);
}
else
{
  NSLog(@”anInt is odd”);
}

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

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

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
00:시작하기 앞에  (0) 2011.06.21
Posted by tklee
우리들은 당신을 위해서 이 책을 썼습니다. 무상으로 제공하는 대신, Mac 선전을 조금 시켜 주십시오. 모든 Mac사용자는 조금의 노력으로 자신이 좋아하는 컴퓨터의 선전을 할 수 있습니다. 여기에서

당신의 Mac를 더욱 편리하게 하면, 보다 많은 사람을 Mac으로 끌어 당길 수 있습니다. 그러므로, Mac의 정보를 모은 웹 사이트를 방문해, Mac의 잡지를 읽고, 새로운 정보를 모아 주십시오. 물론, Objective-C나 AppleScript를 배워서 그것들을 사용하는 것도 훌륭한 것입니다. 비즈니스에 있어서는, AppleScript를 사용하는 것으로 많은 돈과 시간을 절약할 수 있습니다. Bert의 초보자에 적합한 무료AppleScript가이드를 읽어보세요.
http://www.macscripter.net/books
 
Mac를 더욱 두드러지게 하는 것으로, 모든사람이 전부PC를 사용하고 있는 것은 아닌 것이라고 하는 것을 온세계에 어필합시다. 멋진 Mac 티셔츠를 입어서 밖을 돌아다니는 것도 하나의 방법입니다만, 집안에 앉은 채로 Mac를 어필하는 방법조차 있습니다. 액티비티 모니터(어플리케이션(application) 폴더내의 유틸리티 폴더에 들어 있습니다)을 기동하면, 당신의 Mac는 CPU의 전파워를 그저 이따금 밖에 다 쓰지 않고 있는 것에 알아 차릴 것입니다. 세계의 과학자들은 몇개의 분산 컴퓨팅 프로젝트(DC), 예를 들면 Folding@home 이나 SETI@home 등에 공헌하고 있습니다. 그프로젝트는 이러한 사용되지 않고 있는 CPU파워를 이용하고 공공의 이익에 쓸모있게 하고 있습니다.

우선은 DC클라이언트라고 불리는 작은 무료 프로그램을 다운로드해서 기동해 보아 주십시오. 이 DC클라이언트는 가장 낮은 우선 순위로 동작합니다. 만약 당신이 Mac상에서 무엇인가의 프로그램을 실행하고, 그 프로그램이 전CPU파워를 필요로 할 때는, DC클라이언트는 즉시 정지합니다. 그래서 당신은 DC클라이언트가 움직이고 있는 것에 알아 차리지 않지요. 그러면, 이것이 어째서 Mac의 도움이 됩니까? 대부분의 DC프로젝트는 작업 그룹의 처리량 랭킹을 웹 사이트에 올리고 있습니다. 만약 당신이 Mac팀에 참가하면 (랭킹 위로 이름이 있는 것을 알아차린다고 생각합니다만), Mac팀의 순위를 올리는 원조가 됩니다. 그리고 Mac이외의 컴퓨터의 사용자는, Mac이 얼마나 도움이 되고 있을지 알아 차리는 것이지요. 세계에는 수학이나, 난치병치료등 각양각색의 DC프로젝트가 있으므로 원하는 프로젝트를 선택해 주십시오. 
http://distributedcomputing.info/projects.html
 
하나의 문제가 있다면 중독되버리는 것입니다!
 
Mac를 세계최고의 소프트를 소유하는 플랫폼으로 합시다. 엄청난 프로그램을 내가 만들어내는 것뿐만 아니고 당신이 사용하고 있는 소프트를 만든 개발자에 대하여, 정중한 피드백을 돌려주는 것을 습관으로 합시다. 가령 프로그램을 조금 만져 보아서 마음에 들지 않았다고 한들, 왜 마음에 들지 않았는지를 개발자에게 알립시다. 버그 리포트는, 버그에 우연히 만남했을 때에 간 처리동작을 가능한 한 정확하게 전합시다. 
당신이 사용하고 있는 소프트웨어의 대가를 지불합시다. Mac의 소프트웨어 시장에서 이익을 올릴 수 있는 한, 개발자는 훌륭한 소프트를 계속해서 만듭니다. 

프로그래밍에 흥미를 가질 것 같은 적어도 3명이상의 Mac사용자에게, 이 책과 다운로드할 수 있는 곳를 가르쳐 주십시오. 혹은 그들에게 아래의 4개의 충고를 해 주십시오. 

OK, 당신이 DC클라이언트를 다운로드하고 있는 동안 공부를 시작할까요! 

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

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

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
00:시작하기 앞에  (0) 2011.06.21
Posted by tklee