ubuntu dos2unix

sudo apt-get install tofrodos

 

sudo ln -s /usr/bin/fromdos/usr/bin/dos2unix sudo ln -s /usr/bin/todos /usr/bin/unix2dos

 

apt-get install mtd-utils 


OS X Lion을 디지털(AppStore)로 구매할것인가 오프라인 패키지로 구매할것인가



## Lion을 디지털(AppStore)로 구매할것인가 오프라인 패키지로 구매할것인가..에 대한 조언 ##

OS X 라이언은 디지털패키지(AppStore) 로 구매하는 것이 바람직합니다.

여태동안 타이거부터 시작해서 새로운 OS가 나올때마다 CD로 구매했던 경험으로 비춰봐선 말이죠.

리테일 박스로 구매하게 될 경우의 문제는

1. 해당 제품을 구매한 시점의 이후에 나오는 맥 하드웨어에는 "리테일을 가지고 있음에도 불구하고" OS X가 설치되지 않습니다.

쉽게 설명해보죠.

7월 16일 라이언 발표 (그리고 DVD로 구매)
- 현재까지 발표된 모든 맥 제품에 설치가능

12월 1일 가상의 맥북프로 발표
- 새로운 그래픽카드 혹은 컨트롤러를 달고 발표된다면 7월달에 구매한 OS X가 아예 설치되지 않습니다.(호환되지 않는 하드웨어라는 에러를 뱉어냄)
 
- 물론 맥북프로에 동봉된 DVD로 설치가능하지만, 이를 분실하는 날에는 리테일을 가지고 있음에도 불구하고 설치 불가..의 현실을 겪게 되죠. 바로 이 점이 윈도 운영체제와는 다른 점입니다. 윈도는 해당 드라이버가 없으면 기본 드라이버로 일단 구동하게 한 다음, 제조사에서 제공하는 드라이버CD 혹은 인터넷에서 다운받아 설치할 수 있는 반면, 맥은 자사제품이 한정되어있음에도 불구하고 이런 조치가 전혀 안되고 있죠. 


2. 설치 이후의 업데이트 절차 간소화

아시다시피 지속적인 OS 마이너 업데이트가 있습니다. 10.7.1, 10.7.2 이런식으로 말이죠.
클린설치 이후 큰 시간을 잡아먹는 것 중의 하나가 바로 저런 업데이트 설치입니다. 하지만 AppStore로 구입할 경우, 마이너 업데이트가 나올때마다 해당 앱(OS X)도 업데이트 되기 때문에 항상 최신의 라이언 이미지를 유지할 수 있습니다.


맥에서 네트워크 속도측정 방법 Macbook

이번 포스팅에서는 로컬네트워크에서의 맥과 윈도간 속도측정 방법을 소개합니다. 


네트워크 퍼포먼스를 쉽게 알 수 있는 방법으로는 iperf가 무료에다가 멀티플랫폼, 가볍다는 장점때문에 강력하게 추천합니다.


단, 아래 방법은 "로컬네트워크"간의 속도측정방법이며, 공유기 바깥에 있는 네트워크에서는 업로드 속도만 측정되니 주의해야 합니다.


이 포스팅은 클리앙(맥당)에도 같이 올라갑니다.


================================= 


윈도용 실행파일 Download link

http://dl.dropbox.com/u/8336675/iperf.exe


맥용 소스파일 Download link

http://sourceforge.net/projects/iperf/files/iperf-2.0.5.tar.gz/download


맥용 바이너리(실행파일) 만드는 법

1. 받은 소스 파일의 압축해제

2. 디렉터리가 생성되면 터미널 실행 (유틸리티->터미널)

3. 아래 명령어를 입력하여 컴파일 및 설치

cd ~/Downloads/iperf-2.0.5 (압축해제한 디렉터리로 이동해야 합니다)

./configure

make

sudo make install (자기 계정의 패스워드 입력)

cd /usr/local/bin

sudo mv iperf /usr/bin (자기 계정의 패스워드 입력)



-- 이제 맥용 실행파일이 만들어졌으니 속도측정을 해봐야겠죠. ---


(맥 기준) 업로드 속도측정


