planet. silsolEgloos | Log-in
VC++ 프로그래머의 Objective-C 적응기
Sample Code

VC++

MyClass.h
===========================================
#pragma once

class MyClass
{
public:
MyClass(void);
~MyClass(void);

private:
CString value1;
int value2;

public:
void myMethod();
void myMethodWithParam(CString value);
void myMethodWithParams(CString value1, int value2);
static void myClassMethod();

public:
void setValue1(CString value);
CString getValue1();
};


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

MyClass.cpp
===========================================
#include "StdAfx.h"
#include "MyClass.h"

MyClass::MyClass(void)
{
}

MyClass::~MyClass(void)
{
}

void MyClass::myMethod()
{
TRACE("myMethod called\r\n");
}

void MyClass::myMethodWithParam(CString value)
{
CString str;
str.Format(_T("myMethodWithParam called\r\n"), value);
TRACE(str);
}

void MyClass::myMethodWithParams(CString value1, int value2)
{
CString str;
str.Format(_T("myMethodWithParams called : %s %d\r\n"), value1, value2);
TRACE(str);
}

void MyClass::myClassMethod()
{
TRACE("myClassMethod called\r\n");
}

void MyClass::setValue1(CString value)
{
this->value1 = value;
}

CString MyClass::getValue1()
{
return this->value1;
}
===========================================

호출부
===========================================
MyClass *data = new MyClass();

data->myMethod();
data->myMethodWithParam(_T("Hello World"));
data->myMethodWithParams(_T("Hello World"), 1);
MyClass::myClassMethod();

data->setValue1(_T("testString"));
TRACE(data->getValue1());
TRACE(_T("\r\n"));

delete data;
data = NULL;

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

출력결과
===========================================
myMethod called
myMethodWithParam called
myMethodWithParams called : Hello World 1
myClassMethod called
testString
===========================================



Objective-C
MyClass.h
===========================================
#import <Foundation/Foundation.h>


@interface MyClass : NSObject {
    NSString *value1;
    int value2;
}

@property (retain) NSString *value1;

- (void) myMethod;
- (void) myMethodWithParam:(NSString *)param;
- (void) myMethodWithParams:(NSString *)param1 secondParam:(int)param2;
+ (void) myClassMethod;

@end
===========================================

MyClass.m
===========================================
#import "MyClass.h"

@implementation MyClass

@synthesize value1;

- (void) myMethod
{
    NSLog(@"myMethod called");
}

- (void) myMethodWithParam:(NSString*)param
{
    NSLog([NSString stringWithFormat:@"myMethodWithParam called : %@", param]);
}

- (void) myMethodWithParams:(NSString*)param1 secondParam:(int)param2
{
    NSLog([NSString stringWithFormat:@"myMethodWithParams called : %@, secondParam : %d", param1, param2]);
}

+ (void) myClassMethod
{
    NSLog(@"myClassMethod called");
}


@end

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

호출부
===========================================
    MyClass *data = [MyClass alloc];

    [data myMethod];
    [data myMethodWithParam:@"Hello World"];
    [data myMethodWithParams:@"Hello World" secondParam:1];
    [MyClass myClassMethod];

    [data setValue1:@"testString"];
    NSLog([data value1]);

    [data release];    

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

출력결과
===========================================
2009-07-05 23:23:39.618 pilotWindowBase2[10575:20b] myMethod called
2009-07-05 23:23:39.619 pilotWindowBase2[10575:20b] myMethodWithParam called : Hello World
2009-07-05 23:23:39.621 pilotWindowBase2[10575:20b] myMethodWithParams called : Hello World, secondParam : 1
2009-07-05 23:23:39.621 pilotWindowBase2[10575:20b] myClassMethod called
===========================================

1. 파일명
    선언부는 .h 로 동일하나 구현부는 .cpp 가 .m 으로 대응된다.

2. class 선언
    .h 에 선언되는 부분
    -----------------
    @interface 클래스명 : 슈퍼클래스
    {
        멤버변수;
    }
    메서드선언;
    @end
    -----------------
    
    .m 에 구현되는 부분
    -----------------
    @implementation
    구현부
    @end

