교육/공부

[iOS][iPhone][ObjectC-03] 오브젝트 C 기본 문법 Implementation, Instantiation

2017.08.07

 

 

안녕하세요 푸민입니다!

 

저번 포스팅에서 Interface와 Message에 대해서 알아보았습니다.

이번에는 Implementation에 대해서 알아볼게요!

 

1. Implementation

 

Implementation 은 Interface로 만들어 놓은 틀(클래스)을 직접 구현하는 부분입니다.

즉 실질적인 기능이 되는 곳이에요!

 

Interface 는 .h 라는 파일로 만들어지고,

Implementation 은 .m 이라는 파일로 만들어집니다.

그래서 실제로 나중에 Xcode에서 작업하시면

항상 .h 파일과 .m 파일이 함께 만들어지는 것을 보실수 있어요!

 

Implementation 의 기본 구조는 아래와 같습니다.

@implementation classname
+ (return_type)classMethod
{
 // implementation
}
- (return_type)instanceMethod
{
 // implementation
}
@end

Interface 와 같은 classname 을 사용하시면 됩니다!

그리고 +, - 는 저번 포스팅에서 알아봤듯이 클래스 메소드냐 인스턴스 메소드냐를 구분합니다.

그리고 () 괄호안에 리턴타입을 넣어주시구요. 뒤에 메소드이름을 작성하시면 됩니다.

그리고 메소드 이름 뒤로는 {}괄호가 나오는데요,

이 괄호 안에 구현한 것들이 실제로 동작하는 것입니다.

 

그리고 파라미터 값을 주는 경우 일반적으로 메소드는

int function (int i)
{
 return square_root(i);
}

이런 형식이었지만,

오브젝트 C에서는

- (int)method:(int)i
{
 return [self square_root:i];
}

요런 형식으로 바뀝니다.

메소드 이름 뒤에 : 연산자를 이용하여 파라미터를 넘겨줍니다.

 

여러개의 파라미터일 경우에는

- (int)changeColorToRed:(float)red green:(float)green blue:(float)blue;

[myColor changeColorToRed:5.0 green:2.0 blue:6.0];

이런식으로  : 연산자를 계속 활용하시면 됩니다.

첨에 할때 이 부분이 잘 안되서 오브젝트C는 메소드도 안만들어진다며... ㅋㅋㅋㅋㅋㅋ

그런 기억이 나네요 ㅋㅋㅋ

 

2. Instantiation

 

두번째로 보는 것은 Instantiation 입니다.

이것은 클래스를 실제 인스턴트로 생성하는 방법인데요.

보통은 뉴 연산자를 사용하여 많이 했는데 오브젝트 C는 조금 다릅니다!

왜냐구요??? 잡스니까요!

./.....

죄송

MyObject *o = [[MyObject alloc] init];

보시면 먼저 해당 객체의 alloc 메소드를 부르고 그다음에 init 메소드를 부릅니다.

이게 일반적으로 클래스를 인스턴스와 시키는 것이구요.

MyObject *o = [[MyObject alloc] initWithString:myString];

이런식으로 커스터마이징한 클래스를 인스턴스화할 수 있습니다.

 

그리고 또한 new 연산자를 사용할 수도 있네요!

MyObject *o = [MyObject new];

마지막으로 몇몇 클래스는 초기화하는 메소드를 제공하거나 초기화가 된경우가 있습니다.

MyObject *o = [MyObject object];
MyObject *o2 = [MyObject objectWithString:myString];

Init 메소드를 구현하는 방법으로는

- (id)init {
    self = [super init];
    if (self) {
        // perform initialization of object here
    }
    return self;
}

이렇게 하시면됩니다.

먼저 self에 super를 초기화하여 넣어주시고,

각종 초기화를 한뒤에 self를 리턴해주시면 됩니다.

 

어려운것 같기도 하고 쉬운것 같기도하고...

하면서 계속 배우고 늘려가야되는것 같네요 ㅋㅋㅋ

 

이번 포스팅은 이만 마칠게요~

즐코딩되세요!

태그
0 /3000자