윈도에서 iperf 서버모드 실행 (실행..창에서 다음 명령어 입력, 윈도에서의 실행방법은 http://linhost.info/2010/02/iperf-on-windows/ 에서 확인가능)


iperf -s 


맥에서 iperf 클라이언트 모드 실행 (터미널에서 실행)

iperf -c 윈도IP -i 1 -t 20


!! 참고 !!

자신의 IP를 확인하는 법

맥: 터미널에서 

ifconfig

-> 무선이면 en1, 유선이면 en0에 나오는 정보 중, inet에 나와있는 IP를 확인하면 됩니다.

 

윈도: 실행..에서

ipconfig



--- 속도측정 결과 ---


MacBookPro:Downloads$ iperf -c 192.168.1.3 -t 20 -i 1

------------------------------------------------------------

Client connecting to 192.168.1.3, TCP port 5001

TCP window size:  129 KByte (default)

------------------------------------------------------------

[  3] local 192.168.1.2 port 53383 connected with 192.168.1.3 port 5001

[ ID] Interval       Transfer     Bandwidth

[  3]  0.0- 1.0 sec  19.0 MBytes   159 Mbits/sec

[  3]  1.0- 2.0 sec  20.0 MBytes   168 Mbits/sec

[  3]  2.0- 3.0 sec  20.0 MBytes   168 Mbits/sec

[  3]  3.0- 4.0 sec  20.0 MBytes   168 Mbits/sec

[  3]  4.0- 5.0 sec  20.4 MBytes   171 Mbits/sec

[  3]  5.0- 6.0 sec  19.9 MBytes   167 Mbits/sec

[  3]  6.0- 7.0 sec  19.4 MBytes   163 Mbits/sec

[  3]  7.0- 8.0 sec  20.0 MBytes   168 Mbits/sec

[  3]  8.0- 9.0 sec  20.0 MBytes   168 Mbits/sec

[  3]  9.0-10.0 sec  19.1 MBytes   160 Mbits/sec

[  3] 10.0-11.0 sec  20.1 MBytes   169 Mbits/sec

[  3] 11.0-12.0 sec  20.4 MBytes   171 Mbits/sec

[  3] 12.0-13.0 sec  20.5 MBytes   172 Mbits/sec

[  3] 13.0-14.0 sec  20.1 MBytes   169 Mbits/sec

[  3] 14.0-15.0 sec  19.9 MBytes   167 Mbits/sec

[  3] 15.0-16.0 sec  20.1 MBytes   169 Mbits/sec

[  3] 16.0-17.0 sec  20.1 MBytes   169 Mbits/sec

[  3] 17.0-18.0 sec  18.9 MBytes   158 Mbits/sec

[  3] 18.0-19.0 sec  20.5 MBytes   172 Mbits/sec

[  3] 19.0-20.0 sec  20.1 MBytes   169 Mbits/sec

[  3]  0.0-20.0 sec   399 MBytes   167 Mbits/sec



반대의 경우(맥 기준 다운로드 측정시)에는 위의 서버/클라이언트 모드를 서로 바꿔주면 됩니다.

즉, 맥에서 iperf -s 를 실행하고 윈도에서 iperf -c 맥IP -i 1 -t 20 를 실행하면 되는것이죠.


------------------------------------------------------------

Client connecting to 10.1.10.101, TCP port 5001

TCP window size: 16.0 KByte (default)

------------------------------------------------------------

[  3] local 10.1.10.86 port 41416 connected with 10.1.10.101 port 5001

[ ID] Interval       Transfer     Bandwidth

[  3]  0.0- 1.0 sec  13.4 MBytes   112 Mbits/sec

[  3]  1.0- 2.0 sec  15.8 MBytes   132 Mbits/sec

[  3]  2.0- 3.0 sec  18.1 MBytes   152 Mbits/sec

[  3]  3.0- 4.0 sec  19.0 MBytes   159 Mbits/sec

[  3]  4.0- 5.0 sec  19.6 MBytes   165 Mbits/sec

[  3]  5.0- 6.0 sec  20.0 MBytes   168 Mbits/sec

[  3]  6.0- 7.0 sec  20.6 MBytes   173 Mbits/sec

[  3]  7.0- 8.0 sec  21.4 MBytes   179 Mbits/sec

[  3]  8.0- 9.0 sec  23.1 MBytes   194 Mbits/sec

[  3]  9.0-10.0 sec  23.0 MBytes   193 Mbits/sec

[  3] 10.0-11.0 sec  23.2 MBytes   195 Mbits/sec

[  3] 11.0-12.0 sec  22.8 MBytes   191 Mbits/sec

[  3] 12.0-13.0 sec  22.9 MBytes   192 Mbits/sec

[  3] 13.0-14.0 sec  23.1 MBytes   194 Mbits/sec

[  3] 14.0-15.0 sec  23.2 MBytes   195 Mbits/sec

[  3] 15.0-16.0 sec  22.5 MBytes   189 Mbits/sec

[  3] 16.0-17.0 sec  23.2 MBytes   195 Mbits/sec

[  3] 17.0-18.0 sec  22.6 MBytes   190 Mbits/sec

[  3] 18.0-19.0 sec  22.8 MBytes   191 Mbits/sec

[  3] 19.0-20.0 sec  22.5 MBytes   189 Mbits/sec

[  3]  0.0-20.0 sec   423 MBytes   177 Mbits/sec


무선랜의 특성을 많이 타서 위와같이 다운로드 속도가 좀더 높게 나왔네요. (DIR-825 공유기 사용)


아뭏든, 속도측정은 위와 같은 패킷 전송량으로 측정하는게 좀더 정확한 결과가 나옵니다.




world IPv6의 날과 관련된 브라우저 버그 리포팅 Macbook

운영체제: OS X 10.6.7
브라우저: 사파리 5.02, 사파리 5.1(Beta)
증상: www.google.co.kr , gmail 등의 구글과 관련된 모든 인터넷 서비스의 접속이 안됨. 국내 사이트는 접속원활.
해결방법: 환경설정->네트워크 부분으로 가서 고급 버튼을 누른 후  IPv6 구성 부분을  끌것. (아래 그림 참고)
http://www.google.com/support/websearch/bin/answer.py?hl=ko&answer=1299266


이후 접속 원활. 

참고로 맥용 구글 크롬은 위의 옵션을 켜도 정상작동되며, 파이어폭스는 사파리와 마찬가지로 비정상 작동됨. 

도대체 누가 문제인거야!! 애플? 모질라? 구글? ISP망?

왜 애플은 삼성을 고소했는가? iPhone

이젠 블로거들한테도 언급되지 않는 해묵은 이슈. 


애플이 삼성을 고소 -> 삼성도 애플 고소 



간단하게 보자.



애플이 삼성을 고소한 내용 중에 몇가지는 누가 봐도 침해한 것이 맞는것도 있고, 의문스러운 것도 있다. 하지만 다시한번 돌려서 내용을 보다 보면, 삼성이 침해한것도 있고 안드로이드가 침해한 것도 있다는게 더 정확한 표현이다. 즉, 삼성은 어찌보면 안드로이드의 대표주자격으로 고소당한 것이다.


또한 이에 맞서 삼성이 애플을 고소한것..이것도 애플이 잘 피하지 못하면 특허침해로 걸릴만한 사항이다. 적어도 기술에 관련된것이니 잘 피해다닌다 쳐도 한두개는 걸려들것으로 예상.




결론은?




많은 사람들이 예상하다시피 내 생각도 "크로스 라이센싱->서로 손잡고 하하 웃으며 사진한방" 으로 끝날것이다.


하지만 왜 애플은 삼성을 고소했을까? 가만있으면 그냥 슬슬 흘러가는걸..?




애플의 목적은 다음 한 줄이다.




"안드로이드의 확산 방지"




삼성은 기술력(특허) 또는 최악의 경우 라이센스 비용을 내면 애플과의 특허전쟁은 끝난다. 하지만 중소업체에 시선을 돌려보면 그 이야기는 틀려진다.


애플이 고소한 내용 중, 안드로이드의 고유특성에 대한 특허침해가 인정되면 현재 안드로이드를 사용하고 있는 모든 업체는 애플과 계약을 맺어야 한다. 즉 삼성처럼 크로스 라이센싱을 하거나 특허사용료를 내거나 둘 중 하나라는 말이다.


그런데 안드로이드를 주 운영체제로 쓰고 있는 중소업체(KT tech나 팬텍 정도의 크기를 가진 업체) 중 애플과 크로스 라이센싱을 맺을만한 특허를 보유하고 있거나 막대한 특허료를 지불할 만한 여력이 있는 회사가 과연 얼마나 될까?


애플이 노리는것이 바로 이런거다. 메이저 업체를 제외한(삼성/LG(?)/모토로라 정도) 다른 중소업체들은 저 소송이 삼성의 패소로 이어진다면 그 순간부터 안드로이드를 운영체제로 삼는것을 피할 수 밖에 없다는 것. 지금처럼 아무나 안드로이드를 무료라는 이유만으로 자신의 폰에 올려서 장사를 못한다는 것. 결과적으로 안드로이드의 무차별적인 확산을 방지하는 것이 주 목적일거라 생각한다. 게다가 앞으로 생겨날 중소기업들은 고소가 무서워서 안드로이드를 운영체제로 택하지 못할것이다. 따라서 자연스럽게 안드로이드의 시장과 입지는 좁아질 것으로 예상된다. 


그렇다면 현재 안드로이드를 사용하고 있는 중소 핸드폰 업체들은 어찌해야 하나?



중소기업에게 이런 위험부담을 피할 수 있는 방법은 두 가지다.



1) 안드로이드를 개발한 구글에서 애플특허를 회피한 새 버전을 배포하길 기다리는 것 (하지만 언제 될지는 구글 맘)

