외규장각 도서 환수 모금 캠페인

'맥북'에 해당되는 글 2건

  1. 2013.10.01 맥북에 이클립스 설치 방법
  2. 2010.04.06 objective - c #1



1.http://www.eclipse.org/downloads 에서 원하는 버전의 이클립스 다운


2. 다운받은 파일 압축 해제


3. 이클립스 실행


4. mac에서 자동으로 자바 런타임 설치(예전에는 없었는데 요즘 다시 설치하려니 생김)


5. 안드로이드 개발도구 설치(ADT - Android Development Tool)

- 이클립스 실행

- Help > install New Software 선택

- 오른쪽 상단의 Add 클릭

- Name은 아무거나

- Location : https://dl-ssl.google.com/android/eclipse 입력 후 OK 클릭

- 목록 노출되는 모든 것 선택 후 Next

- 설치할 목록 나온것 선택 후 Next

- 쭉 실행

- 설치 완료 후 재부팅


6. 재부팅 후 Android SDK 설치 창이 뜸 - 설치 진행


7. eclipse메뉴 window > Android SDK Manager 실행

- 안보일 경우 없는게 아니고 숨겨져 있음

- 노출 방법

- Window > Customize Perspective > Command Groups Availability > Android SDK Manager and AVD Manager 선택 후 OK 클릭

Posted by 닉네임영역
,

1 . Objective-C란 ?

Objective-C는 미국의 브래드 콕 (Brad Cox)씨가 1986년 처음으로 개념을 발표하고 만든 하이브리드 언어 입니다.
많은 부분이 C와 유사하고 약간의 객체지향적인 부분을 합쳐서 만든 언어 입니다.
주로 스몰톡의 객체지향적인 부분을 합쳐서 만든언어라 C++이나 여타 컴파일러식 객체지향적인 언어에 비해
보다 더 객체지향적인 성격을 많이 가지고 있습니다.
Dynamic binding , Dynamic loading , Dynamic typying 등을 지원 다른 언어보다 월등한 유연성을 보여 줍니다.
그리고 이런 언어의 특징들 때문에 nextstep이라는 최초의 객체지향 OS에 과감하게 사용되었으며 , 이후 MacOS X에도 역시 핵심적인 부분에 채용되게됩니다.

넥스트사의 설립자인 스티브 잡스가 Objective-C에 대한 판권을 가져오고 다시 이걸  GNU에 기증하여, 지금의 GCC에도 Objective-C가 포함되게 되었습니다.
뛰어난 능력을 가지고, 쉽게 구할수 있음에도 불구하고 국내에는 Objective-C에 대한 자세한 입문서나 프로그래밈 가이드가 없고 , 관심을 가지고 있는 분들도 적어서 많은 장점들이 알려지지 못하고 별로 쓰이지 않는 언어로 남아있습니다.


2. 간단한 문법

 
#include
// @ 예약어
@interface Sample : Object {            // 선언
   @public            // 슈퍼 클래스                                               
     id pub;
   @protected
     int pro ;
   @private
     int pri;
}
+(id)new;                                         // ' + ' : 클래스 메소드
-(id)init;                                           // ' - ' : 인스턴스 메소드
-(int)sample;                                    // ' ( ) ' : 리턴 타입
-(id)sample : (id)arg ;
@end                                               // 정의 끝
                                                       // data type ' id ' : 인스턴스를 의미하는 data type 
                                                                                  클래스에 대한 포인터 값 가진다.
@implementation Sample
+(id)new {
   id object;                                       // 인스턴스 얻는 법
   object = [self alloc];                       // id obj = [Sample alloc];
   [object init ];                                     리턴값            클래스 메소드
   return object ;                           //  &  클래스의 인스턴스
}
-(id)init {                                                     
   [super init ];                           // ' [ ] ' : 클래스와 인스턴스 메소드 호출
   return self ;                              // super : 슈퍼클래스 | self : 자기 자신
}
-(int) sample {                            // C문법 : fun(arg1, arg2) = objC문법 : [obj method: arg1 : arg2]
   return pri ;                                // 추상 클래스 { return; } <-- 이렇게만 해도 됨
}
-(id) sample : (id)arg {
   pub = arg ;
   return self;
}
@end



3. Dynamic binding , Dynamic typying , Dynamic loading
Dynamic binding은 객체의 메소드를 호출할 때 그 메소드가 뭔지를 정적으로 컴파일 시에 결정할 수 없다는 걸
의미합니다.
C++에서도 버추얼을 이용하면 동일한 기능을 수행하게 되지요. 버추얼이 아닌 C++에서 Sample.new();라고 쓴다면 new함수에 대한 포인터를 컴파일 시에 확보하게 되고 이 주소로 호출하는 동작을 합니다. (Objective-C는 모두 포인터이므로 c++를 예로 들경우 포인터라고 생각하시면 됨) 하지만 Objective-C에서는 콜하는 주소를 컴파일 할 때도 결정할 수가 없습니다. 다만 실행시간 중에 펑션이 있는 주소를 찾아서 그부분의 함수를 호출합니다.
순수하게 함수를 호출하는데 걸리는 시간은 일반적인 C++보다는 많이 걸리게됩니다만, 그차이는 그렇게 심하지 않고 유연성은 더 커집니다. 흔히 trade off라고 하는데 성능을 우선시 할것인가 아니면 유연성을 우선시 할 것인가 하는 문제죠.
나중에 언급하겠지만 빈번하게 한 메소드를 호출할 경우 IMP를 사용해서 메소드를 함수 형태로 호출할 수도 있습니다.

Dynamic typying은 데이터 타잎이 어떤 클래스인지 컴파일 시에 알수 없다는 것을 말합니다. C++같이 타입을 엄격히 체크하는 언어에서는 타잎이 반드시 일치해야 합니다만, Obejctive-C에서는 모든 인스탄스는 id일 뿐입니다. 따라서 인스탄스가 어떤 클래스의 인스탄스인지 실행하고 확인하기 전에는 알 수가 없습니다.

Dynamic loading은 클래스를 실행시간 중에 새로 넣을 수 있다는 뜻입니다. 일종의 플러그 인을 생각하시면 됩니다.


4. selector(동적 메소드 콜)

if (j < 10)
    n= @selector(new);                   // [Sample new]
else
    n= @selector (alloc);                 // [Sample alloc]

[Sample perform: n ];


5. category
    : 이미 존재하는 클래스에 새로운 메소드를 추가하기 위해 제공되는 기능이다. 이를 통하여 별도의 subclass
     
만들지 않고서도 기존의 클래스의 기능을 확장할 있다. 단, category로 새로운 instance variable을 추가할 수
      는 없고, 기존의 메소드와 name collision(이름 충돌)이 일어날 경우 category에서 새로 정의된 메소드가 그 이름
      을 가져간다는 점에 주의해야 한다

 
@interface Sample ( Cat )
-(id)cat ;
-(int)sample;
@end

@implementation Sample (Cat)
-(id) cat
{
printf ("This is category sample \n");
return self ;
}
-(int) sample
{
printf("This is Category Sample method (sample)\n");
return pri ;
}
@end

Posted by 닉네임영역
,


사랑합니다. 편안히 잠드소서