3. static method 와 class method 구분

    - 는 instance method
    + 는 static method(class method)


4. setter, getter 자동화하기

    메서드선언 영역에 @property 를 정의 해줌으로서 getter, setter 를 선언할 수 있다.
    이 경우 구현부 영역에 @synthersize 로 다시 변수명을 명시해주어야 한다.

    선언 구문의 형식은 아래와 같다.

    @property (속성) 타입 변수명;

    @property 를 선언할때 속성은 생략할 수 있으며, 몇 가지 속성이 지정될 수도 있는데, 각각의 의미는 다음과 같다.
    assign : scalor 타입에 적용된다. (기본값이다.)
    copy : Object 타입에 적용하며, 객체가 복사되는것 같다.
    retain : Object 타입에 적용하며, 객체 포인터만 바인딩 되는듯 하다.
    nonatomic : singlethread환경에서 적용하면 좀더 빠르게 동작한다고 한다.

5. 메서드 호출
    [인스턴스 메서드명];
    [클래스명 클래스메서드명];

    [data myMethod];
    [data myMethodWithParam:@"Hello World"];
    [data myMethodWithParams:@"Hello World" secondParam:1];
    [MyClass myClassMethod];

    위와 같은 형식을 가진다. [] 가 참 적응 안된다. 한번은 이해해줄수 있는데
    중첩으로 호출될땐.. 아.. 정말..

    특이한점은 파라메터가 존재하는 메서드의 경우 메서드명을 지을때 with를 붙여준다는것이다.
    일종의 관례라고 하며, cocoa 라이브러리들도 모두 그 규칙을 지키고 있다.

    그리고 두번째 파라메터부터는 파라메터가 의미하는 바를 정의해줘야 한다.
    마찬가지로 호출할때도 그 명칭들을 모두 적어줘야 한다.
    첫번째 파라메터의 의미는 메서드명에서 with구문뒤에 명시하고 두번째 파라메터부터는 별도의 설명을 해주는 셈이다.
    이거 상당히 귀찮으면서도, 코드를 처음볼때 꽤 편해진다.

Creative Commons License
by silsol | 2009/07/06 00:00 | 트랙백
SANYO eneloop KIR-S1 손난로
어제 일본 출장을 갔다온 회사 동료가 얻어다준 손난로 <a href="http://guldari.egloos.com/907812">KIR-S1</a>&nbsp;을 사용해봤다.

주머니에 넣고 잠시 다녀봤는데, 따뜻한건지 사실 잘 모르겠다. 
그냥 미지근 한 정도. 더 추워져봐야 알라나. 

이 손난로의 존재를 안뒤 관련정보를 찾다가 알게된 사실.
40도 이상에선 단백질이 변화를 일으켜 피부에 약한 화상을 입을 수 있단다.
그래서 업그래이드 버전인&nbsp;KIR-S2S는 1단으로 동작시 39도로 동작하도록 기능이 수정되었다고 한다.
근데 이정도 온도라면 항상 2단으로 놓고 쓸듯하다.

KIR-S1 : 1단 41도(6-7시간사용)&nbsp;2단 43도(4-5시간사용), 5시간 완충 (파우치 포함)
KIR-S2 : 1단 39도(6-7시간사용) 2단 43도(4-5시간사용), 3시간 완충 (파우치 미포함, 일본에서만 판매)

아직 국내엔 KIR-S1밖에 판매하지 않아서 일본출장가는 회사동료에게 S2S를 사다달라고 했더니,
잘 팔지를 않는단다. 그러면 냅두라고 그냥 국내에서 S1사겠다고 했다.

그런데 출장간 회사사람들하고 이런저런 얘길하다가 이 손난로 얘길했더니,
출장온 선물이라며 돌아오는날 KIR-S1을 선물해줬단다. ㅎㅎㅎ
S2가 아니라도 공짜로 얻었으니, 대 만족이다.

충전케이블이 꽂혀있는 상태에서는 동작하지 않는다.
재미있게도 PSP충전케이블과 호환이 되는 관계로 회사에선 PSP충전케이블로 
집에서는 딸려온 충전기에 110v 아답터를 꽂아서 충전한다.