2) 현재 안드로이드폰에 대한 의존도를 당장 낮추고 (아직은 무의미한 점유율이지만) MS윈도폰의 라이센스를 받아서 빨리 OS를 전환하고 앞으로의 일을 준비할것



왜 윈도폰을 OS로 채택해야 하는가..에 대한 정당성은 다음과 같다.



1) 유료다. 이 점은 양날의 검이지만, 적어도 특허문제에 관해서는 단말 개발업체들이 신경을 안써도 된다. 즉 특허문제와 관련된 모든 사항은 MS가 담당한다 (돈받고 팔았으니깐). 반면 안드로이드는 무료이기 때문에 애플에서 구글을 고소하지 못하는것일뿐.

2) 윈도폰을 제대로 본 사람은 알겠지만, iOS를 따라한 흔적이 역력한(그만큼 하나하나 고민하지 않고 따라하기 바쁜 흔적이 역력한) 안드로이드와는 차원이 틀리다. 과연 S/W회사는 다르구나..라고 느껴질만큼  고심의 흔적이 역력한 UI며 독자적인 동작원리 등 안드로이드처럼 이것저것 소송걸릴 만한 구멍이 거의 없다.

3) 만일 소송이 걸린다 해도 MS가 소송의 주체가 되기 때문에, MS와 애플간에 또 크로스 라이센싱(손잡으며 사진 한방)으로 끝난다.



