Objective C <8>. 메서드의 선언과 반환값

오늘의 주제

  • 메서드 선언하고 구현하기 
  • 메서드 인자 전달하기 
  • 반환값(return값)에 대해 알기 

여덟번째 시간입니다.^^
정말 오랜만의 포스팅입니다...ㅋ
오늘은 제 동생의 생일이랍니다!!!
뭐... 그렇다구요 ㅋㅋㅋㅋㅋㅋ

지난 번에는 이름짓기에 대해 조금 알아보았습니다.
처음부터 이름을 잘 짓는 습관이 필요합니다.
귀찮다고 a, b, c 이런식으로 이름 지어놓으면 같이 일하는 동료는 물론 자신 스스로도 하루만 지나도 코드를 읽을 수 없습니다...ㅋㅋ

자 그럼 잔소리 생략하고 설명 들어갑니다~

참..! 이거 보시기 전에 지난 포스트 2012/02/05 - [Objective-C] - Objective C <6>. 클래스와 객체(인스턴스)<2> 를 보고오시기를 추천드립니다^^

스따뚜!!!

메서드의 모든 것

지난번에 쓰던 FirstProject를 계속 사용하도록 하겠습니다.
물론 없는 분들은 매우 간단하므로 클래스 하나만 만들어 주시고 네모 박스 친 코드들만 다시 작성하셔도 무방합니다^^.
MyFirstClass에 인스턴스 메서드 세개를 만들어 줍니다.

자 이렇게 선언을 하는 것입니다.

-(NSInteger) addTwoIntegerWithFirstInt:(NSInteger)firstInteger 
                    secondInt:(NSInteger)secondInteger;

메서드 기준으로 설명하겠습니다.

메서드 맨 앞의 - 는 이것이 인스턴스 메서드 라는 것을 말해주는 것입니다.
처음 괄호 안의 자료형은 이 메서드의 반환값(리턴값)의 자료형을 의미합니다. 이 메서드의 반환값은 NSInteger 자료형을 가지고 있군요. 자세한 설명은 아래에서 하겠습니다.
그 다음에 오는 것은 이 메서드의 이름입니다. 이 메서드의 이름은 addTwoIntegerWithFirstInt 입니다. 정확히 말하자면 addTwoIntegerWithFirstInt: secondInt: 입니다.
그리고 땡땡이 뒤에 오는 녀석들은 이 메서드에 들어가는 인자의 자료형과 이름을 뜻합니다. NSInteger자료형을 갖는 firstIntegersecondInteger라는 이름을 가진 두 개의 인자가 전달되어 들어오네요. 이 역시 자세한 설명은 요 아래.

자, 그럼 반환값과 인자가 무엇이냐?

우리가 밥을 먹는다고 생각해 봅시다. 밥도 먹고 국도 먹고 반찬도 먹습니다. 이것을 인자라고 생각합니다.
그리고 우리는 뱃속의 여러 장기들에서 이 음식들을 소화하고 분해하고 찌꺼기는 분류해서 대변(똥ㅋㅋㅋㅋㅋㅋㅋㅋㅋ)으로 변환하여 배출합니다.

조금 감이 오시나요?
메서드는 어떤 특정한 일을 하는 마술상자 같다고 표현합니다.
여러 인자들을 받아들여서 이것을 메서드 고유의 특정한 방법을 거치고 가공하여 다시 뱉어냅니다. 이것이 메서드의 역할입니다.

그래서 받아들이는 값들을 인자값, 그리고 뱉어내는 값들이 반환값입니다.

하지만, 사람과는 약간 다르게 메서드라는 녀석은 먹지 않고도 뱉어낼 수 있고, 먹어도 뱉어내지 않을 수도 있습니다.
인자값이 없는 메서드도 있고, 리턴값이 없는 메서드도 있다는 말이죠..^^
또, 먹지도 뱉지도 않는 메서드들도 있습니다.

먹는게 없는 메서드는 인자가 없구요, 뱉는게 없는 메서드는 반환값 자료형의 종류가 void로 표기되어 있습니다.

이런 저런 메서드들을 보다보면 자연스레 알게되실거예요~

자, 그럼 본격적으로 메서드 구현을 해 봅시다.
헤더에서 정의해준 모양을 따와서 구현파일(.m)에서 구현합니다~

어...? 근데 이렇게만 해놓으니 왼쪽에 노란 삼각형 알림이 뜹니다.
눌러보면 이 메서드는 반환값이 있어야 한다고 친절히도 알려줍니다.
그렇습니다. 반환값이 명시된 메서드는 꼭 반환(똥을 싸야...)한다는 뜻입니다~ㅋㅋ
하지만 맨 아래 printFoo라는 메서드는 먹지도 뱉지도 않는 녀석이기 때문에 알림이 뜨지 않네요~^^

그럼 이쁘게 메서드를 구현해 볼까요?
자세한 설명은 주석에 있으니 잘 읽어보세요^^

자 클래스에 메서드를 구현했으니 이제 main에서 써봅시다~
자세한 설명은 주석에 써져 있습니다..^^

짠~ 결과화면 입니다.

여러분들의 예상과 맞았나요?
맨 마지막의 printFoo 메서드는, 제가 귀찮거나 깜빡했거나 해서 해보지 않은 것이 아니라 여러분들을 위해 남겨 놓았습니다.ㅋㅋㅋ
(양심이 있다면 이런소리 못하지..ㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

여튼, 한 번 printFoo 메서드도 호출하여 결과를 보시기 바랍니다~

이상 메서드에 대해서 알아봤습니다!

또 뭘 하면 좋을까요?ㅎㅎ

by yagom


p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   

댓글 남기기

Close