동작을 시키면 eneloop 마크아래로 붉은색 LED가 부드럽게 깜박인다.
마치 심장이 뛰는듯한 느낌을 가지게 한다.
충전시에는 같은 위치에 연한녹색LED 가 켜지며, 완충시에 꺼진다.

한손에 쏙들어오고 디자인적으로도 아주 심플한 이 제품에 충분히 만족스럽다.
바라는 점이라면, 충전지를 교체할수 있도록 했으면 한다는 점 정도 되겠다.
Creative Commons License
by silsol | 2007/11/23 14:47 | pumping | 트랙백
이런 DSLR은 언제쯤 나올까.
GPS와 방향계(?) 가 달려 있어서 언제 어디서 어느 방향으로 찍은 사진인지에 대한 메타 정보와 터치스크린으로 간단한 메모, 또는 음성을 기록할 수 있는 포멧을 지원하는 1000만화소 DSLR 카메라.

또 카메라에 달린 포스팅 버튼을 누르면 해당 사진이 전송되어 메타정보를 분석해주고 등록되는 포토로그.

그 포토로그와 구글어스를 연동해서 보여줄 수 있는 포토 뷰어.

그 포토뷰어에서 좋은 사진들을 선택해두면 지정된 개수가 찼을때 양장본 앨범으로 인쇄되어 배송되는 인화서비스.

또, 지정된 포토 블로그를 지속적으로 모니터링 해서 사진을 띄워주는 디지털 액자.

같은 것들을 기대하는건 무리일까...
멀지않은 현실이 될 거 같은데 말야...
쓰다보니 DSLR보다 딴 얘기가 더 많군.. ㅋㅋ

소프트웨어야 당장 내가 만들어버릴 수도 있긴 하겠다.
누가 이런 하드웨어들 좀 만들어 주...
Creative Commons License
by silsol | 2007/08/16 20:14 | pumping | 트랙백(1) | 핑백(1) | 덧글(3)
<< 이전 다음 >>


이글루 파인더


카테고리
전체
be learning
blah
monologue
pumping


최근 등록된 덧글
저도 2년전 소니 GPS로거..
by nalbam at 09/26
음.. 저 GPS는 알고 ..
by silsol at 08/16
... 소니사의 생활로그..
by 지나가다. at 08/16
이젠 HTML5 도 다시 배..
by siro012 at 08/04
누구냐 넌.. 이라고 ..
by silsol at 08/02
젠장. 이젠 코딩도 못해..
by 모리스 at 08/02
음 좋은정보 감사하오
by siro012 at 08/01
간바레!!
by muteheart at 07/23
난 내 앞에 들어온 사람들..
by siro012 at 07/13
역시 중간간부급은 고달..
by siro012 at 07/13


최근 등록된 트랙백
black angel wings
by http://hebamme-hau..
print promo
by http://robertladig.de/..
ancient human skull ..
by http://inksure.org.uk..
jack picture
by http://canadajoboppo..
test
by http://test.com
Buy wholesale adder..
by Snort adderall xr.
How quickly does a..
by Amoxicillin drug inter..
Adderall.
by Adderall side effects.
Buy phentermine diet ..
by Buy phentermine.
Combining adderall st..
by Adderall.


이글루링크
개 풀 뜯어먹는 소리
미친병아리가 삐약삐약
荷花(hehua)
소스코드위를 걷다.....
~★~ 우하하!!~ 프로..
하늘바라기의 개발자의 일상
위로..위로..위로..
roadster
Maurice Blanchot


라이프로그
객체지향 소프트웨어 공학
객체지향 소프트웨어 공학

위키노믹스
위키노믹스

대한민국 개발자 희망보고서
대한민국 개발자 희망보고서

컨설팅의 비밀
컨설팅의 비밀

MC Sniper (엠씨 스나이퍼) 4집 - How Bad Do U Want It
MC Sniper (엠씨 스나이퍼) 4집 - How Bad Do U Want It

GOF의 디자인 패턴
GOF의 디자인 패턴



rss

skin by silsol

by silsol