지금 국내 폰 기업들이 짧은 시야로 안드로이드에 주력하고 있지만, 이미 삼성은 바다OS도 내놓았고 윈도폰 개발도 하며 미래를 대비하고 있다. (하지만 요즘 윈도폰 개발인력을 대규모로 감축했다는 비보도 들린다. 그러지마 삼성…) LG는 뭐 윈도폰을 예전부터 쭉 준비해왔으니 윈도폰이 안정화될 것으로 예상되는 내년 중반부터는 좀 풀릴듯 싶다…(하지만 MS와 협약을 맺은 노키아때문에 또 피맛을 맛볼 수 있다. LG야…노키아와 대적할 만한 중저가 윈도폰을 노키아보다 더 빨리 내놓도록 준비해야 해 ㅠ.ㅠ 시장선점효과가 뭔지 알지?)




세 줄 요약



1) 애플-삼성간의 특허싸움은 크로스 라이센싱으로 끝난다.

2) 안드로이드를 주 운영체제로 쓰고 있는 중소기업은 더 늦기 전에 윈도폰 OS 개발 노하우를 쌓아라

3) LG 힘내 ㅠ.ㅠ



P.S 내멋대로 상상하고 끄적인 것이니 뭐 망글이 될 수도 있고, 성지글이 될 수도 있고..ㅎㅎ 근데 MS를 응원하기는 정말 처음이네그려..;;


obj-c 상속 obj-c 2.0

rectangle.h

//

//  rectangle.h

//  rectangle

//

//  Created by 박영진 on 11. 6. 7..

//  Copyright 2011 Home. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface Rectangle : NSObject {

//@private // 이걸로 설정되어 있으면 상속이 안됨. 자신만의 instance variable 선언되어 자기 자신의 class에서만 사용가능

    int width;

    int height;

}


@property int width, height;


-(int) area;

-(int) perimeter;


@end


@interface Square : Rectangle {

@private

    

}


-(void) setSide: (int) s;

-(int) side;

@end





//

//  main.m

//  rectangle

//

//  Created by 박영진 on 11. 6. 7..

//  Copyright 2011 Home. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "rectangle.h"


@implementation Rectangle


@synthesize width, height;


-(int) area

{

    return width * height;

}


-(int) perimeter

{

    return width*2 + height*2;

}


-(void) setWidth:(int)w andHeight: (int) h

{

    width = w;

    height = h;

}


@end



@implementation Square:Rectangle


-(void) setSide:(int)s

