THIS IS ELLIE

오브젝티브씨 메소드 본문

개발/Objective-C

오브젝티브씨 메소드

Ellie Kim 2020. 1. 15. 00:17

메소드는 클래스의 행위를 정의합니다.

어떤 특정 작업을 수행하기 위한 명령문의 집합이라고도 말할 수 있습니다.

 

오브젝티브씨에서는 두 가지 종류로 메소드가 구성되어 있습니다.

네. 클래스 메소드 그리고 인스턴스 메소드가 있습니다.

 

클래스 메소드는 + 기호를 사용하여 표시합니다.

인스턴스 메소드는 - 기호를 사용하여 표시합니다. 

클래스 메소드는 따로 객체화 할 필요가 없지만 인스턴스 메소드는 객체를 만들어 줘야 합니다.

이것이 두 메소드의 차이점입니다.

 

그럼 메소드의 구문을 살펴보겠습니다.

method name syntax resource : raywenderlich.com

먼저 인스턴스 메소드냐 클래스 메소드냐 구분을 해줘야 합니다.

두 번째로 리턴 타입이 없는 경우 생략 가능하지만 있다면 괄호에 리턴 타입을 명시해줘야 합니다. 

다음으로는 메소드 이름을 작성해줍니다.

콜론 뒤 괄호와 함께 파라미터 타입을 작성해줍니다.

마지막으로 파라미터 이름을 작성해줍니다.

(만약에 여러 파라미터가 존재한다면 뒷부분은 여러 번 겹쳐서 나올 수도 있습니다.)

 

이전 게시글에서 Car클래스를 생성하고 Car.h파일에도 각각의 프로퍼티와 메소드를 선언해주었습니다.

2020/01/14 - [Development/Objective-C] - 오브젝티브씨 클래스

위 메소드 구문과 비교해보면 뭐가 리턴 타입인지 뭐가 메소드 명인지 구분이 가시겠죠?

네 이러한 구문에 따라 메소드를 선언할 수 있습니다.

 

그럼 구문에 따라서 메소드를 선언했다면 어떻게 호출할까요?

아래 코드에서 두 번째 줄을 봐주세요.

[str length];은 (str)Hello World! 즉 (NSString)문자열의 length 메소드를 호출한다 의미가 됩니다.

length메소드를 호출함으로써 문자열의 길이를 알게되고 NSLog를 통해 Length: 12가 출력됩니다.

(control + command를 누르면 정의된 곳으로 이동하니 궁금한 메소드나 프로퍼티를 확인할 때 사용하면 좋습니다.)

 

다른 예시를 살펴보겠습니다. 

 

이전 게시글에서 Car클래스를 생성하고 Car.m파일에도 각각의 메소드를 구현해주었습니다.

2020/01/14 - [Development/Objective-C] - 오브젝티브씨 클래스

 

아래는 Car.m파일입니다.

두 개의 메소드 setCarName과 carName가 존재합니다.

 

이를 사용하기 위해 main내에서는 Car클래스를 객체화하여 내부에 구현된 메소드를 호출해줍니다.

첫 줄을 통해 메모리가 할당되고 Car객체를 생성했습니다.

두 번째 줄 [car setCarName:@"Hyeri"];라고 작성한 부분 보이시나요.

이는 Car.m파일에서 정의한 setCarName을 호출한 것입니다. 

Hyeri라는 문자열을 파라미터로 전달했고 그것이 carName으로 세팅이 됩니다.

 

그럼 마지막 NSLog로는 어떤 내용이 출력될까요?

이전에 setCarName으로 carName을 Hyeri라 설정했기 때문에 이후 carName를 호출했을 땐 Hyeri가 리턴되게 됩니다.

최종적으로 NSLog로 carName  = Hyeri가 출력되게 됩니다.

반응형

'개발 > Objective-C' 카테고리의 다른 글

조건문와 반복문  (0) 2020.02.12
오브젝티브씨 문자열 포맷팅  (0) 2020.01.22
오브젝티브씨 클래스  (0) 2020.01.14
Objective-C란?  (0) 2020.01.11
옵젝씨 프로젝트 생성  (0) 2020.01.06