{

    [self setWidth:s andHeight:s];

}


-(int) side

{

    return width;

}


@end



int main (int argc, const char * argv[])

{


    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


//    Rectangle *myRect = [Rectangle new];

    Square *mySquare = [Square new];

    

    [mySquare setSide:4];

    

    NSLog(@"Square area is %i and side is %i", [mySquare area], [mySquare side]);

    

    [mySquare release];

    

//    

//    [myRect setWidth:3 andHeight:4];

//    NSLog(@"width = %i  height = %i", myRect.width, myRect.height);

//    NSLog(@"area = %i", [myRect area]);

//    NSLog(@"perimeter = %i", [myRect perimeter]);

//    

//    [myRect release];

    

    [pool drain];

    return 0;

}



obj-c Data type:id obj-c 2.0

새로운 데이터 타입인 id

The id data type is used to store an object of any type.

뭐...뭐여..어떤 타입의 오브젝트(객체)도 저장될 수 있다고?

무슨 만능 데이터 타입인가 했더니, 나중에 다시 설명한단다.

그런데 설명 밑의 테이블을 본 순간 대충은 짐작이 간다.

type: id
Constant example: nil
NSLog chars: %p

어라? %p?? 이거 혹시 포인터 타입을 찍을때 사용하는건데...아무래도 이놈의 정체는 포인터인가보다.

나중에 자세히 설명한다고 했으니 설명해주겠지. 흠...

obj-c Data type:BOOL obj-c 2.0

오...데이터 타입에 BOOL형이 따로 존재한다! 

매번 C에서는 typedef문으로 pre-define해줘서 사용했는데 기본 데이터 타입에 BOOL형이 들어간다고 하니 은근 반갑네 ㅎㅎ

그러나 확인해보니..

-- @ program section --

BOOL yesNo;


BOOL이 선언된 곳을 가서 확인해보니

// objc.h

typedef signed char BOOL



으힉 ㅋㅋㅋ 내가 주로 쓰는 방식과 다를바 없다. ㅎㅎ 단지 난 BOOL타입을 TRUE(1) FALSE(0)으로 분리해서 사용했고 따라서 

typedef unsigned char BOOL


이렇게 선언한 반면, obj-c에서는 아마 이값을 마이너스 값에도 쓰나보다 (return -1; 같은...)


obj-c Getter / Setter obj-c 2.0

//

//  main.m

//  objective-c

//

//  Created by 박영진 on 11. 6. 2..

//  Copyright 2011 Home. All rights reserved.

//


#import <Foundation/Foundation.h>



// --- @interface section ---


@interface Fraction : NSObject {

@private

    int numerator;

    int denominator;

}


- (void) print;


// setter

- (void) setNumerator: (int) n;

- (void) setDenominator: (int) d;


// getter

- (int) numerator;

- (int) denominator;


@end


// --- @implementation section ---


@implementation Fraction


-(void) print

{

    NSLog(@"%i/%i", numerator, denominator);

}


// setter

-(void) setNumerator:(int)n

{

    numerator = n;

}


-(void) setDenominator:(int)d

{

    denominator = d;

}


// getter

-(int) numerator

{

    return numerator;

}


-(int) denominator

{

    return denominator;

}


@end



// --- Program section ---

int main (int argc, const char * argv[])

{


    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    // 일단 myFraction이라는 class instance Fraction이라는 class type으로 선언하되, 선언시에 메모리에 할당(alloc)하고 초기화(init)해준다.

    Fraction *myFraction = [[Fraction alloc] init];

    

    // myFraction method 사용하기 위해서는 다음과 같은 양식을 사용한다.

    // [receiving_object message:optional_parameter]

    [myFraction setNumerator:1]; // myFraction setNumerator에게 1 준다.

    [myFraction setDenominator:3]; 

    // 누가 그랬더라...메시지 전달이 obj-c 주요 개념이라고. ..

    

    // getter + setter + getter 통한 값의 변화

// class instance에 직접 접근이 안된단다. 나같은 C프로그래머는 잘 이해가 안가는 특성. 객체지향의 주요 특징인 데이터 캡슐화

// 라고 하는데, 책에 나와있는 원문 설명을 그대로 옮기면.

// 이러한 캡슐화를 통해 클래스 설계자는 마음대로 클래스를 설계할 수 있고, 프로그래머는 클래스 내부의 변화에 대해 신경쓰지 않고

// 자기 마음대로 자신만의 클래스를 설계할 수 있다고 한다.

// ... 머릿속으로는 대충 그림이 그려지는데 이게 어떤 상황에서 이득인지 아직은 잘 모르니 그냥 그렇다..라고만 알고 넘어가자.


    NSLog(@"first getter value: numerator - %i denominator = %i\n", [myFraction numerator], [myFraction denominator]);  // 그냥 잡다한거 빼고 print method를 호출해도 된다. [myFraction Print];

    NSLog(@"next, we set values");

    [myFraction setNumerator:10];

    [myFraction setDenominator:20];

    NSLog(@"finally, check value using getter: numerator = %i denominator = %i", [myFraction numerator], [myFraction denominator]); // 그냥 잡다한거 빼고 print method를 호출해도 된다. [myFraction Print];

              

    [myFraction release]; // 위의 alloc에서 메모리를 할당해준 만큼, 해당 메모리를 해제해줘야 한다.

    

    [pool drain];

    return 0;

}



obj-c (1) iPhone

세 가지로 구성

1. interface (선언)

2. implementation (구현)

3. 프로그램


선언하고->선언에 대한 상세한 내용을 구현하여->프로그램에서 써먹는다


---------- interface section --------


@interface NewClassName: ParentClassName

{

memberDeclarations; // Instance Variables

}


methodDeclarations; // Instance Method

@end


보통 class이름은 대문자로 시작하며, method이름은 소문자로 시작한다. 습관을 들이면 나중에 코드 가독성이 좋아진다.


// --- @interface section ---


@interface Fraction : NSObject {

@private

    int numerator;

    int denominator;

}


- (void) print;

- (void) setNumerator: (int) n;

- (void) setDenominator: (int) d;


@end


위에서 memberDeclarations 부에 선언된 numerator/denoinator가 바로 instance variables이다. 원서볼때마다 헷갈린 단어였는데 이제 개념좀 잡히네 -_-


마찬가지로 print, seNumerator, setDenominator는 method인데, 이걸 instance method라 칭한다.


앞의 (-) 는 instance method라고 컴파일러한테 알려준다. (+)는 class method인데, 이건 아직 잘 모르니 일단 이렇다는것만 알고 넘어가자. 나중에 설명 나오면 개념 잡히겠지… 


원서에는 자동차 어쩌고 하는데 난 오히려 이런 추상적인 설명보다 코드 한 줄 예제로 보여주는게 더 이해가 빠르다. 뭐 워낙 OOP가 추상적인 개념부터 시작하는지라 그렇지만, C만 다뤄온 나한테는 객체지향이라는 장벽이 은근 높다.


- (void) setNumerator: (int) n;


-: method type

void: return type

setNumerator: methode Name

: :method takes arguement

int: argument type

n; argument name




----------- implementation section ----------

@ implementation NewClassName

methodDefinitions;

@end


@interface 에서 선언된 method 들의 구현을 바로 이곳에서 한다.

위의 예제를 시험삼아 보면..



// --- @implementation section ---


@implementation Fraction


-(void) print

{

    NSLog(@"%i/%i", numerator, denominator);

}


-(void) setNumerator:(int)n

{

    numerator = n;

}


-(void) setDenominator:(int)d

{

    denominator = d;

}


@end


..요딴식?


모든 method의 구현이 끝남. 오키.

numerator, denominator는 Fraction class의 속성을 상속받으니깐 바로 접근이 가능함. 호오..클래스 개념이 잡히는것 같기도 하고…C의 구조체 또는  union과 비슷한거 같기도 하고… 아직 많이 헷갈림.



이제 프로그램 부분을 보자.


// --- Program section ---

int main (int argc, const char * argv[])

{


    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    // 일단 myFraction이라는 class instance Fraction이라는 class type으로 선언하되, 선언시에 메모리에 할당(alloc)하고 초기화(init)해준다.

    Fraction *myFraction = [[Fraction alloc] init];

    

    // myFraction method 사용하기 위해서는 다음과 같은 양식을 사용한다.

    // [receiving_object message:optional_parameter]

    [myFraction setNumerator:1]; // myFraction setNumerator에게 1 준다.

    [myFraction setDenominator:3]; 

    // 누가 그랬더라...메시지 전달이 obj-c 주요 개념이라고. ..

    

    [myFraction print]; // 웃샤..프린트해보자.

    

    [myFraction release]; // 위의 alloc에서 메모리를 할당해준 만큼, 해당 메모리를 해제해줘야 한다.

    

    [pool drain];

    return 0;

}




1 2 3 4 5 6 7 8 9 10 다음