# 재미있는 언어 Objective-C
여러분들께서는 오브젝티브-C를 어떻게 생각하시나요? 언어의 역사와 배경을 아는 것이 정말 무의미해 보일지 모르겠지만, 오브젝티브-C의 탄생 배경을 살펴보면 재미난 점도 많고, 사용하면서 부딪힐 의문에 대해서도 더 많이 이해하게 될 수 있습니다.
그럼 오브젝티브-C는 어떻게 태어났는지, 왜 제대로 알고 써야 할지 생각해 볼까요?

# Objective-C는 어떻게 탄생하고 발전해왔을까?
오브젝티브-C는 ‘객체 지향 프로그래밍 C언어 [Object-Oriented Programming in C, OOPC]’라는 이름으로 시작된 언어입니다. 즉, C를 객체 지향 언어로 발전시킨 것으로, 1983년에 발표되었습니다. 당시 사람들은 구조적 프로그래밍  습관에 따라 프로그래밍을 하였는데, 풀어내야 할 문제들이 많이 생겨나자 그 해결책으로 객체 지향 프로그래밍  연구를 활발히 하던 시절이었습니다.

애플사에서 나온 스티브 잡스는 넥스트사를 설립한 후 오브젝티브-C의 사용 허가를 받았습니다. 그는 회사를 꾸준히 발전시켜 넥스트스텝이라는 객체 지향형 운영체제에 사용하기 위하여 AppKit과 Foundation Kit 등을 개발하였습니다. 이것이 현재 애플 운영체제의 전신이 되었습니다. 그 후 넥스트는 애플에 합병되었고, 애플은 넥스트에서 쓰던 툴들을 기반으로 Mac OS X라는 운영체제를 출시하였습니다. 오늘날 애플의 Cocoa API 대부분은 이에 기반을 두었죠(애플 운영체제의 클래스 접두어가 대부분 NS인 것이 바로 이 때문입니다).

애플은 2006년 애플 세계 개발자 회의Apple Worldwide Developers Conference, WWDC에서 ‘현대적인 가비지 콜렉션, 문법 기능 향상, 런타임 성능 개선, 64비트 지원’을 포함하는 오브젝티브-C 언어의 리비전Rivision으로 오브젝티브-C 2.0 공개하였습니다. 즉, 우리가 현재 배우고 사용하고 있는 오브젝티브-C는 오브젝티브-C 2.0이죠.

# 왜 Objective-C의 특성을 살려야 할까?
앞에서 언급했듯이 오브젝티브-C는 조금은 독특한 역사를 가지고 있으며, 객체 지향의 특징을 구현하기 위하여 많은 고민을 거듭하여 발전한 언어입니다. 절차 지향 언어인 C에서 파생된 언어이고, 자세히 파헤쳐보면 100% 객체 지향 언어라고 하기에는 무리가 있지만, 저는 객체 지향 특성을 제대로 활용할 수 있는 몇 안 되는 언어 중에 하나라고 생각합니다. 또한, 같은 객체 지향 언어라 하더라도 C++, Java와는 조금 다른 특성들을 많이 갖고 있기에 기존에 개발하던 개발자들이라도 배워야 할 필요가 분명히 있습니다.

게다가 오브젝티브-C를 사용하는 것은 대부분 애플 기기 기반의 애플리케이션을 제작하려는 목적이므로 당연히 애플이 제공한 프레임워크 및 킷을 활용하여 제작할 것은 자명한 사실이죠.

지금에 비하여 처음의 Cocoa API는 오브젝티브-C의 특성을 잘 살리지 못했었습니다. 하지만 지금은 API의 특성을 이해하지 못하면 사용하기 어려울 정도로 오브젝티브-C의 특성들을 많이 활용하고 있습니다. 또한, 프로토콜(특히 Delegate), 카테고리, 블록, GCD 등 오브젝티브-C의 특징을 살린 API와 패턴들이 점점 많아지고 있습니다. 그러므로 좀 더 안정적이고, 유연하고, 빠른 애플리케이션 개발을 위하여 오브젝티브-C의 특성을 알아야 한다고 생각합니다



제 생각들을 조금 정리해 보았는데, 여러분들의 생각은 어떠신지요?
많은 고수분들의 의견을 들어보고 싶습니다 ^^

P.S. 오브젝티브-C를 오브젝트C 라고 잘못 표현하는 분들이 종종 계십니다. 정식명칭은 'Objective-C[오브젝티브-C]'가 맞습니다.

by yagom

facebook : http://www.facebook.com/yagomSoft

facebook group : https://www.facebook.com/groups/yagom/

twitter : http://www.twitter.com/yagomSoft ( @yagomsoft )

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

RSS Feed 받기   

 


Posted by yagom

댓글을 달아 주세요

  1. 연이 2014.06.11 11:35  댓글주소  수정/삭제  댓글쓰기

    좋은정보감사합니다^^

  2. 푸나 2015.12.16 16:46  댓글주소  수정/삭제  댓글쓰기

    NSString NSArray이런것들에 왜 NS가 붙는지 궁금했는데 의문점을 한방에 풀어주시네요!
    많이 배우고 갑니다.


오늘의 주제

1. UIAlertView


스물 아홉번째 시간입니다.^^

지난 번까지는 웹뷰에 대해서 알아보았습니다.

이번에는 AlertView에 대해서 알아보도록 하겠습니다.

AlertView는 xib에서 생성이 되지 않고 코드로 생성을 해 주어야 합니다.ㅎ

그럼 일단 시작해 봅시다~!

# UIAlertView

자, 일단 AlertView는 delegate가 없으면 무용지물입니다.
이녀석은 그냥 얼굴만 비출 뿐 아무것도 하지 않으려고 합니다.
그래서 우리는 ViewControllerForWeb에게 AlertView의 델리게이트를 해달라고 말할거예요.


자, 그리고 AlertView도 하나가 아니면 구분을 할 수 없기 때문에 태그를 넣어줄 예정이예요.
그래서 enum으로 먼저 어떻게 해줄지 정해줍니다.
enum은 첫 번째 수를 지정해 주고, 쭈욱 써주면 자동으로 하나씩 숫자가 늘어서 등록이 되어요.
첫 번째 녀석이 1이면 두 번째는 2, 세 번째오는 녀석은 3... 이런식으로요~


자, 그리고 나서 전에 작성했던 코드들을 조금 수정해 봅니다.


자, 실행 해 봅시다.
이렇게 얼럿이 뜨는게 보이시나요?ㅎ
버튼을 눌러봅니다.


반응이 없어요..ㅋㅋㅋ 네... 아까 말씀드렸듯이 이녀석은 그냥 얼굴만 비출 뿐 아무것도 하지 않으려고 합니다.
그래서 우리는 델리게이트에게 일을 맡겨야 해요.

자, 오늘도 어김없이 레퍼런스를 뒤적뒤적 합니다~
어김없이 커맨드 쉬프트 알트 / 를 누릅니다.
검색을 쇼숑~
아래 보니 사용자가 버튼을 클릭했을 때 무엇을 해줄지 말해줄 수 있는 메소드가 있군요.


이녀석에 대해 설명을 보니 유저가 버튼을 통해 대답을 하면 델리게이트에게 무엇을 할지 말해 줄 수 있는 녀석인 것 같네요.
복사해옵니다 ㅎㅎ


그리고 처리해줄 델리게이트인 ViewControllerForWeb에서 구현해 줍니다.

우리가 원하는 기능에 대해서 잘 써줍니다.
역시나 설명은 주석으로^^

 
짜잔~ 실행해서 눌러보면 어떤가요?ㅎ
잘 동작하나요?


정말 종료하시겠습니까?

예.

그러므로 오늘 포스팅은 여기까~지 ㅋㅋㅋㅋㅋㅋㅋㅋ

다음에 보아용~^^


by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

댓글을 달아 주세요

  1. 생초보 2012.05.11 14:56  댓글주소  수정/삭제  댓글쓰기

    감이와요 감이와요~~~ 창문밖에서 한줌 햇살이 쫘아~악 비춰주는거 같네요 ㅋㅋㅋ 지금 날씨는 우중충하지만 ㅋㅋㅋ


    감잡았어요 ~~

    퇴근후 다시 첨부터 복습 해봐야겟어요

    강좌 잘 보고있어요 감사합니다 ㅎㅎ

  2. 인절미후후 2012.06.06 19:48  댓글주소  수정/삭제  댓글쓰기

    잘 읽고 갑니다~
    얼럿뷰는 그냥 워닝 메시지 띄워주기만 하고 델리게이트는 사용하지 않았었는데
    야곰님께서 사용하신걸 보니까 저도 사용하고 싶어지는 마음이 마구 샘솟네요 좋은 강좌 감사합니다.

  3. 쌩초짜 2012.06.28 17:40  댓글주소  수정/삭제  댓글쓰기

    항상 잘 읽고 있습니다.

    프린트까지 하면서 보다가 문득 궁금한게 있어서요.
    위의 예제에서 alterview 의 delegate를 선언해주는 부분있자나요?
    헤더파일에...
    그부분을 지워보고 컴파일을 해도 잘 돌아가던데
    그부분을 꼭 써줘야하는건가요?
    안써주는거랑 어떤차이가 있는건가요?


    변경전
    @interface ViewControllerForWeb : UIViewController <UIAlertViewDelegate>

    변경후
    @interface ViewControllerForWeb : UIViewController

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.29 09:42 신고  댓글주소  수정/삭제

      제가 아직 확인해 보지는 않았지만, 아마 alertView의 델리게이트를 self로 지정해 줄 때 경고가 생길 것입니다.

      써주신 두 줄의 코드 차이는 사실상 명시를 해 주었다는 것에 큰 의미가 있을 것 같습니다.

      한 마디로 써줘도 그만 안써줘도 그만이지만(안 써주면 경고가 발생되죠), 이왕이면 명시적으로 써주는 것이 좋겠죠 :-)

      자주 들러주세요 :-)

  4. hobbang 2012.07.19 16:22  댓글주소  수정/삭제  댓글쓰기

    sample 보고 따라서 써보기만 했었는데,
    강좌 올려주신걸 보니 어떻게 써야 하는지.. 이해가 잘 되네요. 감사합니다.

  5. Favicon of https://kier9.tistory.com BlogIcon 리현느 2012.07.29 07:56 신고  댓글주소  수정/삭제  댓글쓰기

    나 어특햄 흑흑 경고창 안뜨넹

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.29 13:01 신고  댓글주소  수정/삭제

      아픈게 아직 안나으신건가요 +_+ㅋㅋ
      버튼에 태그가 잘 들어가 있는지,
      버튼에 메소드가 잘 연결이 되어있는지,
      [alert show];
      가 작성이 되어있는지... 등등 잘 살펴보세용~
      이래도 저래도 안되면 빌드 클린 해 보고 다시 해보셔요~
      커맨드+쉬프트+K

  6. Favicon of https://kier9.tistory.com BlogIcon 리현느 2012.07.30 09:13 신고  댓글주소  수정/삭제  댓글쓰기

    될때까지 해봤더니 되요 ㅎㅎㅎㅎ 짱짱

  7. 서동휘 2012.08.06 13:26  댓글주소  수정/삭제  댓글쓰기

    이상하게도 ㅠㅠ AlertView *alert 쓰는게 여기서 부터 빨간색 느낌표가 뜨네요

    AlertView를 인식하지 못하는 것 같은데 무슨 문제일까요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.06 16:52 신고  댓글주소  수정/삭제

      안녕하세요 동휘님~!
      AlertView가 아니라 UIAlertView 입니다~ㅎ
      만약에 그래도 에러가 난다면 위에 똑같은 alert 객체를 생성하셨는지 확인해 보세요~ㅎ
      같은이름의 객체가 겹치면 에러가 나옵니다~!

  8. 나에게넌 2012.08.13 10:59  댓글주소  수정/삭제  댓글쓰기

    폭풍 흡입!!! 감사합니다..

  9. Favicon of https://gogodao.tistory.com BlogIcon rustyDAO 2013.02.15 16:53 신고  댓글주소  수정/삭제  댓글쓰기

    야곰님~
    맥부기에서 야곰님 강좌 처음 접하고, 여기서 계속 강좌보면서 공부하다가 모르는 건 맥부기 야곰님 강좌에 질문했었는데 ~
    T-Story 가입해서 이제 여기다 남겨볼려구요 ^~^ㅋㅋㅋ

    하나하나 다 해보고 있는데, 오늘 switch문에서 으아 오타를 내버려서ㅠㅠ web뷰 닫기버튼이 제대로 안먹히는 실수를....
    무슨문제인지 찾을려고 디버깅을 해보았는데요~ visual studio에서 디버깅하던 그런 경험으로 ㅋㅋㅋ
    아 근대 아직 xcode에서 디버깅 하는게 너무 미숙하네요 ㅋㅋ 또 뭐 메모리 누수 감지 시뮬레이터 등 이런것도 있다던데,,

    야곰님 여유가 되신다면 ! 조심스레 디버깅, 시뮬레이터 다루는 것도 조심스레,, 요청해봅니당
    배우는 입장에서 염치 없지만,,, 강좌에서 담번에는 뭐할까요? 이러셔서 ㅋㅋㅋㅋㅋㅋ 헤헤,,ㅋㅋㅋㅋ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.15 17:47 신고  댓글주소  수정/삭제

      안녕하세요 다오님 :)
      제가 요즘 개인적으로 건강 악화와 사정으로 인하여 포스팅을 하지 못하고 있습니다...^^;

      이렇게 찾아와 주셨는데 좋은 답변을 드리지 못해서 정말 죄송합니다... ㅠ_ㅠ

      제가 직접 올릴 순 없지만, 좋은 강좌들 링크 알려드릴게요.
      도움이 되면 좋겠습니다 :)

      가끔 들러서 또 덧글 남겨주세요 ㅎ

      포스팅은 못해도 질문답변이나 도와드릴 수 있는 부분이 있으면 언제든 준비가 되어있습니다 ^^*

      http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1
      http://www.raywenderlich.com/2657/memory-management-in-objective-c-tutorial
      http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial

  10. Favicon of https://gogodao.tistory.com BlogIcon rustyDAO 2013.02.18 09:37 신고  댓글주소  수정/삭제  댓글쓰기

    아.. 야곰님 빠른 쾌유를 빕니다..
    아프신대도 이렇게 질문 받아주시고, 또 좋은 자료도 소개해 주셔서 정말정말 감사합니다..
    이 은혜를 어찌 갚아야 할지 ㅠㅠ

    얼른 몸부터 빨리빨리 나으셔요 !

  11. DinoJ 2013.06.11 10:41  댓글주소  수정/삭제  댓글쓰기

    정말 강의가 재밌고 귀에 쏙쏙 들어와요~!!
    항상 감사해요 야곰님^^


오늘의 주제

1. UIWebView
2. UIWebViewDelegate 



스물 여덟번째 시간입니다.^^

지난 번에는 웹뷰를 만들고 화면에 웹페이지를 띄워 만들어 보았습니다.

자 그럼 오늘은 웹뷰와 함께 이것저것 해 보아야 겠지요?ㅎ

긴 말 없이 시작해 봅니다 ㅎㅎ

p.s. 추천 한 방 어떠세요?ㅎ



# UIWebView - delegate

웹뷰를 화면에까지 띄워보았으니 이제는 앞으로 가기 뒤로가기 등,... 버튼 동작들을 구현해 봅니다.
자, 일단은 지난번에 버튼들에 태그를 달아 두었던 것 기억하시죠?
그 태그를 보다 직관적으로 표현해 보기 위하여 #define과 enum을 사용하여 구현해 보았습니다.
#define과 enum은 뭐냐구요?
아... 음... C에서 나오는 녀석들인데,

제가 C 카테고리에서 포스팅 한 줄 알고 있었는데, 아직 포스팅을 안했네요 ㅠ_ㅠ
iOS에 너무 열중을 하다보니;;ㅎㅎ

C 카테고리에서 포스팅 했습니다..ㅎ
한 번 읽어보세요..^^
2012/05/14 - [C] - C <15>. 전처리자
2012/05/24 - [C] - C <20>. enum

그냥 말 그대로 define (정의) 해 주는 전처리자 입니다.
전처리자는 뭐냐구요?
말그대로 전처리, 전에 미리 처리해 놓는다 이런거구요. 깊이 생각하실 필요없고 그냥
변수처럼 쓰이지만 바꿀 수 없는 static한 변수입니다.
물론... 변수와는 큰 차이가 있습니다만, 무시하세요 ㅎㅎ

이렇게 define과 enum을 사용하여 미리 태그들을 직관적으로 표현해 봅니다. 둘 중 하나만 해도 됩니다.
저는 그냥 아주 약간의 테크닉을 소개해 드리고자 이렇게 두 가지 표현 다 사용 해 본 것 뿐입니다..^^;


그리고 내려와서 지난 번에 만들어 두었던 barButtonClick: 메소드를 알차게 채워줍니다^^


짜잔~
실행해 보고 버튼을 눌러봅니다~

잘 동작 되시나요?ㅎ

그런데 코드에서 보면... 네 번째 function 버튼의 동작과 모양이 일치하지 않음을 알 수 있습니다. 그러면 웹뷰의 동작 상태에 따라
버튼의 모양을 상황에 맞게 변경해 주어야 겠지요?ㅎ

그러면 누군가 웹뷰의 상태를 보면서 웹뷰가 특정 행동을 할 때, 그에 맞는 상황 대처를 해 주어야 합니다.
그 녀석이 뭐라고 했죠?

네 맞습니다! delegate !!



# UIWebView - delegate

자, 그러면 Web View의 델리게이트에 대해 알아봐야겠습니다 ㅎㅎ
검색을 알차게 해 봅니다~
아직도 Documentation의 단축키를 모르신다구요?
ㅠ_ㅠ Command + Alt + Shift + / 입니다.
자, 그렇게 해서 레퍼런스를 찾아보니, 델리게이트가 해줄 수 있는 일들이 나오네요 ㅎ
우리가 필요한 것은 웹뷰가 로딩을 시작할 때, 그리고 끝냈을 때 입니다.
왜냐구요? 로딩을 시작하면 정지 버튼으로 변경 해 주고, 로딩이 끝나면 새로고침 버튼으로 변경 해줘야 하니까요 ~


자, 그럼 이 녀석들에 대한 설명을 읽고, 이녀석이다 싶으면 메소드를 복사 해 옵니다~



Bar Button은 툴바 안에 속해 있는 녀석이죠.
일단 그 녀석을 변경해 주려면 툴바의 도움이 필요할 것 같군요~
툴바의 아울렛을 선언 해 줍니다.



이렇게 이쁘게 연결이 되었겠죠?ㅎ


그리고 알차게 코드를 폭풍입력!!!!!!!!!!!!!
코드에 대한 설명은 주석으로 알차게 달려있답니다^^*


그리고 나서 동작 상태에 따라 버튼모양이 이쁘게 변하는지 확인 해 봅시다~

어떤가요?ㅎ

델리게이트라는 녀석 참 오묘하고 재미나지 않나요?

오늘은 여기 까~지~^^

다음에 또 만나요~



by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

댓글을 달아 주세요

  1. Favicon of http://blog.daum.net/exlikeus BlogIcon 몰락아티스트 2012.05.09 12:26  댓글주소  수정/삭제  댓글쓰기

    이런 개발하기 시리즈를 포스팅하는게 얼마나 힘들고 피곤한지 사람들이 모르는 걸까요?
    관심이 없어서 그런걸까요. 항상 수고하시는 IOS개발하기 시리즈를 지켜보고 있습니다.
    댓글과 추천뿐이지만, 힘내시고 항상 정성스러운 포스팅 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.09 15:52 신고  댓글주소  수정/삭제

      ㅎㅎ 안녕하세요~
      아티스트님 글 잘 보고 있습니다...
      저도 오늘 지나치기만 하고 댓글을 못달았네요 ㅠ_ㅠ
      저부터 반성을...ㅋㅋ
      저도 아티스트님께서 포스팅하신 인기 블로그에 관한 글처럼 인기블로그에 속하고 싶네요...^^
      물론 제 욕심일 뿐이지만요 ㅋ

  2. 생초보 2012.05.10 02:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님~ 생~ 초보입니다

    프로그램에 ㅍ 자 도 모르는 상태에서 첨부터 쭉~ 다 읽어보면서 따라도 해보니 다 이해는 못해도 감은 오는거 같네요

    단지 앱을 만들고 싶어서 공부를 시작했는데 맘이 급해서 그런지 만들고싶은 앱과 관련된 부분은 눈에 잘들어오는데
    그 외 부분은 대충대충 이해 못하고 넘어가게 되고....

    오늘은 #define <--요놈을 알게되서 너무 기분이 좋아요~ ㅎㅎ

    다음 강좌도 잘~ 부탁드립니다 감사합니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.10 09:16 신고  댓글주소  수정/삭제

      ^^ 안녕하세요~
      제 목표와 조금은 부합한 결과를 이끌어 낸 것 같아 기분이 좋습니다^^*
      마음이 급하다고 기초와 기본, 그리고 중요한 부분을 놓치는 경우가 많고, 저 또한 그랬었는데 누누히 말씀드리지만 간과하고 넘어가서는 안될 부분들이 많습니다..^^
      물론 이제 기초부분이 아니라 기본 부분으로 접어들었지만서도 기초를 탄탄히 하시기 바랍니다!^^
      생초보님의 응원으로 힘이 납니다!!ㅎㅎ
      #define 녀석은 잘 사용하면 편하고 좋지만, 위험요소가 너무나 많은 녀석입니다.
      꼭 필요할때만 적당히 사용하시고, 그 외에 다른 방법들도 많으니 enum, const 상수 등을 사용하시기를 권고드립니다. (검색해 보시면 define의 단점이랑 그 외에 다른 대체방법이 나올거예요)
      그럼 자주자주 놀러오시고 댓글도 많이 많이 주세요~^^
      필요한 부분 있으면 말씀해 주시구요 ㅎ
      그럼 좋은하루 되세요~^^*

  3. 인절미후후 2012.06.06 16:49  댓글주소  수정/삭제  댓글쓰기

    아니 이거슨!!!(이것은 이라고 적는게 맞습니다.)
    바 버튼 바꾸기군요 제가 이전에 바 버튼 체인지를 시도하다가 포기했었는데
    폭풍코딩중에 너무 반가와서(반가워서가 맞는말입니다.) 중간에 글남깁니다.

    제가 이런저런 검색으로 알아낸것은 애플에서 제공해주는 이미지 버튼(play/stop/refresh/rewind같은)은
    체인지를 할수 없고 정 사용하고 싶으면 같은 자리에 버튼을 두개주고 히든과 비지블(hidden = NO)을 번갈아가면서
    사용하라고 하더군요 (카메라 커스텀 할 때 사용해 봤습니다.카메라를 온/오프 가능하게 하고 on시에만 사진마크가 뜨도록 하는 거였죠)
    코딩 다 하고 다시 소감 남길게요 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.06 17:51 신고  댓글주소  수정/삭제

      아하~! 그런 방법도 있었군요 ㅎㅎ
      미쳐 생각하지 못했네용 ㅎ
      이런 귀차니즘같은...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
      좋은 부연설명 고맙습니다 ^^*
      오늘 폭풍 댓글 받으니 기분 너무 좋네요 ㅎㅎ (정말 좋네요가 맞는 말입니다.)

  4. 지문 2012.06.06 18:39  댓글주소  수정/삭제  댓글쓰기

    초보라, 맥부기에서 야곰님 강좌 본적이 있어서 왔습니다.
    맥부기에도 질문 올렸지만 아직 해결이 안되어서요.
    RUN했을때, 시뮬레이터5.1가 xcode(4.3.2) 상에서 바로 뜨지를 않고
    장면이 바뀌면서 바탕화면이나, 크롬화면위에서 시뮬레이터가 뜹니다.
    시뮬레이터를 xcode화면 위에서 뜨게 하고 싶은데,,어떻게 하는지요?
    너무 초보적인 질문이라서,,,망설이다가 올려봅니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.07 01:33 신고  댓글주소  수정/삭제

      글쎄요..^^;
      무슨말인지 완전히 이해가 가진 않지만,
      다음 번에 실행될었으면 하는 자리에서 시뮬레이터를 종료 해 보세요.
      다음 번에 실행 될 때 시뮬레이터가 지난 번에 실행되었던 자리에서 실행 될 겁니다.
      적절한 답변이었으면 좋겠네요^^;;;

  5. yuyu 2012.06.21 18:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좀 여쭤보고 싶은게 있는데요.
    앱에서 사진을 찍은 위치의 위도와 경도를 알수 있나요?
    그리고 위치서비스를 사용자 동의없이 자동으로 활성화 시키는 것도 가능한가요?
    아니면 자동으로 활성화 시키면 안되는 규정이라도 있나요?
    아무리 찾아봐도 모르겠네요.
    알고계시면 좀 알려주세요~ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.22 11:39 신고  댓글주소  수정/삭제

      지난 번이랑 질문이 똑같으시네요...^^;
      지난 번에 답변 드렸었는데...
      그래서 저도 답변을 복사해왔습니다 ^^
      그리고 사진에서 위치 가져오는 방법은
      http://stackoverflow.com/questions/1238838/uiimagepickercontroller-and-extracting-exif-data-from-existing-photos
      http://stackoverflow.com/questions/616346/iphone-access-location-information-from-a-photo
      참고하세요~
      ============================
      상식적으로 당연히 사용자의 허가 없이는 그 무엇도 불가능 합니다...
      그런 규정이 명시되어있는지는 모르겠지만, 사용자의 위치정보를 무단 수집하는 행위이므로 어플리케이션에서 임의로 사용자 위치정보를 사용할 수 없습니다.
      사용자가 허가 하여야 합니다.

    • yuyu 2012.06.26 13:27  댓글주소  수정/삭제

      안녕하세요.
      답변 정말 감사드립니다.
      전에 제가 올린 글은 너무 예전 글에 올려서 지우고 다시 올린건데 안지워졌나보네요.ㅎ
      ================================
      위치정보 무단 수집은 당연히 불법인거 아는데,
      애플에서 사용자 허가 없이는 위치정보 수집을 하면 안된다는 조항을 회사에서 꼭 찾아야 한다는데,
      아무리 찾아도 못 찾겠네요ㅠ
      혹시 아시나 싶어서 여쭤본거에요.ㅎ
      더 찾아봐야겠네요.ㅋ

      다시한번 답변 감사드립니다.^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 16:06 신고  댓글주소  수정/삭제

      음... 그런 조항에 대해서는 확인해 본 적이 없어서요 ㅠ_ㅠ 구글신께서 답을 내려 주셨기를... :-)

  6. Sio 2012.07.18 17:25  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~~~!!
    음.. itemStyle에 따라서 FuncButton을 바꾸는 부분에서요...
    저는 바뀌는 모습이 보이지 않습니다 ㅜㅜ;;;;;
    시뮬레이터로 아무리 돌려도 변하는 모습이 보이질 않네요 ....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 19:04 신고  댓글주소  수정/삭제

      음.. 웹뷰의 델리게이트가 연결되어있나 확인해 보세요~^^*

    • Sio 2012.07.19 11:22  댓글주소  수정/삭제

      아하하;; 할때 뭘 잘못 해서 xib를 싹 지웠다가 다시 했더니 delegate 연결을 깜박했네요 ㅡㅡ;;;
      한번 해봤으니 혼자해봐야지 하면서 나름대로 다시 해봤는데도 역시 하나씩 빠트리네요 ㅋㅋㅋ
      이젠 아주아주 잘됩니다~! 감사합니당^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.20 09:07 신고  댓글주소  수정/삭제

      잘 동작된다니 다행입니다 ㅎ

  7. 리현 2012.07.27 04:39  댓글주소  수정/삭제  댓글쓰기

    당큐~~아파서 잠시 쉬고 다시왔더염 ㅎㅎㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.27 13:11 신고  댓글주소  수정/삭제

      에고...ㅠㅠ 아프면 안돼요~
      저도 며칠 아프고 이제 좀 정신 차렸는데, 혼자사는데 아프니까 서러워요 ㅠㅠㅠ

  8. 나에게넌 2012.08.13 10:39  댓글주소  수정/삭제  댓글쓰기

    계속 쪽쪽 빨아갑니다..오늘 강의 다 볼꺼에요 ㅎㅎ 항상 감사합니다..

  9. 감사합니다. 2012.10.17 17:19  댓글주소  수정/삭제  댓글쓰기

    yagom님 덕에 정말 많이 배우고 있습니다.

    근데 ios6으로 넘어오면서 더이상
    [self dismissModalViewControllerAnimated:YES]; 코드가 안먹는거 같아요..

    그래서
    [self dismissViewControllerAnimated:YES completion:nil]; 요걸로 바꾸니 정상 작동하는군요.

    스토리 보드로 yagom님 강좌 다 따라하는데 정말 재밌네요.
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.20 10:43 신고  댓글주소  수정/삭제

      안녕하세요 :)
      말씀하신 내용이 맞습니다.
      iOS6에서 변경된 부분 중 하나인데요, iOS6미만 기기에서도 호환이 되게 만들으려면 버전체크를 해서 적절한 메소드를 호출해 주어야겠죠?ㅎ
      찾아주셔서 정말 고맙습니다.
      필요한 내용 말씀해 주시면 피드백 하도록 노력하겠습니다 ^^*

  10. 2012.10.31 15:40  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.01 09:37 신고  댓글주소  수정/삭제

      안녕하세요 앱만들자님 :)
      applicationDidBecomeActive 메소드와 applicationWillResignActive 두 메소드를 이용하시면 될 것 같습니다 ^^*
      찾아주셔서 정말 고맙습니다 ㅎ
      추운날씨 감기 조심하셔요~

  11. 이춘홍 2014.01.04 22:52  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 소중한 정보 잘 보고 질문드립니다.

    제가 앱개발을 처음해봐서 웹뷰의 사용시 애플 앱심사에 결격사유가 어느정도인지 궁금합니다.
    혹시 앱심사를 잘 통과할 수 있는 노하우가 있을까요~?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.01.05 20:05 신고  댓글주소  수정/삭제

      안녕하세요, 방문해 주셔서 고맙습니다 ^^

      앱 심사 기준은 기본 틀은 크게 변하지 않지만 간간히 변하기 때문에 수시로 확인을 해주시는 것이 좋습니다.

      https://developer.apple.com/appstore/guidelines.html

      이곳에 가시면 앱 심사 가이드라인이 있습니다.

      제가 아무리 말씀드려도, 개인마다 어떤 기준의 체감이 다르기 때문에 가이드라인을 읽어보시고 애매한 부분이나 궁금한 부분이 있다면 애플에 직접 이메일로 문의해 보시는 것도 좋은 방법입니다 :)


오늘의 주제

1. UIWebView 
2. UIToolBar



스물 일곱번째 시간입니다.^^

지난 번까지는 프로젝트를 계속 사용했는데, 이번에 새로 프로젝트를 하나 만들어 보겠습니다.
어찌되었든간 지난 번 까지 했던 내용들은 마음에 드셨는지 모르겠습니다...^^
지금까지 해 본것들은 예제이고 앞으로도 예제를 통해 내용이 진행되니, 디자인이 이쁘지 않더라도, 지금 당장 뭐가 없어보여도 쭉 한번 따라해 보세요..^^
그럼 어느순간 머릿속에 정리가 되고 느낌이 올 때가 있습니다.
그 때, 필요한 것들만 검색하고 취합해서 자신만의 프로젝트를 만들어 가시면 됩니다.
아직 그정도는 안온 것 같죠?ㅎ

그럼 오늘 또 새로운 세상을 향하여 한 걸음 내딛어 봅시다^^

출발~!



# UIWebView, UIToolBar

UIWebView...
음~ 이녀석은 뭘까요?ㅎ
딱, 이름만 봐도 웹뷰.
즉, 웹페이지를 보여주는 녀석이라는 것을 알 수 있죠?ㅎ

오늘은 이녀석과 한 번 놀아봅시다^^

아까 말씀드린대로 오늘은 새로운 프로젝트를 생성하여 진행 하도록 하겠습니다.
물론 이후 포스팅에서도 이 프로젝트를 계속 사용할 예정입니다~
프로젝트 템플릿은 Single View Application으로 하겠습니다.


프로젝트 이름은 WithYagom으로 했구요~
아래 여러 옵션들을 유심히 보시고, 실수 하지 않도록 하세요~
질문 주시는 분들중에 스토리 보드에 체크하고 프로젝트를 생성하셔서 질문하시는 분들이 몇분 계시더라구요^^;
너무 조급히 생각하지 마시고 천천히 꼼꼼하게 보며 진행하시기 바랍니다.
조급히 달리다 보면 소소한 기초들과 개념들을 놓치게 됩니다~!


일단 앞으로 당분간은 세로모드 고정으로 진행할 계획입니다.~



자, 새로운 프로젝트를 생성하고, 이제 WebView를 얹어 볼 새로운 뷰 컨트롤러 생성을 할 차례입니다.
WithYagom폴더에서 오른쪽 버튼 또는 커맨드 클릭을 하여 New File을 선택합니다.


Objective-C class를 선택해 주시구요~


클래스 이름은 ViewControllerForWeb이라고 하겠습니다. XIB파일 생성에도 체크해 주시구요~


자, 이렇게 새로운 클래스가 생성되었죠?
그런데 이렇게 클래스를 새로 생성 할때마다 파일이 쭉쭉 늘어나고 복잡해 지는데... 정말 많아지면 정신없겠죠? (지난 프로젝트 한 번 보세요..ㅎㅎ)
이참에 정리를 좀 해볼까요?


WithYagom폴더에서 우클릭을 하고 NewGroup을 선택합니다.


새로운 그룸이 생성되면 이름을 써서 그룹을 만들어 주고, 파일들을 알맞게 정리해 줍니다. 저는 이런식으로 정리를 해 보았습니다~
자, 좀 깔끔하죠?ㅎ


그렇다면 이제 본격적으로 시작해 봅시다.
ViewControllerForWeb.xib파일로 이동합니다.
ToolBar라는 녀석을 하단에 쭈욱 넣어주시고,
Bar Button Item이라는 녀석을 하나 넣고, Flexible Space Bar Button Item 을 넣고, 다시 BarButton Item을 넣고...
그렇게 Bar Button Item을 다섯 개 넣어줍니다.


자, 그리고 Bar Button Item들의 이름을 이렇게 바꿔주시고요~
ToolBar위쪽으로 Web View를 똻~~!!!!!!! 올려줍니다~


그리고 오른쪽 버튼을 누른 상태로 File's Owner로 쭈욱 끌어당겨 줍니다.


그리고 delegate를 클릭!!
이제 이 클래스(ViewControllerForWeb)의 인스턴스가 이 WebView의 delegate가 됨을 말하는 것입니다. WebView의 동작처리를 ViewControllerForWeb이라는 녀석이 하겠다는 뜻이죠?


그 이후에 Assistance 모드로 전환해서 ViewControllerForWeb.h파일에다가 아울렛을 선언해 줍니다.



자, 그러면 ViewControllerForWeb.h에 이렇게 이쁘게 생성이 되겠죠?ㅎ



자, 그럼 이제 Bar Button Item들도 액션 선언을 해 주어야 하는데, Bar Button Item 선택이 한 번에 안됩니다.
버튼을 누르면 처음에 Tool Bar 전체가 선택이 됩니다. 그러면 그 후에 버튼을 한 번 더 눌러주면 그 때 버튼이 선택이 됩니다.
(아래 두 그림을 참고하세요)


자, 그러면 첫 번째 버튼의 액션을 연결 해 봅시다.
오른쪽버튼을 누른채로 쭈욱 당여옵니다.
그 후에 액션을 아래처럼 연결해 주시구요. 이 그림만 보고 성질 급하게 다섯 번 째 까지 연결 하실 분들을 위해 한 줄 더 쓰고 다음 그림으로 갑니다 ㅋㅋ
두 번 째 버튼부터는 아래 그림을 참고하세요.


두 번 째 버튼부터는 위에 만들어 두었던 메소드로 연결을 해줍니다.
오른쪽 버튼을 가지고 쭈욱 끌어서 만들어 놓은 메소드 위로 올리면 Connect Action이라고 나옵니다. 그 때 마우스를 떼면 빤짝빤짝 해요~
연결 된 겁니다.


자, 그런데 버튼들에 이름을 직접 새겨 넣는 것 보다 좀 더 직관적으로 표현해 보고 싶습니다.
네 번째 새로고침 버튼의 스타일을 변경 해 봅시다. 좀 더 직관적으로 보이죠?ㅎ


 다섯 번 째 녀석도 한 번 바꿔 봅니다. 물론 실제로 컬업으로 닫히게 하지는 않을거예요..ㅎㅎ 그냥 스타일 한 번 줘 봅니다~



그리고 이제부터 첫 번째 버튼 부터 태그를 하나씩 지정해 줍니다.
태그는 그 녀석만의 식별 숫자라고 생각하시면 되겠습니다.
물론 다른 객체도 같은 태그를 가질 수 있습니다만, 객체별로 구분하고 싶다면 태그를 다르게 입력해 주는게 좋겠죠?
첫 번째 버튼의 태그는 10


두 번째는 20


세 번째는 30... 네 번째 다섯 번 째 까지 쭈욱 넣어줍니다.



그 후에 이제 메인 뷰 컨트롤러인 ViewController.xib로 이동하여 버튼을 하나 만들어 줍니다.
그리고 액션을 그림처럼 연결 해 주세요~


그리고는 새로 우리가 만든 클래스의 헤더를 import 해 주시고,
버튼과 연결된 메소드인 webButtonClick: 에 내용을 넣어줍니다.
코드는 아래 소스의 주석을 확인하세요.^^


그리고 ViewControllerForWeb.m으로 옵니다.
아래 소스를 작성해 주세요.


실행해 봅니다~!
자, 잘 나오나요?ㅎ
아래 툴바의 버튼들은 아무 동작을 하지 않죠?ㅎ 물론 우리가 아무것도 작성하지 않았기 때문이죠..^^;



오늘은 여기까지..ㅎ

오늘은 양이 많았지만, 결국 나온것은 웹페이지 하나 띄워 본 것 뿐이네요 ㅎㅎ
하지만 다음 포스팅의 밑거름들을 쭈아악~~~~~ 깔아 놓은 것이니 다음 포스팅에서는 좀 더 알찬 내용이 나올 것이라고 믿어 의심치 않습니다 ㅎㅎ

그럼 다음에 뵈어요~^^

뾰봉~


by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 편안한비 2012.05.15 11:03  댓글주소  수정/삭제  댓글쓰기

    좋은자료 잘 보고 갑니다~

  3. 노가다개발자 2012.05.17 18:25  댓글주소  수정/삭제  댓글쓰기

    혹시 폰갭 이용시 웹페이지를 불러올때 웹뷰로 불러오는게 아니라.. 사파리 웹으로 전환이 되서 열리는데..

    이것에 대한 폰갭에 대한 설정이 있는지 아니면 코딩상으로 제어를 해야하는지 알수있을까요??

    스크립트로 보내서 document.href 로 열어도 다른분 댓글보면 웹뷰를 통해서 열린다는 분도 계시는거 같은데..

    웹으로 전환이 되어버리네요..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.18 05:47 신고  댓글주소  수정/삭제

      흠... 글쎄요^^;
      폰갭에서 웹뷰를 띄워본 적이 없어서 잘 모르겠습니다..^^;
      맥부기나 스택 오버플로에서 정보를 얻으심이 빠르실 것 같습니다..
      확답을 드리지 못해 죄송합니다..!

  4. 인절미후후 2012.06.06 16:09  댓글주소  수정/삭제  댓글쓰기

    항상 알찬 포스팅 감사합니다~~

    와서 볼때마다 느끼는데 딱 저한테 필요한 내용이 정말 많은거 같아요 유용하게 잘 보고 있습니다.
    다음강좌 이동하겠습니다~

  5. 박병훈 2012.07.14 16:58  댓글주소  수정/삭제  댓글쓰기

    안녕하세요?? 요즘 아이폰 입문자입니다.ㅋㅋㅋㅋㅋㅋㅋ
    아주 좋은 자료 감사합니다.
    이번 포스팅을 보고나서 다른 페이스북 페이지로 연결 시키려고하는데 안되네요
    페이스북은 연결이 안되나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.15 20:28 신고  댓글주소  수정/삭제

      안녕하세요 박병훈님.
      페이스북을 어떻게 연결하고자 하시는지요?
      페이스북 페이지를 열고 싶으신 건지, 아니면 페이스북에 글을 남기고 싶으신 건지에 따라 방법이 다릅니다 :-)
      게다가 이제 iOS 6.0 이 정식으로 나오면 또 다른 방법이 생기구요 ㅎ
      어떤 방법으로 연결을 원하시는지 구체적으로 말씀해 주세요~

  6. 앱만들자 2012.07.15 00:18  댓글주소  수정/삭제  댓글쓰기

    참쉽게 설명과 그림을 보니 이해가 자꾸만 가네요 정말 감사합니다........

  7. Sio 2012.07.18 13:09  댓글주소  수정/삭제  댓글쓰기

    웹뷰 같은건 왠지 어려울것 같았는데
    아직까지는 따라갈만 해서 좋네요 ㅎㅎㅎ
    설명을 너무 잘해주셔서 그런가봐요 ^^

  8. 나에게넌 2012.08.13 09:34  댓글주소  수정/삭제  댓글쓰기

    야곰님 지식을 쪽쪽쪽 다 빨아가겠습니다..항상 감사합니다..

  9. mhy 2012.09.12 11:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님 글에 많은 도움을 받고 있습니다.

    현재 내용을 따라하다 문의 드릴게 있엇 글남깁니다.

    위내용에 웹표 표현되는것이 시뮬레이터에서는 잘보이는데

    폰으로 확인하면 아무내용도 표시가 되질않는데 어떤이유때문에 그런가요..

    웹뷰가 그냥 흰색화면으로만 나오네요...

    도움주시길 바랍니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:46 신고  댓글주소  수정/삭제

      혹시 아이폰의 버전이 5.x대가 맞나요?
      6.x대에서는 아직 제가 테스트를 해보지 못했습니다.
      버전이 달라서 그럴 수도 있을 것 같습니다 ^^;
      그게 아니라면 어떤 이유 때문인지 다시 알아봐야겠네요~

  10. Parkep 2013.01.02 10:07  댓글주소  수정/삭제  댓글쓰기

    덕분에 공부 열심히 하고있습니다 감사합니다 ㅎㅎㅎ

  11. dumbo 2013.01.15 15:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님 덕분에 ios 재미있고 쉽게 배우고 있습니다.

    현재 6.0버전으로 따라가고 있는데 loadRequest부분에서 thread 1 break point 1.1 메시지가 나오면서 구동이 멈추는데요.

    어떤 문제로 메시지가 뜨는지 문의드립니다.

    늦게나마 새해 복 많이 받으세요~~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.16 13:04 신고  댓글주소  수정/삭제

      혹시 Break Point로 지정되어있진 않은가요?^^

      코드 옆에 파란색 화살표가 있는지 확인해 보시고 혹시나 있으면 제거해 주세요 ㅎ

  12. dumbo 2013.01.17 22:34  댓글주소  수정/삭제  댓글쓰기

    .....감사합니다 ㅎㅎ

  13. seunggon 2013.02.25 19:21  댓글주소  수정/삭제  댓글쓰기

    웹뷰의 소스를 얻을 수 있을까요 ? 따라하는데 계속 실패하네요 ㅠㅜ

  14. Help 2013.02.28 10:23  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 잘 보고있어요 정말 큰도움되었답니다!!ㅠㅠ

    아이폰 앱을 다 만들고 앱스토어에 등록하는 강의생각은 없으신가요?ㅠㅠㅠ

    열심히 구글링하고 있는데 원하는 정보가 안나와요...

    만든 앱을 올리고나서 그걸 업데이트하려면 -info.plist 에서 버전만 올리면 되는건가요??

    그리고 사용자가 다운받아논 앱을 업데이트시키려면 어떻게 해야할지....아무리찾아도안나와요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.28 10:40 신고  댓글주소  수정/삭제

      안녕하세요~
      지금은 제가 포스팅할 여력은 되지를 않구요...^^
      http://writerkim.pe.kr/1132
      여기를 참고해 보시겠어요?ㅎ
      큰 도움이 되어드리지 못하여 죄송합니다..^^;

  15. 딴또 2013.03.13 16:59  댓글주소  수정/삭제  댓글쓰기

    멋진 강의 정말로 감사합니다.

  16. 배도영 2013.03.16 17:24  댓글주소  수정/삭제  댓글쓰기

    @synthesize ygWebView 가 빠졌네요... ㅠㅠ

    왜 안되나싶어서 엄청 찾아다녔습니다.ㅠㅠ

  17. 노현빈 2013.07.07 22:42  댓글주소  수정/삭제  댓글쓰기

    포스팅 정말 감사합니다
    우연히 블로그를 방문하게 되었는데
    야곰님 덕분에 잘 배우고 있습니다
    프로그래밍은 초심자라 배우면서도 조금 막막했는데 강의보면서 천천히 따라하니까 조금씩 감이 잡히는 것 같습니다.
    정말 감사합니다.

  18. Favicon of http://ohsdsl@naver.com BlogIcon hahahaha 2013.09.02 16:05  댓글주소  수정/삭제  댓글쓰기

    야곰님 잘 보고 있습니다.

    질문이 있는데요

    초기 페이지에서 버튼 눌러서 웹뷰 띄우게 하는게 아니라

    바로 초기페이지에 웹뷰를 넣고 실행하니까 오류가 나는데요

    원래 안되는 것인지 아니면 제가 잘못해서 그런건지 궁금합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.09.03 09:17 신고  댓글주소  수정/삭제

      안녕하세요~

      초기화면에서 웹뷰를 띄운다고 오류가 나서 앱이 죽는다거나 하는 경우는 없을거예요.
      뭔가 잘못되었기 때문에 오류가 나는 것 같은데, 어떤 오류가 어디서 나는지 파악해 보셔야 할 것 같습니다.

  19. 조언이필요한자 2014.02.05 10:06  댓글주소  수정/삭제  댓글쓰기

    안녕하세요

    야곰님 글 너무 잘보고 있습니다

    질문이 있습니다.

    야곰님이 말씀하신대로 웹뷰를 잘 띄웠는데요

    url주소가 한글이 들어가 있으면 불러오지가 않습니다

    한글이 깨진건 아니구요 로그에는 주소가 정확히찍힙니다.

    혹시 조언좀 구할수 있을까요??ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.02.05 10:11 신고  댓글주소  수정/삭제

      안녕하세요 :)
      URL 인코딩이 필요한 것 같습니다.
      http://theeye.pe.kr/archives/853
      이 주소 또는 구글에 iOS URL encoding 이라고 검색해 보셔요 ㅎ

  20. 조언이필요한자 2014.02.05 10:26  댓글주소  수정/삭제  댓글쓰기

    아 너무 감사합니다

    가르켜주신 url 타고 가서 보고 바로 적용 해서 해결했습니다.

    정말감사합니다. 좋은하루되세요~

  21. 조언이필요한자 2014.02.06 14:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요

    질문이있어서 그러는데요

    공지사항 을 만들려고 합니다.
    그런데 공지사항 목록을 그렸습니다
    그리고 그 목록중 하나를 클릭하면
    DrawDetail(nIndex); nIndex를 인자로받아
    함수를 호출 하여 그 공지사항에 대한 정보를 그렸습니다

    여기서 문제는 공지사항 상세 에서 다음과 이전 버튼을 만들어서
    다음버튼을 누르면 클릭한 목록 다음것을 그리고 이전버튼을 누르면 클릭한 목록 이전것을 그리고 싶습니다.

    그래서 DrawDetail(nIndex); 함수로 값을 그릴때 nIndexnext = nIndex +1; 을 해줘서 다음버튼 클릭시
    DrawDetail(nIndexnext); 로 다음 공지사항 상세를 바로그리려 하는데 그 목록에 대한 정보를 가져오지 못합니다.
    인자 값은 제대로 증가 한것을 확인했습니다만....

    제말을 이해하셨을지 모르겠습니다. 읽어주셔서 감사합니다. 조언가능하시면 조언해주시면 감사하겠습니다.ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.02.07 09:14 신고  댓글주소  수정/삭제

      안녕하세요, 또 뵙습니다 :)

      여러가지 경우의 수가 존재하기 때문에 딱 뭐라고 말씀드리기가 어렵군요.
      일단 목록(배열)의 인자들이 이미 메모리에서 해제되었을 수도 있고
      DrawDetail 함수가 어디에 구현되어 있는지에 따라서도 다를 것 같구요... 또 어떤식으로 그리고 계신지도 제가 잘 몰라서요 ^^;

      상세 화면으로 넘어갔다면 상세화면 전의 컨트롤러에서 공지사항 정보들을 상세화면쪽으로 넘겨줘야 하는데, 어떤 방식으로 어떻게 넘겨주시는지도 제가 잘 모르구요..^^;

      델리게이트와 프로토콜의 개념에 대해 조금 더 알아보시거나, 싱글턴 기법에 대해서도 알아보시면 좋을 것 같아요.


오늘의 주제

1. NSDictionary, NSMutableDictionary
2. NSArray, NSMutableArray



열 한번째 시간입니다.^^

지난 번에는 상속이라는 또 하나의 중요한 개념에 대하여 알아보았습니다.
이번에는 Objective-C에서 가장 흔하고 많이 쓰이는 클래스 중에 자료를 보관할 수 있는 녀석들에 대해 알아보도록 하려고 합니다.

딕셔너리랑 배열인데요, 한 번 봅시다~
 
어휴~ 봄감기 때문에 아주 죽겠네요+_+

# NSArray

배열이란???
C를 배운 분들이라면 배열을 아실겁니다 ㅎ
하지만 여기서 말하는 녀석은 메소드까지 가지고 있는 클래스 입니다. 단순한 자료형이 아니죠~
뭐 약간의 사용개념을 보면 C의 Linked-List(연결 리스트)와 비슷하다고 생각하시면 되겠습니다~!

일단 아래 발로그린 배열을 보시죠..ㅋㅋㅋ

배열입니다.
C에서의 배열과는 달리 이녀석에는 어떠한 객체도 들어갈 수 있습니다.
C의 배열에서는 int형 배열이라면 저장되는 녀석들이 전부 int형이지만, Objective-C의 Array에는 객체 형태라면 무엇이든 들어갈 수 있습니다.

위의 그림의 배열에는 index 0번에 NSString의 객체가 들어가 있고 1번에 NSNumber의 객체가 들어가 있습니다. 그 뒤에 또 어떤 객체들이 들어올 수도 있습니다.

Objective-C에서 이렇게 index번호로 쭈욱 연결되 있는 녀석을 우리는 Array라고 칭합니다.

이와 같은 배열 클래스는 크게 두 가지로 볼 수 있는데요,

처음 생성시 배열을 만들어 주고 수정, 삭제가 불가능한 NSArray.

그리고 생성 후에 추가, 수정, 삭제가 자유로운 NSMutableArray가 있습니다.

NSMutableArray는 NSArray를 상속받아 사용하기 때문에 NSArray의 모든 메소드를 사용할 수 있으며 추가적으로 추가, 수정, 삭제 메소드가 있습니다.
자세한 설명은 저 아래에서 다시 할게요~

잠깐,,! 상속을 모르신다구요? 그럼 알고 넘어갑시다^^
2012/03/28 - [Objective-C] - Objective C <9>. 상속(1)
2012/04/10 - [Objective-C] - Objective C <10>. 상속(2) - 오버라이딩


# NSDictionary

딕셔너리란???

우리말로 하면 사전이라는 뜻이죠~

우리는 사전에서 무엇인가를 찾고자 할때, 해당하는 단어를 찾고, 그 단어를 찾아가서 그에 해당하는 내용을 가져오죠.

여기서의 딕셔너리도 마찬가지입니다.

여러 자료들을 하나의 딕셔너리에 넣어놓고 우리가 원하는 자료를 꺼내오고 싶을 때, 우리가 딕셔너리를 생성할 때 부여해준 key라는 녀석으로 검색을 하여 꺼내옵니다.

여기 아래의 허접한 그림을 함께 보시죠 ㅋㅋㅋ

위의 그림의 딕셔너리에는 세 개의 객체가 들어가 있습니다.

NSString의 객체는 name이라는 key값을 가지고 있고, NSNumber의 객체는 number라는 key값을 가지고 있습니다.
그리고 NSArray의 객체는 array라는 key값을 가지고 있네요.

이처럼 딕셔너리에는 다양한 종류의 객체가 들어가 있을 수 있으며, 각각의 객체는 고유한 key값을 가지고 있습니다.
그렇기 때문에 우리가 사전에서 어떤 단어를 찾아서 그 의미를 해석해 낼 수 있듯이, 컴퓨터는 딕셔너리 안에서 키값으로 원하는 자료를 찾아올 수 있는 것입니다.

즉, Array는 index 값으로 자료를 꺼내올 수 있지만, 딕셔너리는 index값이 없는 대신 key 값으로 자료를 꺼내올 수 있습니다.

딕셔너리도 배열과 마찬가지로 NSDictionary와 NSMutableDictionary로 나뉠 수 있습니다.

두 개의 차이점은 위에서 말씀드렸으니 아시겠죠?ㅎ

이렇게 자료들을 편하게 보관할 수 있는 두 클래스를 알아보았습니다.



그렇다면 이제 예제를 통해 익혀보도록 해요~

# 실습해보기 

새로운 프로젝트를 만들어 봅시다~
요로코롬 만들어 줍니다~


그리고 코드를 예쁘게 넣어줍니다~_~


자, 자세한 설명은 주석을 통해 달아놓았으니 참고하시기 바랍니다.

위에서 디버깅 로그를 보게되면 배열에 두 개의 객체가 들어가 있는 것을 볼 수 있고, 딕셔너리에 배열, 이름, 숫자 이렇게 세 개의 객체가 들어가 있는 것을 볼 수 있습니다.

그런데 배열에서는 우리가 넣어 준 순서대로 들어가서 로그에 찍히는데, 딕셔너리의 로그에는 우리가 집어 넣어준 순서대로 찍히질 않네요+_+

네, 그렇습니다. 딕셔너리는 기본적으로 우리가 넣어 준 순서대로 자료가 정리되어 있는 것을 보장하지 않습니다.
딕셔너리라는 주머니에 객체들이 막 널부러져 있는거죠~^^* 이 또한 배열과 딕셔너리의 차이점이 되겠습니다. ㅎ

자, 위에서 Mutable이 아닌 기본 클래스를 사용해 보았으니 이제 Mutable도 사용해 보아야 겠죠?
코드를 이쁘게 추가해 줍시다.

역시나 자세한 설명은 주석으로 들어가 있습니다~
우리가 처음에 생성해 주었던 배열과 딕셔너리에서 Mutable 녀석들로 객체의 내용을 복사해 온 후에 원하는 내용을 삭제 해 보았습니다.
물론 추가, 수정도 가능합니다~ 그것은 개발문서를 보고 여러분께서 직접 해보기실 권고드립니다^^

디버깅 로그를 살펴보면 우리가 삭제한 내용들이 나오지 않는 것을 확인할 수 있습니다.
이처럼 Mutable을 들어간다면 수정 가능한 녀석들이라고 보시면 되겠습니다.


자, 그런데 제가 위에서 설명드린 것만으로 이렇게 유용하고 좋고 깔쌈하고 이쁜 클래스들을 전부 알 수가 없습니다.
제가 일일히 다 설명을 할 수가 없으니까요^~^

그래서 우리에게는 개발문서가 존재합니다!!!ㅎㅎㅎ
자, 코드에서 alt 키를 누른 상태로 NSDictionary 위에 살포기 커서를 가져가면 밑줄이 생기죠? 클릭해 봅니다~
요렇게 아래 그림처럼 나올꺼예요~ 그렇다면 좀 더 자세히 알아보기 위해 Reference를 눌러봅시다~


이렇게 NSDictionary Class Reference가 나옵니다~
이 개발문서에서는 이 클래스에 관한 거의 모든 내용이 실려있습니다.
살펴보기 부터 시작해서, 가지고 있는 메소드와 변수 등등 모든 것이 나와있는 것이죠.

이렇게 메소드들도 쭈욱 써져 있고 (링크로 되어있기 때문에 누르면 메소드에 관한 자세한 설명을 볼 수 있습니다) 
많은 내용들이 담겨져 있어요. 제가 이걸 다 블로그에 설명 할 수는 없겠죠?ㅎ


딕셔너리만 보면 서운하니까 배열 클래스도 놀러와 봅니다.


이렇게 메소드의 역할별로 카테고리가 나누어져 메소드가 정리되어 있어 쉽게 원하는 메소드를 찾아 볼 수 있습니다~_~

NSMutableDictionary 클래스 레퍼런스를 봅니다.
아래쪽에 Subclassing Note 라고 나와있는 부분이 있는데, 거기 위쪽에 보면  inherits from NSDictionary 라고 써져 있는 것 보이세요?
즉, '이 클래스는 NSDictionary를 상속받았다' 라는 뜻이죠?
그러므로 이녀석은 NSDictionary의 메소드와 변수들을 사용할 수 있다는 뜻이겠죠~ 거기에 추가적으로 수정 기능이 덧붙여 진 녀석이죠^^*


그래서 이녀석의 메소드들을 보면 몇 개 없습니다. 왜냐면 나머지 사용 가능한 메소드들은 NSDictionary에서 찾아볼 수 있거든요^^

이처럼 개발문서를 보면 우리가 알고 싶었던 것 이상으로 자세한 내용들을 찾아볼 수 있습니다~

이 글을 읽었다고 끝나는 것이 아니라 개발문서에서 이런저런 메소드 들을 보고 직접 실습해 보시기 바랍니다~

오늘은 그럼 여기 까~~~~~~~지!

감기때매 헤롱헤롱 @_@

by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. Favicon of https://bikiniline.tistory.com BlogIcon 비키니라인 2012.04.24 13:20 신고  댓글주소  수정/삭제  댓글쓰기

    으음. 그러니깐 딕셔너리는
    c++에서 구조체 같은 거군요 ~! ... 아닌가 ㅠ

    근데 궁금한게 NSArray 를 사용할때요
    2차 배열은 어떻게 만드는지 궁금하네요
    으음... 어차피 배열에는 객체가 들어가는 거니깐..
    2개의 원소를 갖는 배열 객체를 만들고 그 객체를 원소로 갖는 배열을 만들면 그게 2차 배열이려나 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.24 18:04 신고  댓글주소  수정/삭제

      구조체와 생김새는 비슷하지만, 객체라는 큰 차이점이 있고, 내부에도 객체만 들어갈 수 있다는 점이 다르죠..^^
      Objextive-C 에서도 C의 거의 모든 기능을 사용할 수 있습니다. ㅎ 그러므로 C에도 있는 녀석을 굳이 새로 만들 필요는 없겠죠 ㅎ

      NSArray는 기본적으로 다차원 배열을 지원하지 않습니다만, Array의 각 인덱스에 Array를 넣어준다면 그게 다차원 배열이 되겠지요..ㅎㅎ

      항상 들러주시고 관심 가져 주셔서 고맙습니다^^

  2. Favicon of https://bikiniline.tistory.com BlogIcon 비키니라인 2012.04.25 15:23 신고  댓글주소  수정/삭제  댓글쓰기

    c++의 경우에,
    1. A라는 구초체를 만든다 struct A{ 어쩌고 저쩌고 ...};
    2. A형 배열을 선언한다. A array[10];
    이렇게 해두면 사용할때 array[4].어쩌고 = xxx ; 뭐 이런식으로 접근하기도 편하고 값을 바꾸기도 편한데..

    objective c 의 딕셔너리는 좀 복잡하네요...
    NSMutableDictionary형 배열을 만들고 초기화? 해주고... 포함된 객체에 접근하는거 까지는 별 차이 없는데
    내용을 바꿔주는게 복잡하네요 ...

    1. objectForKey메소드를 이용해 오브젝트를 불러온다
    NSNumber *temp2= [numberDic[[string integerValue]-1] objectForKey:@"appearanceCount"];
    2. 형변환을 해준다.
    int a = [temp2 intValue];
    3. 하고싶은 작업?을 한다.
    a++;
    4. 다시 객체화 시킨다.
    NSNumber *b = [[NSNumber alloc]initWithInt:a];
    5. 넣는다 -ㅅ-;;
    [numberDic[[string integerValue]-1] setObject:b forKey:@"appearanceCount"];

    C++의 경우 한줄이면 끝나는걸 무려 5줄씩이나 써야 하네요 ㅠ ㅠ

    질문 1. 이렇게 하는거 맞나요 ..? ㄷㄷㄷ 한두줄에 깔끔하게 끝나는 메소드가 따로 있는지 모르겠네요 ... ㅠ ㅠ

    질문 2. 선언부에서 NSMutableDictionary *numberDic[45];
    이런식으로 배열을 잡았습니다..
    에러도 안나고 워닝도 없고.... 제가 원하는 작업을 잘 수행하는데 이런식으로 써도 무방한가요 .. ?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.25 16:13 신고  댓글주소  수정/삭제

      1. 네, 맞습니다...^^ 숫자를 객체화 시켜 사용을 할 때 불편함이 있지요..^^ 그래서 때에 따라 구조체를 사용하는 방법도 좋은 방법이라고 생각합니다! 각 언어마다의 특징이라고 이해하면 편할듯 하기도 하네요..ㅎㅎ 어떤 언어에서는 이런점이 편하고 이런점이 불편하고 그런것이 있으니까요 ㅎ
      위에서 말씀하신 점은 딕셔너리 보다는 NSNumber의 특성 때문이라고 보시면 될 듯합니다^^~

      2. 사용하신 방법은 딕셔너리 포인터를 C스타일의 배열로 선언하셔서 사용한 것입니다.
      물론 그렇게 사용하셔도 전혀 지장은 없습니다. 포인터 하나하나마다 딕셔너리를 할당하고 초기화 하셔서 사용하시면 됩니다. NSMutableArray를 사용해도 좋지만, 아마 사용하신 방법이 속도는 조금 더 빠를거예요~^^*
      NSMutableArray를 사용하시면 객체 추가 삭제가 훨씬 더 쉽기 때문에 추가 삭제가 필요하다고 하면 이 방법이 더 좋다고 볼 수 있구요... 뭐 다양한 메소드를 이용해서 필요한 기능을 쓸 수 있기 때문에 적절히 판단하셔서 사용하시면 되겠습니다~

      충분히 적절한 답변이 되었는지는 모르겠습니다만, 짧은 지식으로 말씀드렸습니다^^;

      더 부족한 점 있으면 말씀해 주세요~!

      비가 많이 오네요. 동동주에 파전이 땡기는 날입니다 ㅎㅎ

    • Favicon of http://soooprmx.com/wp BlogIcon sooop 2013.06.14 09:58  댓글주소  수정/삭제

      Objective-C에서는 리터럴로 좀 더 간단하게, 배열/사전/숫자(NSNumber) 객체를 초기화할 수 있습니다. 리터럴은 쉽게 말하자면 @"acb"와 같이 축약된 문법으로 NSString을 만드는 것처럼 많이 써왔던 거구요.

      NSArray *anArray = @[ @"a", @"b", @"c"]; // 끝에 nil을 넣지 않습니다.
      NSDictionary *aDict = @{ @"key" : @"value", @"key2" : @"value2" } ; // 키:값 의 순서로 씁니다.

      NSNumber *aNum = @(0.5); // [NSNumber NumberWithFloat:0.5f];와 동일

  3. 인절미후후 2012.06.08 11:03  댓글주소  수정/삭제  댓글쓰기

    이거 그동안 어렴풋이 알면서 쓰던건데 이렇게 정리해주시니 너무 감사합니다.
    제가 자바를 조금 공부했었는데 키와값으로 저장하는거니까 자바의 컬렉션 프레임워크로는 List랑 Map같네요
    뮤터블과 디폴트의 차이도 잘 알게 되었습니다.
    항상 보는쪽의 입장을 잘 배려해주시는 레퍼런스 참조하는 부분을 익숙해지도록 자주 보여주시는것도 너무 좋은 점 같네요.
    픽커뷰 보다가 넘어왔어요
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.08 13:26 신고  댓글주소  수정/삭제

      인절미후후님
      항상 격려의 말씀 남겨주셔서 제가 힘이 솟습니다.
      정말 고맙습니다^^*
      저도 항상 읽는 입장에서 어떻게 하면 쉽게 다가갈 수 있을까 고민을 합니다만... 쉽지는 않네요^^
      부족한 점은 지적해 주시고 필요한 부분은 꼭 말씀해 주세요. 부탁드립니다 ㅎ
      행복한 주말 보내시길...^^

  4. 중동백곰 2012.06.15 19:12  댓글주소  수정/삭제  댓글쓰기

    잘 보고 있습니다..
    저기 제목에서 NSArray, NSMutableDictionary <== 요거 NSMutableArray 가 아닐까 사료되옵니다..

  5. 네모누리 2012.07.17 11:07  댓글주소  수정/삭제  댓글쓰기

    정말 유용하게 보고 있습니다.
    더 이상 강의 안 올라오나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.17 23:58 신고  댓글주소  수정/삭제

      네모누리님~
      관심 정말 고맙습니다 :-)
      요즘 제가 진행중인 프로젝트로 인해서 포스팅을 못하고 있는데 월말쯤 되면 다시 재개할 수 있을 것 같네요 ㅠ_ㅠ
      원하는 부분 있으시면 말씀해 주세요. 틈틈히 준비하도록 하겠습니다~!

  6. 나에게넌 2012.08.13 15:19  댓글주소  수정/삭제  댓글쓰기

    NSNotification 강의 보다가 중간에..링크 타고 발도장 찍습니다..꾸욱

  7. 첼로와짜짜 2012.11.27 14:42  댓글주소  수정/삭제  댓글쓰기

    다 읽었다ㅎㅎㅎㅎ 정말 도움 많이되었습니다. 감사합니다. 또 업데이트되면 들릴께요. 건강하세요.

  8. 2012.12.09 01:55  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.09 12:15 신고  댓글주소  수정/삭제

      이건 C 코드이고, 무엇을 도와달라는 말씀이신지 잘 모르겠네요;;;
      오브젝티브C는 C코드드를 그대로 사용 가능합니다

  9. 무민 2013.01.18 12:13  댓글주소  수정/삭제  댓글쓰기

    설명을 간단명료하게 잘해주셨어요. NSArray, NSDictionary... 다른곳에서 강좌를 봤지만 잘 이해가 안갔었는데 이곳에서 이해하고 갑니다. 고맙습니다.

  10. Favicon of http://www.facebook.com/younhak.kim.9 BlogIcon 꺼북대장 2013.01.28 00:58  댓글주소  수정/삭제  댓글쓰기

    딕셔너리에대해 보다 자세히 배우고 갑니다.
    ~감사합니다.
    새로운 강좌가 기다려집니다 ㅎㅎ

  11. 2013.02.19 21:37  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  12. 여의도 2013.02.20 02:25  댓글주소  수정/삭제  댓글쓰기

    답변 주셔서 감사드립니다. 말씀하신 대로 해보도록 하겠습니다. 당장해보고 싶지만,, 헐,,, 벌써 2시가 넘었네요.... 편히 쉬시구요~~

  13. 2013.02.20 12:57  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.20 14:16 신고  댓글주소  수정/삭제

      T_T 죄송합니다...ㅠ

      제가 지금 병상이라 맥을 사용하기가 어렵습니다...

      몸이 정상이 아니라 코드를 보기가 좀 힘들어요 ㅠ 힘들게 올려주신건데 정말 죄송합니다...ㅠ

  14. 여의도 2013.02.20 14:49  댓글주소  수정/삭제  댓글쓰기

    몸도 안좋으신데 실례가 많았습니다. 쾌차하시길 기원해 드려요,,
    질문드린 내용은 나름 해결해보고 좋은 소식 전해드리겠습니다.
    그럼 또 뵙겠습니다. 꾸벅..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.20 15:19 신고  댓글주소  수정/삭제

      아닙니다..ㅠ
      오히려 제가 도움을 드리지 못해 죄송스러울 따름입니다 ㅠㅠ
      핵심 부분을 메일로 한 번 보내봐 주세요, 다시 한 번 보도록 할게요.
      yagomsoft@gmail.com

  15. 여의도 2013.02.20 17:32  댓글주소  수정/삭제  댓글쓰기

    염치불구하고 메일 보내드렸습니다. ^^

  16. 여의도 2013.02.20 21:54  댓글주소  수정/삭제  댓글쓰기

    명쾌하게 해결해 주셔서 감사드립니다!!
    다음에 또 부탁드릴것 같은데요? ....
    편히 쉬시구요!!

  17. 여의도 2013.02.21 16:43  댓글주소  수정/삭제  댓글쓰기

    메일에 이어서~~~~ ㅎㅎㅎ

    네,, 그렇군요,,,
    그럼, reloaddata를 사용하면 앱이 알아서 데이터를 계속 갱신해서
    화면에 뿌려주는 건가요? (그럼 좋겠네요,,, 당겨서 새로고침 이런거 구현안해도 되니... )
    아니면 앱이 실행되고 한번만 reloaddata가 되는 것인지요?
    ㅎㅎㅎ

    질문은 끝이 없네요...

    아, 생각난김에 당겨서 새로고침 커리큘럼은 어떠세요?
    굉장히 복잡한거 같더라구요..

    수고하시구요~~~~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.21 19:13 신고  댓글주소  수정/삭제

      :)
      reload를 호출할 때 마다 갱신합니다.
      자동갱신은 하지 않구요...^^;
      지금은 몸이 좋지 않아서 당분간은 추가 연재 계획이 없습니다 ...ㅠ
      한 두 번 도큐먼트 관련해서 포스팅이 진행될지도 모르겠지만... 그 이상은 아직 계획이 없습니다 ㅠㅠ 죄송해요..

  18. Favicon of http://blog.naver.com/yunzeman BlogIcon 사운드오션 2013.02.22 10:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 저희는 온라인_모바일 게임 음원 및 효과음 제작 업체입니다. 저희도 블로그를 운영하는데 yagom님의 심도있는 강좌를 저희 블로그에도 게시 할 수 있을까 해서 문의드립니다.
    아울러 저희가 게시하는 사운드 게시물도 yagom님께서 퍼오셔서 서로 어플 개발자분들께
    좀 더 다양한 정보와 도움을 주고자 합니다. yagom님과 저희가 서로 winwin 할 수 있는 전략적
    파트너가 될 수 있을것 같습니다. 혹 어떠신지 답변 부탁드립니다. ^^ RSS 열린 이웃으로 추가하였습니다.

  19. Favicon of http://sharphail.tistory.com BlogIcon 샤해 2013.03.19 11:32  댓글주소  수정/삭제  댓글쓰기

    덕분에 개념을 확실히 잡을수 있었네요 ㅎㅎ
    다른분들의 comment들도 도움이 되었습니다.
    감사한 마음과 함께 링크좀 담아갈게요 '-'



오늘의 주제

1. 오버라이딩(재정의)

열 번째 시간입니다.^^

상속의 개념에 대해서는 조금 잡히셨나요?
아직 잘 모르시겠다면 

2012/03/28 - [Objective-C] - Objective C <9>. 상속(1)

요기서 다시 한 번!


자 그럼 오늘은 상속에 대해서 조금만 더 알아봅시다 ㅎ
스따뚜~~~~~~~~~~~~


# 오버라이딩(재정의)?

오버라이딩 : 재정의

오버라이딩이 뭘까요?

지난번에 상속에 대해서 이야기 할 때, 자식은 부모에게 물려받은 것들을 필요에 의해 부분적으로 바꿔 쓸 수 있다고 했던 것 기억하시나요?

바로 그것을 말합니다.

메소드를 부모가 물려준 그대로 사용할 수도 있지만, 자신의 목적에 맞게 재정의해서 사용할 수 있습니다. 즉, 같은 이름의 메소드를 물려받은 녀석에서 덮어씌울 수 있단 말이죠~

너무 말이 어려운가요?

직접 해봅시다..ㅎ

지난번에 사용했던 자식클래스의 선언부로 와서 부모클래스와 동일한 이름의 메소드를 선언해 줍니다. 코멘트 설명 보세요 ㅎ

그리고 구현을 해줍니다~

자, 이제 메인으로 와서 메소드들을 호출해 봅니다~  역시나 설명은 코멘트로^^

요런 결과가 나옵니다~ 

아까 위에서 말씀드린 것 보고 예상하셨나요?ㅎ

자, 이렇게 상속에 대해서 간단히 알아보았습니다~

다음엔 뭘 해볼까나요 ㅎㅎ



by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom

댓글을 달아 주세요

  1. Favicon of http://mnworld.co.kr BlogIcon shakej 2012.05.07 09:24  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다 ^^
    문서는 앱스토어에서 "dash"라는 무료 앱으로 쉽게 찾을 수가 있더라구요 ㅎㅎ
    혹여나 참고하시면 좋을 것 같아 남겨봅니다~

  2. menet 2012.06.08 20:00  댓글주소  수정/삭제  댓글쓰기

    자바 처음 공부한사람한텐 저 코드 보기가 넘 힘드네요. -(void)메소드명 이게 뭔 코드인지,, 글씨체도 그렇고 첨보면 뭐지 모르겠네요

  3. 첼로와짜짜 2012.11.26 18:52  댓글주소  수정/삭제  댓글쓰기

    잘봤습니다 근데 그림 클릭되게 좀 해주세여 T^T

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.26 18:57 신고  댓글주소  수정/삭제

      제가 저 글을 쓸적에 티스토리에서 버그때매 클릭이 안되게 처리가 되었어요ㅠㅠ 몇 개 글이 그래요... 제가 수정하려 해봤는데 클릭되게 수정이 안되더라구요...ㅠ

  4. kangsu 2013.01.21 20:45  댓글주소  수정/삭제  댓글쓰기

    혹시 오프라인이나 온라인 강좌는 안하시나요??정말 잘보고있습니다.선생님으로 활동하시면 꼭 직접 배워보고 싶네요



오늘의 주제

1. 상속의 개념 


아홉번째 시간입니다.^^

Objective-C는 정말 오랜만이네요..^^

초코찌찌님의 요청으로 새로운 개념을 하나 가지고 왔습니다~

지난 번에는 메소드에 대해 알아보았습니다~
이번에는 클래스의 상속에 대해 알아보도록 합니다.^^

이 포스팅은 지난 

2012/01/30 - [Objective-C] - Objective C <5>. 클래스와 객체(인스턴스)<1>

2012/02/05 - [Objective-C] - Objective C <6>. 클래스와 객체(인스턴스)<2>

이 두개의 포스팅 지식을 필요로 합니다~

다 알고 계신가요?ㅎ

그렇다면 고고고고고고고고~~~~~~무비무비무비~~~~~~


# 상속이란?

상속이란 무엇일까요?

저는 쉽게 한마디로 말하면, 클래스의 확장 이라고 표현하고 싶네요.

즉, 이미 만들어져 있는 클래스에서 내가 원하는 부분을 추가하거나 변경하여 새로운 클래스를 생성할 수 있습니다.
 
하지만 여기에도 규칙이 있기 마련이죠..^^

상속에서는 부모클래스와 자식 클래스라는 개념을 가지고 말을 합니다.

자식 클래스는 부모 클래스를 상속 받는다고 표현합니다.

상속 받는다는 것은 원래 클래스에 추가나 변경을 한다고 말씀드렸죠?

그렇다면 부모클래스와 자식 클래스 중에 더 확장된 클래스는 무엇일까요?

네, 바로 자식 클래스이죠~

부모클래스 보다 자식 클래스가 더 덩치가 크다 이말입니다^^ (사실 그렇지 않을 수도 있습니다만, 개념상 편하게 이렇다고 합시다 ㅎ)

그림에서 보다시피 부모가 자식에게 자신의 대부분의 것을 물려줍니다.


자식은 물려받은 그것들에서 마음에 들지 않는 것이 있으면 바꾸기도 하고, 더 필요한 것이 있으면 추가하기도 합니다.

자 대충 감이 오시나요?

상속을 받게되면 부모 클래스의 헤더에 선언된 메소드와 변수가 자식에게 상속됩니다.
물론 모두 상속되는 건 아닙니다. 부모클래스에서 상속해주지 않겠다고 선언해 준 녀석이 있다면 그 녀석들은 상속되지 않습니다.

그럼 실질적으로 상속이 어떻게 되는지 한 번 볼까요?

아래 그림을 보면, 우리가 만들었던 클래스 입니다.
이 클래스를 만들때 대화상자에서 Sub class of... NSObject라고 했던 것 기억하시려나 모르겠습니다^^
지금 MyFirstClass.h 헤더파일을 보게되면 MyFirstClass는 NSObject를 상속받았음이 명시되어 있습니다.
그렇습니다. 모든 Objective-C의 class들은 기본적 NSObject를 상속받고 있습니다.
아래 그림처럼 직접적으로 받던지, 아니면 우리가 다음에 새로 만들어볼 MyFirstClass의 자식클래스처럼 다른 클래스를 거쳐 상속을 받던지간에 어찌되었든 상속을 받습니다.

자, 그럼 이 NSObject라는 녀석을 한 번 살표볼까요?

NSObject 에서 오른쪽 버튼 클릭을 하여 Jump to Definition로 향합니다^^

그러면 Foundation framework에 포함된 NSObject.h 파일에서 NSObject의 선언부를 볼 수 있습니다.

NSObject에 이런저런 많은 메소드들이 선언되어있네요^^

우리가 어떤 인스턴스를 만들어 줄 때, alloc , init 해줬던 것을 기억하시나요?ㅎ

고녀석들 요기있네요~~~~~~~~~ㅎㅎㅎ 말씀드렸듯이 모든 클래스들은 NSObject를 상속받기 때문에 어디서든지 alloc, init을 할 수 있는 것입니다.


# 상속 실습해보기

자, 대충 개념은 잡았겠다, 실습 한 번 들어가 봅시다 ㅎ

새로운 클래스를 만들기 위하여 New File... 합니다!


Cocoa의 Objective-C class를 선택해 주시고 Next~

자, 그 후에 여기서!! Subclass of MyFirstClass를 해 주는 겁니다!!

MyFirstClass를 상속 받겠다는 의미가 되겠습니다!!

그 후에 클래스명을 FirstChildClass로 합니다.

FirstChildClass.h로 이동해 봅니다.

MyFirstClass를 상속하고 있다고 명기되어 있습니다. 정말 딱 이거 하나 있는데 이 클래스에서 어떤일이 벌어졌을까요?ㅎㅎㅎ

심지어 구현부도 텅텅 비어있는 멍텅구리 같아 보입니다 ㅎㅎㅎ

자, 하지만 우리는 상속받고 있다는 것을 알기 때문에, 무작정 뭔가를 시도해 봅시다~

열시미 타이핑타이핑 ~_~ 자세한 소스 설명은 주석에 담겨있지요?ㅎ

짜잔~~~~~~~ 실행 결과입니다.

분명히 자식클래스는 속이 텅텅 비어있는 녀석 같아보였는데, 부모클래스에서 이미 만들어져 있는 메소드와 변수를 사용할 수 있었습니다.

캬~ 우리 모두 정말 부모님께 감사해야 합니다...ㅋㅋ


여하간 이것으로 상속에 대한 개념을 좀 알아봤습니다. 횡설수설이라 이해가 잘 되실지는 모르겠네요ㅠ_ㅠ

혹여나 이해가 되지 않는 부분 또는 잘못된 점이 있다면 댓글 부탁드립니다~^^

그럼 뿅!!!!!!!!!!!!!


by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom

댓글을 달아 주세요

  1. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.03.28 15:17 신고  댓글주소  수정/삭제  댓글쓰기

    쉽게 잘 설명하셨군요.
    아마 (2)에서는 overriding에 대해서 다루 실 것 같군요?

    나중에 기회가 되신다면
    @property 를 하게 될 때 사용되는 retain, strong, weak 등에 대해서 정리한번 해주시면 좋을 것 같습니다
    생각보다 이유도 모르고 사용하는 사람이 많더라고요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.28 17:24 신고  댓글주소  수정/삭제

      와우~ 역시 고수님은 눈치가 빠르십니다..ㅎㅎ
      들켜버렸네요+_+ㅋ
      흠...
      @property에 관한 설명은 아직 후일로 생각중이었는데, 고려해 보겠습니다.^^*
      사실 이번에 iOS 5.0에서 키워드들과 역할들이 변화되면서 조금 조심스럽습니다~ㅎ

  2. hyung 2012.11.19 13:18  댓글주소  수정/삭제  댓글쓰기

    와.. 야곰님 책하나 내심이 어떠신가요..
    솔직히 오늘 아침에 야곰님이 기초부터 다시 해보라고 하셔서
    어느세월에 그걸 하나.. 프로젝트 빨리 못하면 주임한테 혼나는데
    이러고 있다가
    그래도 속는셈치고 아침부터 계속 개념만 보다가

    딱 이 글 봤는데

    상속? 뭐지 그게.. 이러다가 뭔가 이거다!! 라는 삘이 와서 해보니
    제가 저번주부터 야곰님을 달달 볶던 그 문제가 해결 됬어요 ㅠㅠㅠ 너무 잘되요 ㅠㅠㅠㅠㅠㅠㅠ 아 행복해 ㅠㅠㅠ
    이래서 뭐든 기본이 없으면 안되는 거구나 싶더라구요
    히히힛 아무튼 너무너무 감사 드립니다.
    지금 완전행복함
    비행기타고 한국 돌아가서 식사라도 사드리고 싶은 심정임 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 15:39 신고  댓글주소  수정/삭제

      ^^~ 저는 거짓말 하지 않습니다...ㅎㅎ
      기초를 쌓는 것이 가장 빠른 지름길입니다!
      앞으로 iOS 뿐만 아니라 어떤 프로젝트를 하더라도 꼭 잊지 않으셨으면 좋겠네요 ㅎ 아무리 바쁘고 촉박해도 정도를 걷는 것보다 빠른 지름길은 없다는 것을 ^^

      p.s 밥은 지금보다 훨씬 저에게 고마움을 느끼게 되는 순간이 오면 그 때 사주러 와주세요...ㅎㅎㅎ 1년이고 10년이고 20년이고 진심으로 기다리겠습니다 :)

  3. hyung 2012.11.19 16:35  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다 블로그 돌아보니 저만 이렇게 감사를 느끼는게 아닌거 같네요
    전 아직 어려서 잘 모르겠지만, 일도 하시면서 이렇게 틈틈이 관리 하시기도 정말 너무 힘드실거 같아요
    저같은 배우는 입장의 사람은 감사할 따름 입니다

    그나저나 산넘어 산이라고 저녀석 해결 했더니 또 다른녀석이 말썽이네요 ㅋㅋ..
    정말.. 하나하나 기능이 붙으면 재밌지만 그걸 붙이기가 정말 힘드네요^^..;;
    아무튼 힘내서 꼭 완성시키겠습니닷!~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 17:05 신고  댓글주소  수정/삭제

      네,^^* 힘내시고 꼭 원하는 바를 이루시길 바랍니다!
      또 궁금한 것 있으면 언제든 말씀하세요 :)
      p.s. 제가 아마(아니... 확실히?) 동생일 것 같다는 생각이...ㅋㅋㅋ

  4. 첼로와짜짜 2012.11.26 18:48  댓글주소  수정/삭제  댓글쓰기

    잘봤습니다. 근데 상속부터 예제 클릭이 안되네요. 작아서 글씨가 잘 안보이네요 T^T

  5. formathead 2014.03.18 11:11  댓글주소  수정/삭제  댓글쓰기

    열심히 공부하고 있습니다. 너무 초보라 어디서 부터 시작해야 할지 막막했던차에 도움이 많이 되고 있습니다.

  6. 2017.08.24 16:56  댓글주소  수정/삭제  댓글쓰기

    죄송한데........
    이미지 크게 보기가 안되서.... 캡쳐부분을 하나도 모르겠어여...ㅠㅠㅠㅠㅠㅠㅠ


오늘의 주제

1. Delegate 
2. Data Source



열 여덟번째 시간입니다.^^

지난 번에는 맵뷰를 간단히 만들어 보았습니다~
정말 더 필요한거 없어요?
아무도 댓글도 반응도 추천도 없습니다...
저 블로그 접을까봐요...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이번에는 중요한 개념중에 하나인 Delegate와 Data Source에 대하여 알아보도록 하겠습니다~

중요한 개념이므로 이해 될 때 까지~!
스따뚜~~~~~~~~~~~~


# Delegate???

Delegate. 델리게이트.
우리말로 번역하면 대리자 정도로 해석할 수 있겠네요.

말 그대로 Delegate는 누군가가 해야 할일을 대신 해주는 녀석이라고 생각하시면 됩니다. 조력자가 되겠지요.

말로만 이렇게 설명하면 잘 감이 안오시죠?

간단히 그림으로 알아봅시다.

지난 번에 만들어 보았던 맵뷰입니다.ㅋ
맵뷰는 뷰 컨트롤러 위에 올라가 있는 상태였죠~


그런데 맵뷰가 동작하는 동안 뭔가 자신이 하기 벅찬 일들을 누군가 해줬으면 합니다.
그럴때 누군가에게 자신의 상태를 파악해서 적절한 일을 해주기를 원할때 델리게이트 선언을 해 줍니다.

바로 이렇게 말이죠~


그러면 델리게이트로 선언된 객체는 자신을 델리게이트로 임명한 객체가 어떤일을 도와달라고 하면 지정된 메소드를 통하여 알아서 척척척 스스로 어린이처럼 처리해 주는겁니다 ㅎㅎㅎ
사실 이렇게 말로만 설명하면 잘 감이 안와요~_~

# Data Source???

또한, 데이터 소스라는 것은 말그대로 데이터의 근원, 원천 뭐 이런뜻인데요~
어떤 객체가 누군가의 데이터 소스로 선언이 되면 선언한 객체가 데이터를 필요로 할 때 지정된 메소드를 통하여 데이터를 넘겨주는 역할을 합니다.

바로 이렇게 되는 시츄에이션 입니다.


이렇게 개념설명만으로는 잘 모르시겠다구요?ㅎ

그럼 다음번에는 간단한 실습을 통해서 알아보도록 할게요~

I'll be back!

커밍 쑨~!

by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. chan 2012.03.30 10:50  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다~~

    다음예제 빨리 볼수 있으면 좋겠네요~~ㅎㅎ

  2. 궁금 2012.03.30 16:25  댓글주소  수정/삭제  댓글쓰기

    UIviewcontrooler 클래스를 만들고 , 그 클래스의 .h 파일에 아웃렛을 정의하면(예를들어서 texte) .xib에서 First owner로 연결하면
    예전에는 texte 로 보였던거 같은데 이제는 delegate로 보여요, 이거 왜 이러는지 아시나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.31 01:17 신고  댓글주소  수정/삭제

      흐음..
      UIViewController를 상속받은 클래스에 IBOutlet으로 texte를 변수로 선언해 준 후에 xib파일에서 연결할 때를 말씀하시는 건가요?
      File's Owner로 부터 출발하여 연결대상(texte)로 연결할 때 그렇게 나온다는 것은 조금 이해하기 어렵네요^^;
      혹시 반대로 끌어 오신것은 아닌지요..?
      좀 더 자세한 설명이 필요하네요^^;

  3. 인절미후후 2012.04.05 15:15  댓글주소  수정/삭제  댓글쓰기

    강좌 항상 잘 읽고 있습니다.
    여러번 더 봐야겠어요.
    아이폰 강좌는 xcode업데이트 때마다 달라지는 인터페이스 덕분에 이전 버전의 강좌로는
    초심자들에게 벽에 막히는게 많습니다.
    최신 자료를 가지고 강좌해주는 점만으로도 큰 감사함을 느끼는 바입니다. ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.05 16:27 신고  댓글주소  수정/삭제

      아이쿠..^^
      다른 분들도 그때는 최신이셨을 텐데..ㅎㅎ
      강좌라고 하기도 부끄러운 수준입니다^^;
      더욱 분발해 보도록 하겠습니다~!
      댓글 감사드립니다~!
      필요한 것 있으시면 말씀해 주세요~

  4. Potomac 2012.04.13 04:49  댓글주소  수정/삭제  댓글쓰기

    그냥 눈팅만 하고 있었는데 필요한걸 말하라는 바람에 용기를 내어 적어요.

    버튼에 아이폰에 저장된 사진이나 그림을 불러와서 그 사진이나 그림으로 버튼을 계속 사용하고 싶은데요.
    사진을 이동시켜서 버튼에 적당한 부분이 표시되면 더 좋겠구요.
    물론 버튼의 위치와 크기는 그대로 유지하고 싶어요.

    궁금한건 많지만 다음에 또 물어보려구요.

    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.13 09:25 신고  댓글주소  수정/삭제

      ^^ 덧글 주셔서 고맙습니다.
      일단 이미지를 버튼이나 뷰로 불러오는 것에 대해서 조만간 포스팅 할게요~
      그런데 버튼 안에서 이미지를 원하는대로 움직이는 것은 조금 어려운 튜토리얼이 될 것 같네요..^^
      여기 블로그의 초급 수준을 조금 벗어나는 것이라, 일단 버튼에 사진을 불러오는 방법에 대해서는 먼저 포스팅 해 보도록 하겠습니다. 만약에 추후에 필요하시다면 요청하시면 예제 알려드리도록 할게요^^

  5. Potomac 2012.04.14 03:06  댓글주소  수정/삭제  댓글쓰기

    이렇게 바로 답장을 받는건 처음인것 같아요.
    개발자가 자기 사진을 넣는것 말고 아이폰 사용자가 자기 사진이나 그림을 넣는게 궁금해요.
    고마워요!

  6. Plateblack 2012.05.14 14:52  댓글주소  수정/삭제  댓글쓰기

    야곰님 강좌를 보며 Xcode로 프로그래밍을 하는데 푹 빠져있는 1인입니다^-^
    궁금한건 정말 많지만 하나만 꼽으라면... 음~
    아이폰과 데이터베이스를 연동해서 게시판을 만들어보는게 정말 궁금해요!
    웹서버 관련 지식이 너무 부족해서 어디서부터 손을 대야할지 막막하기만 하네요ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.14 15:39 신고  댓글주소  수정/삭제

      ㅎㅎ.. 그정도는 지금까지 배운거로는 아직 어림없어요...ㅎ
      그래서 차근차근 해보려고 합니다~
      조금은 시간이 걸릴 것 같아요~
      물론 많은 분들이 그 부분 정말 하고 싶어 하시는 것 알고 저도 처음에 많이 하고 싶었으니까요~
      하지만... 걷기도 전에 뛸 수는 없잖아요 ㅎ
      차근차근 같이 가보도록해요~

  7. NewBie 2012.05.23 15:12  댓글주소  수정/삭제  댓글쓰기


    이 내용은 이제 슬슬 서버와 연동이 되는 부분을 가르쳐주시려고 하시는건가요? +_+ 기대가 되네요 ㅎㅎ

  8. SODA 2012.06.29 10:28  댓글주소  수정/삭제  댓글쓰기

    열혈독자입니다. 덕분에 좋은 정보 알찬 정보 많이 습득하고 있습니다.

    감사합니다.^___________^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.29 11:19 신고  댓글주소  수정/삭제

      안녕하세요 SODA님~!
      오랜만에 덧글로 뵙네요 :-)
      자주자주 들러주시고 불같은 덧글 부탁드립니다 ㅎㅎ
      좋은 주말 보내시길...:-)

  9. 딴또 2013.03.11 14:53  댓글주소  수정/삭제  댓글쓰기

    정말 열심히 강의 보고 있습니다. 힘내십시오. 열심히 응원합니다.

  10. 나리 2013.05.02 09:43  댓글주소  수정/삭제  댓글쓰기

    쉽게 강의해주셔서 감사합니다^^
    많은 도움 되고 있어요!

  11. Favicon of https://pgspace.tistory.com BlogIcon 찌열남 2013.12.19 13:10 신고  댓글주소  수정/삭제  댓글쓰기

    처음으로 댓글 남깁니다.
    손가락물론 눌렀습니다 ㅎㅎㅎ
    잘보고 갑니다~

  12. 최현진 2016.05.13 09:49  댓글주소  수정/삭제  댓글쓰기

    항상 잘 보고 있습니다 ^^

  13. 진아 2016.05.25 01:08  댓글주소  수정/삭제  댓글쓰기

    늘 눈으로만 보고 갔었는데 오늘은 댓글을 남겨봅니다. 친절하고 자세한 설명이 큰 도움이 된답니다!!
    야곰 블로그 화이팅 입니당!!


오늘의 주제

1. 메소드 선언하고 구현하기 
2. 메소드 인자 전달하기 

3. 반환값(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자료형을 갖는 firstInteger와 secondInteger라는 이름을 가진 두 개의 인자가 전달되어 들어오네요. 이 역시 자세한 설명은 요 아래.

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

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

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

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

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

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

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

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


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

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



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


짠~ 결과화면 입니다.


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

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

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

또 뭘 하면 좋을까요?ㅎㅎ



by yagom

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

RSS Feed 받기   

↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 초코찌찌 2012.03.25 16:37  댓글주소  수정/삭제  댓글쓰기

    다음 강좌는 없나요 ? ㅠㅠ

    상속과 관련된 부분이라던지..오버로딩이라던지... 예외처리라던지 ..

    다른 사이트는 봐도 뭔말인지 모르겠던데 여기 블로그는 쉽게 설명해줘서 머리에 쏙쏙 들어오네요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.26 09:26 신고  댓글주소  수정/삭제

      Objective-C에 대한 내용을 요즘 못하고 있었네요~ㅠ_ㅠ

      필요하신 부분 최대한 빨리 준비하도록 하겠습니다~!

      좋은 댓글 정말 감사드립니다!

      먼저 필요하신 부분이 있다면 상세히 말씀해 주세요~

      부족한 부분이 있다면 말씀도 해 주시구요..ㅎㅎ

      괜찮다 싶으시면 다른곳이나 다른사람들에게 소개도 해주세요ㅋㅋㅋㅋㅋ

      그리고 강좌라고 말씀해 주시니 부끄럽습니다..^^;

      저는 제 포스팅을 감히 강좌라고 생각해 본적이 없어요..ㅋ

      그냥 지식을 공유하며 같이 공부 할 뿐이죠^^

      도움이 되신다면 그것만으로 행복합니다~

      감사합니다^^

  2. GuruKuru 2012.04.16 12:32  댓글주소  수정/삭제  댓글쓰기

    잘보고있습니다! ^^

  3. 네모누리 2012.07.17 10:52  댓글주소  수정/삭제  댓글쓰기

    유용한 강의 감사합니다
    많은 도움이 되고 있어요

  4. poku 2012.08.23 15:34  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다.. 똥이 조금 거슬렸지만..ㅎㅎ;

    근데 리턴값이 2개 이상인 경우는 어떻게 선어해야 하나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.23 16:44 신고  댓글주소  수정/삭제

      안녕하세요 poku님~!
      찾아주셔서 고맙습니다 ㅎ

      리턴값은 1개 밖에 돌려줄 수 없습니다.

      그래서 NSDictionary등의 객체를 사용하여 여러 정보들을 묶어서 반환해 줄 수 있죠.
      아니면 C스타일로 포인터를 사용하여 인자를 넘겨서 값을 변경해 줄 수 있습니다.

      설명이 너무 어렵죠...ㅎㅎㅎ
      계속 보다가 NSDictionary쪽 포스팅을 보면 좀 더 감이 오실지도 모르겠네요^^;

  5. chosamong 2012.08.25 17:01  댓글주소  수정/삭제  댓글쓰기

    보면 볼수록 갈길이 멀구나 하는 생각이 드니.... OTL

    따라가다 보면 좀 감 잡힐 날이 오겠죠 ??

    감사 인사 꾸벅<(__)>

  6. hyung 2012.11.19 13:03  댓글주소  수정/삭제  댓글쓰기

    우호우호.. 이런식으로 쓰는 거였군요 ㅠㅠ

  7. 첼로와짜짜 2012.11.26 18:25  댓글주소  수정/삭제  댓글쓰기

    아니 어떻게 비싼 돈 주고 산 책보다 이게 더 잘 이해가되죠? 왜죠?

    진짜 책 던져 버리고 싶네요. 두권 다 번역본 샀는데 주식도 모르는 사람한테 주식으로 코드짜는거 알려주질 않나.

    너무 설명도 부족하고 완전 이해불가했었는데 단 몇페이지 정도로 이렇게 이해가 잘되게 써주시다니

    곰님 책 내시면 진짜 많은 초보들이 도움이 많이될거같네요. 정말 감사합니다. 업데이트좀 해주세요 T^T

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.26 18:37 신고  댓글주소  수정/삭제

      이해가 쉬운만큼 빠진부분과 부족한 부분도 많다는 뜻이겠죠?ㅎ
      여기에 없는 많은 내용들은 기초가 되고 난 후 찬찬히 알아가시면 좋을 것 같습니다.
      아무리 안좋은 책이라 하더라도 다른 책에서 볼 수 없는 내용들이 있는 법이니까요^^*

  8. yaHanGom 2013.01.26 19:54  댓글주소  수정/삭제  댓글쓰기

    안녕하세요-^^
    작년에 이맘때쯤 아이폰 공부하다 설명이 너무 어렵고 문법도 너무 와닿지 않아서
    책 덮었다가 다시 시작해 볼까 하고 시작하게 되어
    이 곳에 머무르게 되었습니다.^^

    참 설명이 좋네요-
    변수명과 메소드명, 인자값명 등등이 더 쉽게 되어있다면
    더 좋지 않았을까 하는 생각도 듭니다.
    물론 이해를 돕기위해 쉽게 해놓은 것이다. 이런식으로 하는 것을 권장합니다..
    라고 정리하여 마지막에 보여주어야겠죠 ㅎㅎ

    ㅎㅎ 제 괜함 바램을 주저리 써버렸네요.

    어쨌든 너무너무 감사하게 잘 보고 있습니다. 볼 때마다 view on 도 꾹꾹 누르고 있구요^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.26 20:50 신고  댓글주소  수정/삭제

      안녕하세요 :)

      이렇게 찾아주시고 좋은 덧글도 남겨주셔서 정말 고맙습니다 ^^*

      좋은 의견 주셔서 정말 고맙습니다 ㅎ

      자주자주 찾아주세요~ㅎ

      p.s. 저는 야한곰은 아닙니다...ㅎㅎ 왠지 괜시리 찔리(?)네요 ㅋㅋㅋ

      많이들 오해하시는 부분이라...+_+ㅎ

  9. 파워팰리스 2013.03.06 15:52  댓글주소  수정/삭제  댓글쓰기

    야곰님 강의는 정말 맛깔스럽고 맛좋아서,,, 머리 눈에 확확들어오네요,,
    매번 감사합니다.
    좋은 하루 되세요 ^^

  10. thanks 2014.03.14 16:18  댓글주소  수정/삭제  댓글쓰기

    잘 보고 배우고 있습니다. 감사합니다.



오늘의 주제

1. 명명법

일곱번째 시간입니다.^^

두 번에 걸쳐 클래스와 객체에 대하여 알아보았습니다.
이해가 잘 가시는지요?
정말 중요한 것이니 꼭 이해하고 넘어가셔야 합니다~!

이제 클래스랑 객체가 뭔지 알게 되었으니 그녀석들의 이름은 어떻게 지어야 하는지 알아보는 시간을 가져보도록 할게요^^
출바알~~~~~~~~~


# 이름짓기

오늘은 클래스, 인스턴스, 메소드 등의 이름을 어떻게 지어야 할까에 대한 이야기를 해볼까 합니다.

이름짓기... 참 어렵죠 ㅎㅎ

오죽하면 프로그래머가 이름짓기의 도사라는 말이 나올까요-ㅋㅋㅋ

사람 이름은 돈까지 내면서 짓곤 하는데... 이녀석들도 우리의 혼을 불어넣어 만드는 녀석들이니 그만큼 깔쌈하게 이름을 지어줘야 하지 않겠습니까?ㅋㅋ

농담이구요~

이름을 짓는 방법에 대해 따로 이야기 하는것은, 여기에도 규칙이 존재하기 때문입니다.

규칙이 중요한 이유는~

다른사람들의 코드를 해석해 낼 때, 그 사람이 규칙에 맞게 코딩을 했고, 내가 규칙을 알고있다면 금방 이해할 수 있습니다.

또한, 다른사람들과 협업할 때, 내가 규칙에 맞게 코딩을 한다면 협업을 하기 쉽죠.

게다가 규칙에 따라 코딩을 하면 나중에 코드가 길~어지고 복잡해 졌을때, 이녀석이 클래스인지, 변수인지, 메소드인지 등등 분간하기 쉬워지겠죠?

개발문서를 볼때, 또는 샘플코드를 볼때 모두 마찬가지 입니다~

뭐 여튼... 이러저러한 이유로 왠만하면 규칙에 맞게 쓰는 것이 좋습니다^^

자, 그럼 규칙을 간단히 설명해 드릴게요.

아주 기본적인 것들만 알려드리구요...

자신의 필요에 의해서 자신만의 규칙을 사용하는 경우도 있습니다.

좀 더 자세한 내용이 필요하시다면 책을 참고하시면 더더욱 좋습니다^^

일단! 기본적으로 Objective-C에서는 이름 중간에 언더바( _ ) 를 거의 사용하지 않습니다.

단어와 단어 구분을 소문자 대문자로 하지요.

만약 이름을 '내 이름' 이라고 짓고 싶다면 myName 이런 식으로 명명한다는 뜻이죠.

또 이녀석이 String이라는 것을 강조하고 싶다면 myNameString 이런식으로 명명하기도 합니다.

또한, 이름을 지을때에는 나중에 보더라도 이녀석이 뭐하는 녀석인지 알기 쉽도록 직관적으로 만들어 주는 것이 좋습니다.

NSArray *a;

NSArray *nameArray;

어떤가요? 아주 단적인 예지만, 이렇게 차이를 낼 수 있습니다.

이게 아주 기본적인 규칙이구요~

일단 캡쳐화면을 보면서 아래 설명과 비교하면서 보세요^^



$ 클래스

클래스의 이름은 기본적으로 대문자로 시작합니다.

위에서 클래스 이름은 무엇일까요?

MyFirstClass 였죠?ㅎ

이렇게 클래스 이름은 대문자로 시작을 하고, 단어가 연결되는 부분에서 새로 대문자를 써줍니다.

$ 인스턴스 변수 등 변수

변수명은 기본적으로 소문자로 시작합니다. 물론 전역변수 지역변수 등에 따라 차이를 두기도 하지만, 일단 변수는 소문자로 시작한다고 생각하시면 됩니다.

위에서 보시다 시피 myName, mySecret 등등 변수명은 소문자로 시작하게 됩니다.

$ 메소드

메소드 이름도 변수명과 같이 소문자로 시작합니다.

myFirstMethod, itIsClassMethod와 같이 메소드들은 소문자로 시작하는것을 기본으로 합니다.


이정도 입니다...

정말 내용은 별거 없는데 잔소리만 엄청나죠?ㅎㅎ

그만큼 무엇이든간에 기본이 중요합니다.

저런 사소한 습관과 기본지식의 차이로 나중에는 엄청난 차이를 불러일으킨다는 사실을 잊지 마세요^^

그럼 오늘 포스팅은 여기 까~~~~~~아지~~~~~

다음에 뵙도록 해요^^
 

by yagom

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 
Posted by yagom

댓글을 달아 주세요

  1. chosamong 2012.08.25 14:59  댓글주소  수정/삭제  댓글쓰기

    근본이 되는 부분을 소홀히 하면
    모래 위에 지은 집(?)

    완성도 높은 소스는 이름에 혼이 들어 있겠군요. ^^;

    강의 감사 꾸우벅 <(__)>

  2. hyung 2012.11.19 12:47  댓글주소  수정/삭제  댓글쓰기

    아하.. 그냥 아무 생각없이 언더바 쓰고, 대문자 소문자 마음대로 했었는데 어느정도 룰이 있었던 거군요!

  3. 첼로와짜짜 2012.11.26 16:44  댓글주소  수정/삭제  댓글쓰기

    어느정도 아는거네? 이 생각으로 읽었는디 굉장히 이팩트있네요. 이제 입문했는데 꼭 유의하겠습니다. 잘 읽었습니다.
    다 읽고있는중임돠ㅋㅋㅋ


오늘의 주제

1. 뷰 위에 뷰 얹어보기 


열 다섯번째 시간입니다.^^

지난 번까지는 네비게이션 컨트롤러에 대해 알아보고, 주석다는 방법에 대해 좀 알아보았습니다.
요즘들어 너무 바빠서 몸이 다섯개라도 모자랄지경입니다 ㅠㅠ 포스팅도 너무 뜸한거 같아 슬프네요 ㅠㅠㅠ

자 그럼 오늘은 화면을 바꿔보는 방법 중에 하나인 뷰 얹고 없애기를 한 번 해보도록 할게요~
스따뚜~~~~~~~~~~~~


# 새로운 프로젝트 생성

지난 번 까지는 iOS5에는 최적화되지 않은 코드였습니다. 물론 최적화되지 않은 코드들에 대한 설명은 거의 하지 않았으니 헷갈릴까 걱정하실 필요는 없습니다용 ㅎㅎ

일단 새로운 프로젝트를 생성합니다~

Tabbed Application 을 선택합니다~

이 프로젝트로 꽤 오랜시간 포스팅 진행하게 될 듯 합니다 ㅎㅎ


저는 프로덕트 이름을 ChangeViews 라고 해줬습니다!

그리고 여기서 지난번이랑 다른점은 Use Automatic Reference Counting에 체크하는 거예요~ 



짜잔~ 프로젝트가 만들어 졌습니다요 ㅎㅎ


한 번 실행시켜 볼까요?ㅎ

지난 번과 똑같이 두 개의 탭을 가진 탭 기반 어플리케이션이 자동으로 생성되어 있네요 ㅎ



화면 좌측에 네비게이션영역의 ChangViews그룹에서 우클릭 또는 Ctrl+클릭을 하여 New File...을 선택하여 줍니다.



그 후에 ThirdViewController라는 이름의 뷰컨트롤러 하나를 만들어 줍시다.
 


자, 그 후에 FirstViewController.xib 파일로 이동합니다. 그리고 우측 아래쪽에 Objects 중에 View를 살짝 끌어서 First View 위가 아니고 격자모양처럼 표시되어있는 FirstView '바깥'영역으로 끌어옵니다.



그러면 네모칸 안에처럼 view와 view가 서로 포함되지 않게 나오게 됩니다~ 즉, 원래있던 View안에 새로 넣은 View가 포함되지 않게 해야 합니다 ㅎ
그리고 오른쪽 메뉴중에 자 모양으로 생긴 메뉴로 가면 뷰의 크기를 조절할 수 있어요~ 280 * 100으로 만들어줘 봅시다~


속성탭으로 가서 배경색은 검은색으로 바꿔주구요~



Objects에서 Round Rect Button 하나를 쭈욱 끌어옵니다. Title은 Remove로 바꿔보았습니다~ 이 버튼을 누르면 이 뷰가 뿅하고 사라질 때 쓰일거예요 ㅎㅎ


그리고 원래 있던 FirstView쪽에 Add라는 Title을 가진 Round Rect Button 하나를 만듭니다~ 이 버튼은 새로운 뷰를 위에 얹을 때 쓸거구요 ㅎ


이왕 이렇게 된거 숨기기 보이기 버튼도 하나씩 만들어 봅시다~


이제 메소드를 만들어 주어야겠죠?ㅎ
FirstViewController.h 헤더로 옵니다.
아래와 같이 코드를 넣어봅시다~

@property 줄은 새로 만들어진 View랑 연결해 줄 녀석이구요~

그 아래 메소드 네개는 버튼들과 연결해줄 녀석들입니다.


이제 구현파일 FirstViewController.m으로 와서 

@property했으니, @synthesize로 받아주어야겠죠?ㅎ

그 아래 메소드 네개를 구현해 줍니다.

여기서 잠깐! #pragma mark - View Control Methods 라고 써놓은 부분!

이건 말 그대로 마크 해놓는 건데요~

요기 표시해 놓은 부분부터 다음 표시 부분까지는 View Control Method 라고 개발자가 표시해 놓는 겁니다.

요렇게 만들어 놓으면 나중에 코드가 아무리 길어져도 관련 메소드들을 쉽게 찾아 볼 수 있어요^^

어떻게 찾냐구요?

화면 중간 위쪽을 보시면 지금 빨간 네모 만든 부분을 클릭해 보세요~ 다들 눌러보실 것으로 알고 다음 설명은 생략합니다^^ 눌러보시면 답 나오거든요 ㅎ


이제 아까 구현해 놓은 녀석들을 연결해 줄 차례입니다~
File's Owner에서 우클릭 또는 Ctrl+클릭 으로 드래그 앤 드롭으로 새로 만든 View로 끌고옵니다~


Outlets에 onView에 클릭!


정상적으로 연결이 되면 앞에 동그라미가 생겨요~


이제는 반대로 File's Owner에서 오는게 아니라 버튼을 오른쪽버튼 드래그 앤 드롭 합니다. 또는 Ctrl키를 누른 상태에서 드래그 앤 드롭!
 



Add버튼이니까 addView와 이벤트를 연결합니다.


자, 그런데 이 방법 말고 또 다른 방법들을 소개합니다~!
이벤트를 연결하기를 원하는 버튼에서 우클릭! 또는 Ctrl+클릭!
하게되면 아래 그림과 같이 Event와 Outlet 등을 연결할 수 있는 참이 똻!!!!!!!!!!




그러면 자신이 원하는 이벤트 또는 아울렛의 오른편에 보이는 빈 동그라이 있지요?
거기서 누르고 File's Owner쪽으로 드래그 앤 드롭 해봅니다~  버튼은 통사아Touch Up Inside 이벤트를 주로 사용합니다.


그 반대로 File's Owner쪽에서 우클릭 또는 컨트롤 클릭하여 연결해 주는 방법도 있습니다~!


이벤트는 Touch Up Inside로~! 물론 다른거 해보셔도 됩니다 ㅎㅎ 어떤 결과가 나오는지 직접 해보세요^^
이렇게 세가지 방법을 소개해 드렸습니다~ 이 세 방법중에 편한 방법을 골라서 쓰시면 될 것 같네요 ㅎ


자, 정상적으로 다 연결되고 난 후에 File's Owner를 우클릭 했을 때 뜨는 창의 모습니다.
전부 잘 연결 되셨나요?^^


자, 제대로 다 되셨으면 실행시켜 봅시다~

과감히 Add버튼을 클릭!!
 

오이잉??
창이 지멋대로 이상한데 붙어버리네요 ㅎㅎ
제대로 잘 붙도록 조정해 줘야겠네요~


자 FirstViewController.m 구현파일로 이동합니다~

addView 메소드에서 한 줄을 더 추가해 줍니다~


자~ 다시 실행~~


이쁘게 잘 나오나요?ㅎㅎ



자, 그럼 여기서 동작을 잘 살펴봅니다~!

Add버튼으로 화면 위에 붙인 녀석은 Remove로도 화면에서 없어지고, Hide로도 없어집니다! 그쵸?

그런데 Hide로 없어진 녀석은 Add해도 다시 나타나질 않습니다~

그리고 Remove로 없애고 나서 Show해도 안나타 납니다!!

오이잉??? 도대체 왜 이런일이???

똑같이 화면에서 없어지고 나타났는데, 동작이 될때가 있고 안될때가 있다???

애매~~~~~~합니다잉~~~~~~

자, 잘 생각해 봅시다용 ㅎㅎ

아까 작성해둔 코드를 보게 되면

addView: 메소드 안에는

addSubview: 라는 메소드가 들어가 있습니다.

이말인 즉슨, 어떠한 view위에 sub(하위) view를 추가하겠다.

말 그대로 '새로운 하위 뷰를 얹어넣겠다' 라는 뜻이겠죠?

하지만 showView: 메소드 안에는 setHidden: 이라는 메소드가 사용된 것을 보게 됩니다.

말 그대로 '숨기지 않겠다!' 이런 뜻이겠죠? 



자, 다시 생각해 봅니다!

addSubView는 원래 없는 녀석이 새롭게 뷰 위로 얹혀진다는 것을 알게 됩니다!
하지만, Hidden은 말 그대로 투명으로 없어져 있어서 눈으로만 안보일뿐 원래 있는 녀석이 보이게 되는 것 뿐입니다!


그 반대로 생각해 봅니다~

removeFromSuperview메소드는 있던 녀석을 뷰 위에서 아예 없애버는 것이구요,

hidden해버리면 우리 눈에만 안보이고 뷰 위에 계속 얹혀있는 상태가 되는 겁니다.


그렇기 때문에 add버튼보다 show버튼을 먼저 누르게 되면, 새로운 뷰가 얹혀져 있지 않은 상태이기 때문에 화면에 나타나지 않게 되는 것이고,

hidden으로 숨겨놓고 add해버리면, 이미 화면위에 얹혀져 있기 때문에 프로그램은 이미 얹혀져 있고 보이지만 않는 것을 다시 얹을 필요가 없으므로, 그상태 그래도 놔두게 됩니다. 즉, 우리 눈에는 보이지 않아도 컴퓨터는 위에 얹혀져 있다는 것을 알기 때문에 동작하지 않는 것입니다.

이해 가시나요?

여튼, 상황과 때에 따라서 이렇게 뷰를 얹고 없애고 보이게 하고 안보이게 하고... 이런식으로 컨트롤 할 수 있다는 것을 간략히 보여드렸습니다~!

다음 번에는... 또 뭘 해볼까요?ㅋㅋ

아직 할것은 태산인데 말이죠 ㅎㅎㅎ

댓글 남겨주세요~!

by yagom

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 현준이빵 2012.10.14 01:03  댓글주소  수정/삭제  댓글쓰기

    즉, 원래 있던 View와 새로 띄운 View와 상호작용이 안돼나요?;

    죄송합니다 뎃글 한번에 안달아서; 집컴퓨터가 이상해서 확인이 안눌지네요;

  3. asrada 2012.10.27 01:51  댓글주소  수정/삭제  댓글쓰기

    정말좋은강좌...!!

    시간가는줄 모르겠네요ㅎㅎ

    정말 또 잘보고 갑니다!!

  4. Karl 2012.11.07 16:06  댓글주소  수정/삭제  댓글쓰기

    바쁘신 와중에 죄송하지만 질문 하나 드려도 될까요..?
    야곰님 강좌를 처음부터 쭈욱 보면서 따라하고 있는데요
    야곰님이 강좌에서 쓰시는 Xcode 버전이 4.2맞죠~?
    제가 snow leopard로 개발을 진행하고 있는데 사정상(앱스토어 연결이 안되요 ㅠㅠㅠㅠㅠㅠㅠㅠ)
    Xcode를 4.0을 쓰고 있습니다...

    처음부터 강좌를 따라하다보니 강좌와 다른 부분이 꽤 많이 있더라구요..
    그래서 어느 정도 고쳐가면서 제작중인데 이번 강좌는 실행이 잘 안되네요... ㅜㅜ
    Remove를 누르고 다시 Add를 누르면 초록색 바탕에

    Thread 1: Program received signal: "EXC_BAD_ACCESS"

    가 출력되고 멈춰버리네요 ㅠㅠㅠ
    저건 무슨 에러인가요...? ㅜㅜ 찾아봐도 잘 안나와서
    죄송하지만 이렇게 여쭤봅니다 ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.08 07:39 신고  댓글주소  수정/삭제

      안녕하세요 Karl님~!
      방문해 주셔서 고맙습니다 :)
      말씀하신 내용은 Xcode 버전과는 별개의 문제 같아요^^
      여튼 해결방안을 생각해 보자면... 제 생각에는 버튼에 메소드가 중첩 연결이 되어있거나 잘못 연결이 되어있을 것 같습니다.
      xib에서 버튼을 오른쪽버튼 클릭하여 메소드가 정상적으로 연결되어 있는지 한 번 꼼꼼히 살펴보시기 바랍니다.
      그게 아니라면 코드상에 무엇인가가 잘못되어 있겠죠^^;

  5. hyung 2012.11.15 16:41  댓글주소  수정/삭제  댓글쓰기

    야곰님 안녕하세요! 야곰님이 게시해주신 화면전환게시물 4개를 다 읽고 해봐도 안되는게 있어요 ㅠㅠ
    죄송하지만 혹시 시간되실때 한번 읽어주세요 ㅠㅠ
    음 조금 설명을 드리자면..
    A라는 뷰에 카메라(B라고 말할게요)로 갈 수 있는 버튼이 있어요.
    그 버튼을 눌러서 B로 왔어요
    B는 그냥 카메라가 아닌, 저번에 야곰님이 가르쳐주셔서 만든 커스텀 카메라가 있어요
    거기에 옵션뷰로 이동하는 "버튼"이 있는데 이녀석이 도통 말을 듣지 않네요
    웃긴건요 다른뷰에서 그 함수를 쓰면 잘 알아 듣는데 꼭 카메라에서 쓰면 아무 반응이 없네요
    제 생각에는 처음에 [self.view addSubview.onView]에서 맨 앞에 view가 A뷰라서 안되는거 같은데
    카메라 고유 view포인트라던가 있나요 ㅠㅠ.. 정말 오늘 7시에 출근해서 지금까지 못해가지궁..
    진짜 어떻게든 해보려했는데 너무너무 힘드네요 ㅠㅠ

    쉽게 정리 하자면 A->옵션뷰 로는 가지는데 B->옵션뷰 는 아무 반응이 없어요! 제 생각은 처음에 뷰를 못잡아서 그런거 같은데
    야곰님 의견을 들려주세요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.15 17:36 신고  댓글주소  수정/삭제

      :) 안녕하세요 hyung님~
      [self.view addSubview] 가 아니라

      B가 뷰컨트롤러라면 [B.view addSubview:]
      를 사용하시면 되고,
      B가 뷰라면 [B addSubview:]
      하시면 될 것 같습니다 ^^

    • hyung 2012.11.15 17:40  댓글주소  수정/삭제

      네 한번 해볼게요! 항상 친절한 답변 감사드립니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.15 17:46 신고  댓글주소  수정/삭제

      별말씀을요:-) 항상 찾아주셔서 고맙습니다 ㅎ

    • hyung 2012.11.16 11:32  댓글주소  수정/삭제

      안녕하세요! 어제 끙끙거리던게 풀렸어요^^
      카메라가 뷰컨트롤러가 안잡혀서 계속 A뷰에 옵션화면이 뜨고 있던 거였어요 ㅠㅠ
      결국 [self dismissModalViewController]로 그냥 그 화면을 지우고 A뷰에 띄우니 되더라구요.. 흑흑 카메라녀석 뷰 이름을 몰라서..

      근데 또 다른문제가 생겨버렸어요..
      옵션뷰에서 카메라로 돌아가려고 하는데, 카메라뷰를 지우고 띄운거기 때문에, 다시 카메라를 실행시켜야 되는데
      함수를 불러도 반응이 없네요.. ㄷㄷ
      다른 Alert같은 함수들은 되는데 이녀석은 무반응..

      -(IBAction)Camera{
      UIPIckerController*********어쩌고저쩌고
      }
      이녀석이 카메라 함수인데 아무리 불러도 반응이 ㅠㅠ

      그냥 카메라 함수 전체를 복사해서 옵션뒤로가거버튼에 그 함수를 넣자니 그건 좀 아닌것 같구요 ㅠㅠ.. 왜 안되는 걸까요

      아.. 참고로 카메라 함수가 있는 파일과 옵션뷰가 있는 파일이 서로 다릅니다. #import해서 불러오려는데.. 흑흑
      [self.cameraModule Camera];이렇게 했는데 안되구요
      [self.cameraModule Alert];이런 메세지띄우는 함수는 되는데.. 뭐가 다른거죠 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.16 15:16 신고  댓글주소  수정/삭제

      흐음... 무슨말씀이신지 잘 감이 안와요 ㅠ_ㅠ
      말로만 들으니 잘 모르겠네요 ㅠㅠㅠ
      에고... 고생이 많으실텐데

    • hyung 2012.11.16 15:42  댓글주소  수정/삭제

      음.. 간단히 말씀드리면요
      OptionView라는 파일에서
      CameraModule파일에 있는 함수를 가져다 쓰려고 하는데

      A(Alert)라는 함수는 불러지는데
      B(Camera)라는 함수는 안불러져요
      둘다 제가 만든 녀석들이구요..
      두 함수 다 CameraModule이라는 파일에 있구요
      OptionView에서 버튼을 누르면
      CameraModule에 있는 카메라 함수를 실행시키려고 했거든요..
      그게 안되네요 ㅠㅠ 근데 웃긴게 Alert함수는 되더라구요.. ㅠㅠ
      진짜 점점 카메라가 싫어지고 있....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.16 17:36 신고  댓글주소  수정/삭제

      일단 그 메소드 내부에 로그를 찍어서 메소드가 호출이 되는지 확인을 해보는 것이 우선일 것 같구요, 버튼과 확실히 잘 연결이 되어있는지 확인해 보시구요, 그래도 아니라면 카메라를 어떤식으로 불러들이는지 확인을 해봐야 할 것 같습니다 ^^;

    • hyung 2012.11.19 09:17  댓글주소  수정/삭제

      허헛.. 다시 주일의 시작이네요! 야곰님 조언받아 다시 해볼게요^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:25 신고  댓글주소  수정/삭제

      :) 넵 또 새로운 시작이네요~!
      행복한 한 주 되시길 빕니다 ㅎ

  6. hyung 2012.11.19 10:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 요새 야곰님을 매우 귀찮게 하고 있는 형 입니다..
    CameraModule파일에
    -(void)Camera{
    -카메라 실행 소스
    }
    라는 메소드가 있을때

    같은 CameraModule파일에서
    -(IBAction)button{
    [self Camera];
    }
    라고 하면은 실행이 되잖아요?

    그렇다면! OptionView.h라는 파일에서
    #import CameraModule.h
    해서 Camera메소드를 사용해고 싶을때는 어떤식으로 써야 하나요
    [self Camera]라고 하면 오류나와요 ㅠㅠ.. 기본개념이 없어서 죄송합니다..
    어떤 식으로 불러들여야 할지 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:56 신고  댓글주소  수정/삭제

      안녕하세요 hyung님~
      언제든 저를 괴롭히셔도 상관은 없습니다 ^^;
      self라는 녀석은 자기 자신(객체)를 지칭하는 역할을 하므로 당연히 다른객체에 있는 메소드를 가져다 쓰려고하면 에러가 나겠죠^^
      일단 제 Objective-C 포스팅을 쭉 한번 보면서 기본 문법에 대한 정리를 해 보시고, 클래스 메소드로 만들어 보시면 더 편하게 사용하실 수 있을 것 같습니다.

      아무리 질문을 많이 하고 검색을 많이 해서 당장 해결 할 수 있고 잔기술을 써볼 순 있지만, 기초가 없으면 빠른 시일내로 무너지게 되어있습니다.

      지금 당장은 오래 걸리는 것 같아도 기초부터 차근차근히 다시 배우고 정리하는 것이 가장 빠른 지름길일 것이라고 생각합니다 ^^*

      처음부터 차근차근 기초를 되짚어 보셔요 :)

  7. hyung 2012.12.04 17:12  댓글주소  수정/삭제  댓글쓰기

    야곰님 포스팅엔 정말 중요한게 많아요^^~

    addsub뷰 지우는거 찾다가 검색해보니 역시나 있네요!

    또한번 도움받고 갑니다^^~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.04 19:45 신고  댓글주소  수정/삭제

      중요하다기 보다는 기초적인 것이겠죠...ㅎ
      물론 기초가 가장 중요하긴 하지만...
      내가 뭔 말을 하고 있는건지 +_+ㅋㅋㅋ

  8. Favicon of http://deoker.com BlogIcon Deoker 2013.01.02 17:03  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 너무 감사 드립니다 :D

  9. Lewis6 2013.01.03 11:19  댓글주소  수정/삭제  댓글쓰기

    저는 처음에 First View 바깥 쪽에 뷰를 놓고 나서 추가한 뷰의 사이즈 조정이 안되어서 몇시간을 낭비했네요. ㅠㅠ
    처음에 속성탭에서 Simulated Metrics Size 가 Retina 4 Full Screen 로 되어 있는데 그것을 Freeform 으로 변경해서 사이즈 수정을 할 수 있었습니다.
    Xcode 4.5, iOS 6.0 기준입니다 ;;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.03 20:01 신고  댓글주소  수정/삭제

      안녕하세요 Lewis6님!
      찾아주셔서 정말 고맙습니다 ㅎ
      Xcode가 버전이 변경되면서 좀 바뀐 부분들이 있죠^^;
      부가적인 설명 남겨주셔서 정말 고맙습니다!
      새해 복 많이 받으셔요 ㅎ

    • 난나야 2013.12.19 10:55  댓글주소  수정/삭제

      와 감사합니다^^

      덕분에 사이즈 조절 할 수 있었습니다. ㅎㅎ

    • NanMin 2014.03.23 13:23  댓글주소  수정/삭제

      저두 1시간째 보다 혹시나 해서 댓글보니 역시 저같은분이 계셨네요..감사합니다….ㅎㅎ

  10. hyun 2013.02.10 23:02  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 감사드립니다~!
    저도 윗분처럼 추가한 뷰의 사이즈 조정이 안되어서 몇 시간 허비했네요..ㅠㅠ
    버전마다 바뀌는 게 많아서 따라하기도 어렵네요..ㅠ

  11. 딴또 2013.03.08 18:52  댓글주소  수정/삭제  댓글쓰기

    이번 강의도 감사합니다.

  12. 퐝칭칭 2013.03.28 14:33  댓글주소  수정/삭제  댓글쓰기

    아 정말 답답한게 다사라지는 곳입니다 여긴 ...... ~,,~
    혼자 공부하면서 얼마나 생고생을 했는데
    정말 감사드립니다 야곰 님 앞으로도 1강부터 지금까지 쭉따라왔는데 너무 좋아요~
    사랑합니다 ㅋㅋㅋㅋ

  13. dklee7206 2013.04.29 21:55  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 강좌 잘 보고 있는 초보입니다.

    강좌중에 File's Owner에서 검정색 뷰로 땡겨서 onView가 동그라미 생기게 하라고 하셨는데, 안해도 실행은 되는데
    어떤 차이가 있는지 궁금해서요, 안바쁘실때 답변 부탁드립니다.

    dklee7206@naver.com

  14. nari 2013.05.14 16:24  댓글주소  수정/삭제  댓글쓰기

    정주행 하면서 하나씩 다 따라해보고 있는데
    점점 재밌네요^^ 감사합니다~

  15. yimcold@gmail,com 2013.07.23 08:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 이 블로그를 한줄기 빛 처럼 여기며 살아가는 iOS에 매우 초보자입니다.
    덕분에 많은 내용 얻어가고 있습니다.

    두가지 질문드릴게 있는데요

    1.여기에서 thirdViewController파일은 이용하지 않는 것 처럼 보이는데 왜 추가하신 건가요?

    2. 저는 thirdviewController에서 구현한 뷰를 부분뷰 처럼 집어넣고 싶은데 그게 가능 할까요?
    그러니까 현재는 B.xib에서 버튼이 들어있는 부분뷰를 구현해서 히든/쇼/하고 있잖아요~ 그렇다면 A.xib파일에서 구현한 뷰를 B.xib에서 부분뷰로 사용하는게 가능한가요?

    우문이지만 현답해 주실것으로 믿습니다 ^.^
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.23 09:36 신고  댓글주소  수정/삭제

      ㅎㅎ 안녕하세요~!

      1. 매의 눈을 가지셨군요!! 글쎄요... 제가 왜 안썼을까요 'ㅁ'
      아마 제가 뭔가 해보려다가 안하고 이거만 포스팅 했었나봐요 ㅎㅎㅎ 신경쓰지 않으셔도...ㅎㅎ

      2. 당연히 가능합니다 :) iOS 6 이상이라면 Container View Controller를 활용할 수 있구요, 그 이하 버전이라도 다른 방법으로 가능합니다 ㅎ

      컨테이너 뷰 컨트롤러 예제는 애플 문서에 잘 나와있습니다 :) 참고해 보세요 ㅎ

      http://bit.ly/Vksa9N

      그 이하 버전에서 사용할 수 있는 방법은
      살짝 다른 개념이지만 이 부분을 참고해 보세요.
      http://www.ralfebert.de/tutorials/iosdev/viewcontroller/
      위 예제에서 네비게이션 컨트롤러 대신 지금 사용하고 있는 뷰 컨트롤러 위에 예제와같이 뷰 컨트롤러를 올리고 클래스(ThirdViewController)를 지정해 주면 됩니다 :)

  16. yimcold@gmail,com 2013.07.23 19:51  댓글주소  수정/삭제  댓글쓰기

    와!!!!!!!
    주신 아이디어로 여러문제 해결했습니다!!!
    자주 들를게요. 야곱님 감사합니당!!!!!

  17. Hide 2013.11.10 15:30  댓글주소  수정/삭제  댓글쓰기

    감사합니다

  18. tmsnvl 2014.10.10 10:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~!!
    좋은 강좌 잘 봤습니다.
    강좌를 보고 질문이 있는데요~
    지금 현재는
    [self.view addSubview:onView];
    [onView setFrame:CGRectMake(20.0f, 300.0f, 280.0f, 100.0f)];
    으로 좌표를 조정해서 밑에 버튼을 가려놓으셨는데 가려져 있지 않다고 했을때
    밑에 부모뷰의 클릭 이벤트는 어떻게해서 막을수 있나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.10.10 10:22 신고  댓글주소  수정/삭제

      안녕하세요~
      뷰에 보면 userInteractiveEnable (?) 이라는 프로퍼티가 있을거예요.
      NO로 설정해주시면 이벤트를 받지 않습니다 :)

  19. tmsnvl 2014.10.10 17:32  댓글주소  수정/삭제  댓글쓰기

    앗~!! 빠른 답변 감사드립니다~ㅎㅎ
    제가 질문을 잘못했나봅니다.
    addSubview 로 팝업을 띄우면 팝업 외의 다른 버튼이나 이벤트
    즉 부모뷰의 Add 버튼이나 Show 버튼은 이벤트가 안먹히게 하고 싶습니다.
    팝업 뷰의 Remove, Hide 버튼 이벤트는 되구요
    물론 팝업 뷰가 사라지면 다시 버튼 이벤트가 정상 동작하게 하고 싶구요~

    아직 많이 부족해서 야곰님이 힌트 주신걸로 이렇게 해보니
    [self.view addSubview:onView];
    [self.view setUserInteractionEnabled:NO];

    팝업뷰도 이벤트가 안먹히네요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.10.10 18:29 신고  댓글주소  수정/삭제

      음... 버튼들도 기본적으로 UIView의 확장이기 때문에 같은 프로퍼티를 줄 수 있습니다. 버튼들을 IBOutlet으로 연결하고 각자 버튼들을 컨트롤 해줄 수도 있는데, 잘 이해가 가지 않으시면.. 차후 IBOutlet을 연결하는 방법을 터득하신 후 다시 보시면 이해가 되지 않을까 싶습니다 ^^

  20. VSblue 2015.08.25 10:27  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 좋은강좌 잘 보고 있습니다.
    질문이 있는데요

    스토리보드에 view를 드래그래서 띄울려고하는데 자꾸 view가 드래그가 안되네요...어찌해야되죠...

    • Favicon of https://blog.yagom.net BlogIcon yagom 2015.08.25 12:21 신고  댓글주소  수정/삭제

      안녕하세요 :)
      스토리보드에서 View 대신 View Controller를 올려주세요~ 스토리보드에는 뷰 대신 컨트롤러들을 올릴 수 있습니다 :)

  21. 넘나다른것 2016.09.27 13:41  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 강좌 너무 잘보고 있습니다! 앞에것은 어찌어찌 따라했는데.. navigation controller부터 따라하기가 힘드네요 ㅜㅜ

    이번편은
    view를 만들어서 File's owner에서 드래그했는데 onView가 안떠요...ㅠㅠ

    그 전에는 스토리보드에서 view controller로 만들었었는데 그것도 안되서 다시 해본 거거든요 ㅠㅠ
    xcode가 너무 바뀌어서 따라하기 정말 힘드네요 ㅠㅠ 도와주세요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2016.10.01 18:29 신고  댓글주소  수정/삭제

      안녕하세요 넘나다른것님!

      iOS 버전이 많이 바뀌어서 해당 내용들은 많이 사라지거나 바뀌었고, Xcode 또한 변화가 많았습니다. 초보자의 입장에서 요즘 이 튜토리얼을 제대로 따라하기에는 무리가 있습니다 ㅠ_ㅠ 최신의 좋은 예제들을 따라해 보심이 어떨까 합니다.

      많은 도움을 드리지 못해 죄송합니다.


오늘의 주제

1. Class 만들어보기 
2. Class Method, Getter, Setter, Instance Method... 



여섯 번째 시간입니다.^^

지난 번에클래스와 인스턴스에 관한 개요를 알아보았습니다.
하지만, 말로만 듣고는 잘 감이 안오시지요?
물론 이번 포스팅을 보아도 아리송 하실 수 있습니다.
정말 짧은 코드이지만 많은 내용이 담겨져 있으니 이번 포스팅도 보고 또 보셔야 할 듯 합니다^^
정말 중요한 것이니 몇 번을 보고, 다른 싸이트를 검색하고, 직접 계속 둘러보면서 꼭 몸으로 익히도록 하세요~!

자 그럼 오늘은 직접 클래스를 한 번 만들어 보도록 합시다~
출바알~~~~~~~~~~~~


# Class 만들어 보기


자... 새로운 프로젝트를 만들고 아래 그림처럼 새로운 클래스 생성을 위해 New File...을 선택합니다~


자, 그 후에는 Objective-C class라는 녀석을 선택 한 후 Next ~!



자, 클래스 이름은 MyFirstClass로 만들어 주겠습니다. Subclass of 란에는 NSObject를 선택해 주세요~


저장경로는 그대로 놔두고 Create~!


자~ 새로운 클래스가 생성되어있습니다!!


# Class Method, getter, setter, Instance Method...

자동으로 생성된 코드를 한 번 봅시다요~
Foundation헤더가 자동으로 import되어있구요~
@interface MyFirstClass : NSObject

@end

이렇게 생성되었네요~
우리 사용자 인터페이스 뭐 이런말 많이 하잖아요? 인터페이스 뭐 감이 오시죠?
클래스의 요모조모를 만들어 줄 수 있는 영역입니다.
@end는 말그대로 끝!
그러니까 저 빈 공백 사이를 우리가 채우게 되면 클래스의 모양을 완성하는 것이라는 느낌이 오지 않나요? 오홍홍
 : NSObject의 뜻은 NSObject의 Subclass라는 이야기 입니다. NSObject를 상속받은 것이지요... 뭐 더 자세한 것은 다음에 설명해 보도록 할게요..^^
 


자 내용을 채워넣어 봅니다...
빨간 네모박스대로 코드를 넣어봅시다..^^  




자~ 이제 코드 설명 들어갑니다~

중괄호 { } 안에 들어가 있는 세 녀석들이 있습니다.
이녀석들을 instance variable 즉, '인스턴스변수'라고 합니다.
지난 번에 설명드렸던 것 중에 틀 안에 클래스마다 가지고 있는 특징들을 저장하는 빈공간들이 있다고 설명드렸을 거예요~
이녀석들이 그 녀석들입니다.
인스턴스는 클래스의 틀을 가지고 만들어 지는 거잖아요? 지금 우리는 클래스 틀을 만드는 중이구요~
그래서 인스턴스가 새로 똻!!!!! 만들어지면 저 세 녀석들을 가지고 태어납니다. 물론 저 세 녀석들은 텅텅 빈 멍텅구리이지요^^
저기 세 녀석들에 뭐가 들어가냐에 따라서 이 인스턴스는 다른녀석들과 겉모양과 틀은 같아도 내용이 다른 인스턴스(객체)가 되는 것이랍니다.
이녀석은 하나의 integer변수와 두개의 string을 가지고 있네요~

중괄호가 닫히고 @property라는 녀석들이 있네요.
이 property와 다음 그림의 구현파일에서 볼 수 있는 @synthesize라는 녀석과 짝을 이루어서 자동으로 접근자 메소드 들을 생성해 주는 역할을 합니다.
말로만 해서는 잘 이해가 안가시죠?ㅎ 접근자(getter, setter)녀석들을 직접 만들어 쓰는게 정말 귀찮거든요..^^ 그것은 이따가 구현파일 보면서 다시 설명해 드리도록 하지요~
그리고 property옆쪽 괄호 안에 들어가 있는 녀석들은 이 변수들을 꺼내 쓰고 집어넣을때 등등 뭐 이녀석들을 어떻게 관리할지 명시해 주는 옵션 같은 녀석들인데요, 지금은 일단 넘어가도록 합시다^^ 이것만 해도 골치아프잖아요~ㅎㅎ 

그 아래에는 메소드들이 명시되어 있는데요, 일단 메소드에 대해 간략하게 이야기 해보자면,
메소드라는 녀석들은 무엇인가를 수행하는 역할을 합니다.
쉽게 설명을 해서 전자레인지는 우리가 차가운 음식을 집어넣고 버튼을 누르면 데워서 뜨거운 음식으로 만들어 줍니다. 즉, 찬음식을 데워서 뜨거운 음식을 만드는 일련의 과정을 수행하는 역할을 하지요.
메소드도 우리가 메소드에게 일할거리를 던져주면 메소드의 고유한 역할들을 수행합니다.
감이 오시나요?ㅎ
여튼, 여기 헤더파일(.h)에서는 이런 메소드가 있다~ 정도만 말해주고, 그녀석들의 역할을 구현파일(.m)에서 명시해 줍니다.


다시 돌아와서 @property아래에보면 - 로 시작하는 메소드 들이 쭈욱 나열되어 있습니다.
요녀석들을 우리는 '인스턴스 메소드'라고 부릅니다.
요녀석들은 클래스라는 틀에서 찍혀 나온 후에만 동작하는 녀석들입니다.
즉, 인스턴스에서만 작동하는 녀석입니다.

그 아래에 보면 +로 시작하는 '클래스 메소드'가 보입니다.
이녀석도 메소드이긴 하지만 좀 독특한 녀석입니다. 클래스라는 틀이 하나의 인스턴스를 찍어내기도 전에 뭔가의 역할을 할 수 있는 녀석입니다.
잘 이해가 안가시죠? 자동차 공장에서 차를 만드는 생산라인에서 뭔가를 할 수 있다... 즉, 만들어지는 차가 아닌 생산라인 자체에서 뭔가를 수행한다는 의미로 받아들이시면 될 듯 합니다. "차 생산을 시작해라!" 라는 명령 같은 것이 되겠죠?ㅎ
그렇다면 자동차안에 있는 고유의 특성들(인스턴스 변수들)은 이 클래스 메소드 안에서 쓰일 수 없겠군요^^

말이 참 어렵지요? 헷갈리기도 무지하게 헷갈리구요...ㅎㅎ

그럼 이제 구현파일로 가서 이 메소드라는 녀석들이 무엇을 하는 녀석들인지 속삭여 줄 때가 되었네요 ㅎ


자, @synthesize라는 녀석은 @property와 짝을 이뤄서 getter와 setter를 자동으로 만들어 준다고 말씀드렸어요~
@property에서는 변수형, 변수명을 모두 명시해 주지만, @synthesize에서는 변수명만 기재해 줍니다.
@property에서 토스~ @synthesize에서 스파이크~ ㅋㅋㅋ 농담입니다~~~~~~

여튼 아래에 보시면 아까 헤더파일에서 정의해 주었던 메소드들이 하는 역할들이 쭈욱 나열되어 있는 것을 볼 수 있으실 거예요~

캡쳐 화면에서 오타가 있습니다.
인스턴스를 설정해 준다. 인스턴스를 반환한다. (x)
인스턴스 변수를 설정해 준다(setter), 인스턴스 변수를 반환한다(getter). (o)

여튼 메소드들의 역할들은 주석으로 설명을 달아놓았으니 대충 짐작하시리라 믿습니다.
그래도 혹시몰라 다시 간략히 설명하자면

호출한다라는 것은 그 메소드에게 일을 명령한다는 것으로 해석하시면 되겠습니다.
즉 myFirstMethod라는 인스턴스 메소드를 호출하면 NSLog를 남기는 역할을 수행하는 것입니다.

다음에 setMySecret:이라는 인스턴스 메소드를 호출하면 mySecret라는 인스턴스 변수에 secret이라는 녀석을 통해 받아온 값을 저장해 주는 역할을 수행합니다. 이러한 형태를 우리는 setter라고 부릅니다. mySecret이라는 녀석을 setting해주는 녀석이라 이말이죠 ㅎ. 메소드에 대해서는 다음번(바로 다음번)에 자세하게 다룰 것이므로 잘 모르겠어도 '이 메소드는 mySecret이라는 녀석에 뭔가를 집어넣는 녀석이구나' 라고 생각하세용~

다음은 mySecret이라는 녀석의 값을 알아보는 메소드 입니다. 메소드 이름도 getMySecret이네요^^
mySecret의 내용을 불러오는 메소드 입니다. 이런 형태의 녀석을 getter라고 하죠~

자, 이렇듯 mySecret이라는 하나의 녀석을 넣고 빼고 하려면 복잡하고 귀찮게 두개의 메소드를 따로 만들어 줘야 하는데, 그 수고를 덜어주는 녀석들이 바로 @property, @synthesize 되겠습니다^^ 조금 감이 오실까요?ㅎ 요~ 밑에 가시면 좀 더 이해가 가실거예요~

마지막으로 itIsClassMethod라는 클래스 메소드가 구현되어 있습니다.
사실 클래스 메소드는 이런 시시한 역할을 하지는 않지만, 예를 들어보기 위해 제가 만들어 본 것입니다..ㅎㅎ
어쨌거나 저쨌거나~ 위에서 말했든 이녀석은 +로 시작을 하므로 클래스 메소드이고, 인스턴스가 되기도 전에 호출이 가능 합니다~
호출하면 로그를 남기는 역할을 수행하는군요~

이렇게 구현파일 탐험이 끝났습니다~ㅎㅎ

그럼 이렇게 만들어진 클래스를 직접 구워 삶아 보아야 겠지요?ㅎ

main구현파일로 가봅시다~!


네, 또 한바탕 타이핑 합니다 ㅎㅎ
참참참, 스크린샷에 빼놓은 부분이 있는데요, #import "MyFirstClass.h" 해주셔야 합니다~
import뒤에 누구는 <> 해주고 누구는 "" 해주냐구요?ㅎ
<>를 해주는 녀석은 기본 헤더파일, "" 해주는 녀석은 우리가 직접 만들거나 외부에서 가져온 헤더파일 이라고 이해하시면 쉽겠습니다~

여튼 메인 안에 작성해 봅시다요~
(꼭 autoreleasepool 안에 작성하지 않으셔도 됩니당..ㅋㅋ)

뭐 여튼 그럼 이제 코드를 한 번 뜯어봅시다~
일단 코멘트를 보고 한 번 이해해 보려 노력해보세요~

메소드를 호출하는 방법입니다.
[클래스 또는 인스턴스의 이름 (띄어쓰기) 메소드 이름]

이런식이죠
[MyFirstClass itIsClassMethod]
아까 말씀드렸듯이, 우리는 아무런 인스턴스 생성도 하지 않았지만 클래스 메소드를 호출했습니다.

그 아래에는 인스턴스를 선언하고 초기화 합니다.
MyFirstClass *instance ;
'instance라는 이름을 가진 MyFirstClass 클래스의 인스턴스를 만들어라' 라는 의미입니다.
거기에 [[MyFirstClass alloc] init] 이라고 있는데, 이 alloc과 init이 대표적인 클래스 메소드가 되겠습니다...ㅎㅎ
이 의미는 MyFirstClass를 메모리에 할당하고 초기화하여 인스턴스를 생성한다.. 뭐 이런 의미입니다!
깊이들어가면 한도끝도 없어서... 뭐 이런 의미^^

그렇다면 MyFirstClass *instance = [[MyFirstClass alloc] init]; 이라는 녀석은 instance라는 인스턴스에 MyFirstClass라는 클래스를 초기화하여 집어넣어 주어라. 정도의 의미가 되겠습니다~

여튼 이렇게 우여곡절 끝에 인스턴스가 생성되었습니다.

그럼 이제 이 인스턴스(객체)안에 특징(내용물) 즉, 인스턴스 변수들을 세팅해 줘 봅시다.

myName이라는 인스턴스 변수에는 yagom이라고 넣어 주었습니다. 

그리고 NSString클래스의 인스턴스 변수 name이라는 녀석에다가 instance 인스턴스의 myName이라는 인스턴스 변수의 내용을 불러와서 집어넣어 줍니다.

그런데 여기서 잠깐!! 우리는 myName이라는 녀석의 getter와 setter를 만들어주지 않았는데요???
그렇죠!?
바로 @property와 @synthesize 녀석들이 자동으로 만들어 주었기 때문입니다~!

아래에 몇줄도 다 같은 내용들입니다~
주석을 잘 읽어 보시구요..^^
혹여나 이해가 안가는 부분은 댓글 주세요 ㅎㅎ

자, 그럼 대망의 결과를 확인해 볼까요?ㅎㅎㅎ


이런식으로 로그들이 찍히네요~!

정말 자세히 쓰면 한도끝도 없고, 간단히 쓰려니 간단히 쓰는것도 어렵네요..^^
지루하고 힘드셨을텐데 여기까지 읽어주셔서 감사합니다!!
여기까지 읽으신 분이 계실지도 의문이네요^^
혹여나 읽으셨다면 힘내라고 댓글 하나만 ...!! 넙죽넙죽...

정말 오래걸렸네요^^
다음에 또 알찬 내용으로 다시 올게요~
부족한 부분은 댓글 꼭 주시구요~!

뿅~!

by yagom

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 루감 2012.11.20 09:29  댓글주소  수정/삭제  댓글쓰기

    굿입니다.

  3. 지나가다... 2012.11.22 15:07  댓글주소  수정/삭제  댓글쓰기

    [instance setMyName:@"yagom"];

    이부분이 이해가 되지 않습니다.
    저 코딩에 의해
    instance의 myName에 "yagom"이 들어가는것 같은데.
    setMyName은 어디서 정의된건가요??

    지금 회사라 맥이 없어서 테스트를 못해보고 머리속으로만 그려봅니다.
    저 부분이 이해가 되질 않습니다. ^^;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.22 15:18 신고  댓글주소  수정/삭제

      본문에...


      그리고 NSString클래스의 인스턴스 변수 name이라는 녀석에다가 instance 인스턴스의 myName이라는 인스턴스 변수의 내용을 불러와서 집어넣어 줍니다.

      그런데 여기서 잠깐!! 우리는 myName이라는 녀석의 getter와 setter를 만들어주지 않았는데요???
      그렇죠!?
      바로 @property와 @synthesize 녀석들이 자동으로 만들어 주었기 때문입니다~!


      라고 써져있네요^^~
      자동으로 생성된 메소드 입니다.

  4. 지나가다... 2012.11.23 11:21  댓글주소  수정/삭제  댓글쓰기

    감사합니다. ^^

  5. 첼로와짜짜 2012.11.26 16:25  댓글주소  수정/삭제  댓글쓰기

    엄청 도움됐어요. xcode 키고 위에 예제 다 실행해보고, 주석 다 읽어가며 하니까 이해가 잘되네요. 정말 감사합니다.

    맥부기에서 왔습니다

  6. hyung 2012.11.29 10:18  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님 초기화말인데요
    MyFirstClass라는 뷰를 다른 뷰에서 불러 온다 칠때

    A라는 메소드 안에서 MyFirstClass *instance = [MyFirsrClass alloc]init; 로 초기화를 해주고
    [self presentModalViewController:instance]이런식으로 불러오고
    B라는 메소드 안에서도 똑같이 초기화를 해주고 불러오면

    생긴건 같은 MyFirstClass의 뷰 여도 서로 다른건가요? 초기화를 각자 했으니..?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.29 10:41 신고  댓글주소  수정/삭제

      네, 당연합니다 :)
      NSLog(@"%x", instance);
      로 찍어보면 그 객체의 메모리 주소를 알 수 있습니다.
      각자 다른 녀석이라는 것을 직접 눈으로 확인해 보셔요 ㅎ
      우리가 NSString이라는 클래스에서 객체를 여러개 생성하는 것과 마찬가지라고 생각하시면 좀 더 쉽지 않을까요?ㅎ

    • hyung 2012.11.29 11:13  댓글주소  수정/삭제

      그렇군요! 그럼 property로 만들고
      synthesize로 받아온다음에 사용하면 같은 객체를 참조 하게 되는 거겠네요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.29 12:06 신고  댓글주소  수정/삭제

      그건 당연히 같은 객체겠죠?ㅎ
      직접 로그 찍어서 확인해주시는 센스~_~

    • hyung 2012.11.29 12:26  댓글주소  수정/삭제

      그렇군요! 저번에 읽었을 때는 몰랐는데
      또 중요한 정보를 얻어가네요^^

  7. 오급수개구리 2013.01.10 18:02  댓글주소  수정/삭제  댓글쓰기

    이제 시작하는 초보인데 정말 좋아요!

  8. 행복한 하루 2013.01.17 08:23  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 항상 강좌 잘 보고 있는 초보 입니다.ㅎ

    하나 궁금한게 있는데요

    NSString *instance = [[NSString alloc]initWithString:@"test"]; 에서

    객체(인스턴스) 포인트변수라고 해야 하나요? 암튼 ㅎ

    instance가 담고 있는 주소값은 NSLog(@"%x", instance); 라고 찍어보면되는데

    그러면 이번엔 *instance 이 값을 찍어 보고 싶은데 어떻게 해야 하는지요?

    일반적인 포인트 예제보면
    int a = 300;
    int *pa;
    pa = &a;

    NSLog(@"%i", *pa); 라고 찍어 보면 pa가 담고 있는 주소값이 가리키는 실제값 300을 찍히는데요 그러면

    *instance 이 값 즉 instance에 담고 있는 주소값이 가리키는 실제값을 찍어 보고 싶어서 질문 드립니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.17 09:08 신고  댓글주소  수정/삭제

      NSLog(@"%@", instance);
      로 찍어보세요~^^

    • 행복한 하루 2013.01.17 16:59  댓글주소  수정/삭제

      yagom님 빠른 답변 감사해요 ㅎ

      그런데 왜 NSLog(@"%@", instance); 로 찍는지요?

      NSLog(@"%i", *pa)처럼 NSLog(@"%@", *instance); 로 해야 하는게 아닌가? 해서요. 이유 좀 설명해 주세요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.18 09:27 신고  댓글주소  수정/삭제

      답변이 늦어져 죄송합니다...^^

      우리가 숫자를 보고 싶을 때 %i를 하는 것처럼

      %@를 하면 객체를 캐스팅 해줍니다 ㅎ

      주소값 안의 객체가 무엇인지를 알아서 체크하고 알맞게 로그를 남겨주죠^^

  9. 행복한 하루 2013.01.19 15:27  댓글주소  수정/삭제  댓글쓰기

    답변 감사합니다. ^^

    yagom님 하나만 더 질문드릴게요 ㅎ

    요즘 BarButtonItem쪽을 공부 중인데요

    self.navgationItem.leftBarButtonItem = self.editButtonItem;
    이 코딩에서

    self.editButtonItem를 보면 .(닷연산자)를 사용했길래

    아 editButtonItem 이 getter setter 로 설정된것이나 생각하고

    help로 찾아보니 @property 로 명시되어 있지 않고

    그냥 - (UIBarButtonItem *)editButtonItem 이렇게 인스턴스 메서드로

    되어 있더라구요.

    @property 로 명시되어 있지도 않은데 어떻게

    self .(점) editButtonItem 으로 처리했는지가 궁금하네요.. ㅠㅠ

    지금까지 전 objective c 에서 @property 로 명시된 getter setter 가 아니면
    .(닷연산자)를 사용할 수 없다고 알고 있걸랑요.

    제발 답변 부탁드릴게요.. ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.20 23:58 신고  댓글주소  수정/삭제

      답변이 늦어져 죄송합니다 ^^;

      @property가 선언되어있지 않아도 getter setter 메소드가 구현되어 있다면 사용 가능합니다.

      @property는 말 그대로 자동으로 getter setter를 만들어주는 녀석이므로, 내부에 getter setter가 명시적으로 구현되어있다면 .을 사용가능합니다 :)

  10. dklee7206 2013.04.29 21:56  댓글주소  수정/삭제  댓글쓰기

    개념 잡는데 정말 많이 도움 되는 강의 였습니다. 정말 감사합니다.
    손에 익히느라 위 예제는 10번도 더 안보고 코딩 해보고 있네요 ^^.

    예제에서,
    @interface MyFirstClass : NSObject
    {
    // int myFirstInt; //Integer variable
    // NSString *myName; //NSString instance
    NSString *mySecret; //NSString instance

    위와 같이 변수 두개는 아래 @property가 있어서 주석처리해도 실행이 가능한데 클래스 안에 변수 설정해줘야 하는 이유가 궁금합니다. 차이점 있으면
    설명 좀 부탁드려도 될지요.. 구글 뒤져봐도 잘 답변이 안보여서요.. dklee7206@naver.com입니다.
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.29 09:02 신고  댓글주소  수정/삭제

      네, 말씀하신 내용 맞습니다 :)

    • dklee7206 2013.04.29 21:57  댓글주소  수정/삭제

      글 찾아보니 최신 Xcode 버전에 따라 멤버변수를 선언 안해줘도 @Property만으로 변수 선언을 대신한다고 하는데 맞나요?

      요새는 @Synthsize 선언도 안해줘도 되죠?

  11. dklee7206 2013.04.29 21:56  댓글주소  수정/삭제  댓글쓰기

    감사합니다~

  12. 뱀직구 2013.06.25 10:10  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 감사드립니다
    아이폰에서는 소스코드가 안보여서 답답하지만
    그로 인해 머리를 더욱 치열하게 굴리면서 공부하고 있습니다

  13. 승연 2013.11.08 10:04  댓글주소  수정/삭제  댓글쓰기

    질문이있습니다 [instance setMyName:@"yagom" 을 했는데 setMyName에 안들어가고 myName에 어떻게
    넣나요 ???

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.11.11 09:45 신고  댓글주소  수정/삭제

      안녕하세요 승연님.
      setMyName이라는 녀석은 우리가 변수를 property로 선언했을 때 자동으로 생성되는 메소드입니다.

      즉, myName 이라는 변수를 세팅하고 싶을 때 사용하는 메소드입니다.

      원하신다면
      instance.myName = @"yagom";
      이라고 표현하셔도 무방합니다 :)

  14. 백승연 바보 2013.11.27 11:30  댓글주소  수정/삭제  댓글쓰기

    글 잘보구가요

  15. phil 2014.01.08 09:55  댓글주소  수정/삭제  댓글쓰기

    어지간한 책보다 쉽게 잘 풀어놓으신거 같습니다. 도움많이 되고 있습니다. 감사합니다.

  16. Sori_Park 2014.02.14 17:37  댓글주소  수정/삭제  댓글쓰기

    덕분에 잘 배웠습니다.^^
    계속 눈과 손에 익히려고 노력중입니다 ㅎㅎ
    감사합니다!!

  17. 쉬인 2014.07.15 11:33  댓글주소  수정/삭제  댓글쓰기

    아... 너무 늦게 봤나요 ㅜ.,ㅜ

    정말 쉽게 잘 쓰셔서 머리에 잘 들어옵니다. 사실 다른 글들도 많이 봤거든요.
    이제 잘 정리되고 좋은데... swift 가 ...
    그래도 xcode공부하는게 맞을라나요?
    감사합니다 yagom님~

  18. 2015.01.21 15:34  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2015.02.01 20:48 신고  댓글주소  수정/삭제

      안녕하세요, 답변이 너무 늦어져 버렸네요 ㅠ_ㅠ
      다시 답글을 보실지 모르겠지만, 답변 드립니다.

      제가 처음 공부했던 때는 2010년도 내외라서 지금과는 많이 달랐습니다. 저도 처음에는 블로그 글들을 보며 감을 잡은 후에 깊은 공부를 레퍼런스 북과 수많은 삽질을 통해 진행했습니다. 요즘에는 제가 책을 전혀 보지 않는 상태라 좋은 책을 추천해드리기는 좀 애매한 면이 있어요...^^;

      물론 영어가 전혀 문제가 되지 않으신다면야 애플의 공식 개발문서가 제일 좋겠지만, 한글로 된 책을 원하신다면, 자신의 수준과 스타일에 맞게 책을 선택하시는게 가장 좋을 것 같습니다.

  19. 지나가던 학생 2015.11.13 14:22  댓글주소  수정/삭제  댓글쓰기

    클래스 해더파일에서 myName 변수 선언할 때 에러가 뜨네요 existing instance variable must be __unsafe_unretained error

    아예 선언 자체를 지워버리니까 제대로 컴파일되는데ㅠㅠ혹시 이유가 뭔지 알려주실 수 있나요ㅠㅠㅠ선언하지않아도 myName 을 인식하는데 어느 부분에서 또 선언이 되는 건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2015.11.20 05:07 신고  댓글주소  수정/삭제

      안녕하세요 :)
      글쎄요... ARC 때문일 수도 있을 것 같다는 생각이 드는데요... property 선언 중 retain 키워드를 strong으로 한 번 변경해 보시겠어요? :)

  20. 필감성 2018.01.05 22:30  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    최근에 야곰님 포스트보고 objective-c 공부하고 있는데요
    저기서 MyFirstClass *instance = [[MyFirstClass alloc] init]의 설명을
    instance라는 이름의 인스턴스 메소드를 MyFirstClass 클래스에 넣어 초기화 시킨다는건가요
    아니면 instance라는 이름의 인스턴스 메소드를 초기화하여 MyFirstClass 클래스에 넣는건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2018.01.06 14:03 신고  댓글주소  수정/삭제

      안녕하세요 필감성님!

      [[MyFirstClass alloc] init]은 MyFirstClass라는 클래스의 인스턴스를 메모리에 할당(alloc)하고 초기화(init) 한다는 뜻입니다.
      MyFirstClass *instance는 MyFirstClass 클래스 타입의 인스턴스를 가리키는 포인터 변수를 뜻합니다.
      즉, 저 한 줄의 코드를 표현하자면 'MyFirstClass라는 클래스의 인스턴스를 메모리에 할당(alloc)하고 초기화(init)하여 instance라는 이름의 MyFirstClass 클래스 타입의 포인터 변수에 생성한 인스턴스 주소를 할당한다'고 표현할 수 있겠습니다.

  21. 분당조승우 2018.12.18 17:30  댓글주소  수정/삭제  댓글쓰기

    스위프트만 보다가 오브젝트씨 보니 너무 어렵네요 ㅠㅠ 포스팅해주셔서 너무 감사해요ㅠㅠ


오늘의 주제

1. Class? Object? 


다섯 번째 시간입니다.^^

이제까지는 정말 Objective C를 배웠다고 하지도 못할 정도로 아주 기초적인 내용을 다루어 보았습니다.
지난 번에는 실수 표현방법에 대해 알아보았습니다.
조금 도움이 되셨는지요??
나중에 언젠가는 꼭 필요한 날이 올테니 알아두시길~!^^ 
지금부터 몇 번에 걸쳐 포스팅할 내용들(클래스, 메소드, 인스턴스 등등)의 내용만 이해를 하신다면,
"나 Objective C 70%는 이해했어" 라고 말하실 수 있을거예요.
정말 중요한 것이니 몇 번을 보고, 다른 싸이트를 검색하고, 직접 계속 생각하며 익히도록 하세요~!
iOS Dev 포스팅의 클래스와 객체 챕터를 인용하여 조금 더 설명을 추가하여 보았습니다.

힘겨운 발걸음을 한 번 떼어 볼까요?
스따뚜~~~~~~~~~~~~

Objective-C는 '객체지향언어'입니다.

객체지향언어는 객체지향 프로그래밍을 지향하는데요...

아.. 처음 보는 분들은 도무지 무슨말인지, 뭔소린지 도통 모르시겠죠?ㅎㅎ

사실, 모든 것을 시작을 할 때 기초를 탄탄히 다지고 하는것도 좋지만 전 지금 여러분들이 프로그래밍에 대한 지식이 전무하다고 생각을 하고 진행해 볼 생각입니다.

일단, 머리아프게 생각하지 맙시다..ㅎㅎ

지금 기초부터 정말 탄탄히 다지고 싶은분들은..

객체지향언어, 객체지향 프로그래밍, Objective-C, 객체, 인스턴스, 메소드, 클래스에 대해서 역사부터 차근차근 공부하고 오시길 바랍니다. 그러면 조금 더 이해가 잘 갈 수도 있어요^^

하.지.만...

공부하고 되돌아 오시는 분들은 그렇게 많지 않을 것 같네요.ㅎㅎ

하다가 분명히 지칠 것 같아요^^..

그냥 간단간단하게 알아두고 차근차근 한 번 생각하며 나가 봅시다~

일단 저만 믿고 와보시라니까요^^~


# Object와 Class란?

클래스. 우리나라 말로 바꿔보면, 등급? 교실? 종류? 도대체 뭘까요? 흠... 그냥 클래스입니다. 뭐 어떻게 표현할 방법이 없네요 ㅋㅋㅋ
굳이 하나 정하자면 종류??? 
Object란..? 
한글로 하면 객체입니다.

그렇다면 객체란 무엇일까요??
우리는 객체를 '내 차(My Car)'라고 생각해 봅시다.
여기석 클래스라는 녀석도 등장을 하는데, 클래스는 공장의 '생산라인'이라고 생각합시다.
공장의 생산라인에서는 똑같이 생긴 차량을 우리가 필요한 만큼 만들어 냅니다. 
이것이 클래스와 객체간의 관계입니다.

 



그림에서 보는 것과 같이..(발로그려서 죄송...ㅋㅋ) 생산라인에서 똑같이 생긴 자동차를 뽑아냅니다.
하지만 차량마다 번호가 다르고 탑승하는 사람도 제각각입니다.
이처럼 클래스는 어떠한 객체가 가지는 특정 모양에 대한 내용을 담고 있습니다.
그리고 객체는 찍혀나온 녀석이고, 우리는 그 안에 객체마다 클래스 형식에 맞춰 내가 원하는 내용들을 채워 넣을 수 있습니다. 
 

다른 방법으로 표현하면 클래스는 붕어빵을 찍어내는 쇠로된 틀이고,
오브젝트는 그 틀에서 찍혀나오는 붕어빵으로도 비유할 수 있겠습니다.
또한, 붕어빵에 넣어주는 앙금에 따라 팥앙금을 가지는 붕어빵이 될 수도, 피자맛 붕어빵이 될 수도 있죠.
겉모양은 같은데 말예요^^


또 다른 방법으로 설명해보면...
사람을 하나의 클래스로 본다면, 
우리 하나하나는 객체인 것입니다.
그리고 우리는 한 명 한 명 다른 이름을 가지고 있고, 피부색도 다르고, 성격도 다르고, 직업도 다르지요?
전부 사람이라는 같은 틀 안에서 우리는 각각 개성을 가지는 객체가 되는 것이지요^^

강아지도 강아지라는 클래스에서 나오는 객체이지만
종에따라서 색도 크기도 성격도 가지가지 입니다.
 
이제 프로그래밍에서 우리는 창조주가 되는 거에요.
사람의 틀을 가지는 클래스를 만들 수 있고, 
그 틀에는 인종, 성격, 생각 등 다양한 내용을 채울 수 있는 공간을 만들어 두는거죠.

그 후에 우리는 우리가 창조해 놓은 틀(클래스)를 이용해서 사람을 하나하나 찍어내어 만듭니다.
사람 하나를 만들어 놓고,
이름이라는 특징에는 야곰 이라고 채워 넣고
인종이라는 특징에는 황인종을 채워 넣고
외모라는 특징에는 잘생기고, 키크고...
성격이라는 특징에는 사랑스럽고 멋지고 센스있고 착하고 젠틀하다 라는 내용을 채워넣곸ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
생각이라는 특징에는 프로그래밍, 프로그래밍, 프로그래밍... 뭐 이딴것들을 채워 넣습니다.
이렇게 해서 야곰이라는 이름을 가진 객체가 탄생하는 것입니다.
하지만 이 틀(클래스)는 영원불변 하므로 언제든지 이 틀을 사용하여 또다른 사람을 만들어 낼 수 있는 것입니다.
이렇게 따지면 장동건, 원빈, 이승기... 뭐 다들 저랑 같은 틀에서 나온 사람이라 이거죠^^ㅋㅋㅋㅋㅋㅋㅋ
 

조금 이해가 가시나요? 이해가 지금 당장 가지 않으셔도 좋습니다~!
그냥 읽어두세요!!
걱정하실 필요 없구요~ 서서히 시간이 지나고 가끔씩 제가 클래스니 변수니 이런말을 무의식중에 할 때 마다 한 번씩 와서 다시 봐주세요^^ 이해가 잘 안가시면 구글에서 검색해 보시면 도움이 되는 자료들이 많을 거예요~
 
그리고 인스턴스(Instance) 또는 인스턴스변수라는 이름도 종종 보게 되실텐데요, 이녀석은 다름이 아니라 객체를 지칭하는 말입니다. 인스턴스 = 객체라고 생각하시면 됩니다.
 
그럼 여기서 대충 클래스, 객체(인스턴스)의 관계에 대하여 알아보았습니다. 책에서 보면 원론적인 내용들이 굉장히 많아서 헷갈리는 경우도 많고, 요거만 보다가 지쳐 쓰러지는 경우도 있으니.. 일단 여기서 잠시 접어둡시다~ 사실 이게 다예요^^;

정 더 궁금하시다면... 대충 흝어보고 오세요~
http://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
http://ko.wikipedia.org/wiki/%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8B%B0%EB%B8%8C-C
http://www.webdoor.org/xe/135
http://kldp.org/node/108983
별 내용은 없을거예요~

객체지향언어는 왜 사용하는지, Objective-C는 왜 C랑 다른지... 등등은 C를 배우지 않으신 분들이 아니라면 굳이 여기서 설명해 드릴 필요는 없을 것 같아요^^
다음 번 정도에 객체지향언어의 특징과 왜 객체를 사용하는지 정도에 대해서 간략히 설명해 드릴게요. (만약 제가 깜빡하고 안하면 댓글 남겨주세요..ㅎㅎ)

by yagom

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 초보자. 2012.05.31 22:06  댓글주소  수정/삭제  댓글쓰기

    잘읽었습니다. 많은 도움이 됬습니다. 감사합니다.

  2. 우왕굿! 2012.07.11 12:07  댓글주소  수정/삭제  댓글쓰기

    정말 쉽게이해할수있었습니다!! ㄱㅅㄱㅅ

  3. 혁고 2012.07.13 09:23  댓글주소  수정/삭제  댓글쓰기

    주인님 주인님
    제가 이 글을 보고 이해하려 노력중인데요
    대충 이해가 되는것같긴한데 결과적으로 못한듯

    이글에서 클래스를 통해 찍어내는 객체마다 인스턴스변수가 다 다를거라고 하셨던거같은데 맞나욤?
    클래스를 통해서 찍어내는 객체가 무엇을 말하는지 이해가 안돼요!! 구체적으로 결과물을 알려주신다면 감사
    제가 c만 조금알고 이번에 아이폰프로그래밍강좌를 듣고있는데요
    좀 뭔가 매치가 안되는듯,, ㅜㅜㅜㅜ






    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.14 15:57 신고  댓글주소  수정/삭제

      안녕하세요 혁고님.
      처음부터 이해하려고 애쓰실 필요 없습니다..^^
      물론 기초와 개념이 중요하긴 하지만 처음부터 깊게 이해하실 필요 없습니다.
      일단
      http://blog.yagom.net/20
      이 글을 5번 정독 해 보시고 정 이해가 안된다 하시면 뒷 부분 이어서 보시고, 나중에 제가 클래스니 객체니 얘기를 할 때 한번 씩 다시 돌아오셔서 보시면 됩니다.

      그리고 구체적인 예가 필요하다고 하시면
      http://blog.yagom.net/23
      여기를 한 번 참고 해 봐 주세요~^^*

      그리고 C와는 다른 개념들이 아주 많습니다.
      초보의 입장에서 C랑 비교하고, C의 기준에서 이해하려고 하면 굉장히 힘들거예요. Objective-C는 Objective-C 있는 그대로 받아들이시기 바랍니다. ^^

      자주 들러주세요~ 고맙습니다 :-)

  4. chosamong 2012.08.24 21:10  댓글주소  수정/삭제  댓글쓰기

    C도 모르고 Obj-c도 모르기 때문에
    이해는 부족
    다만 감사의 마음을 폭풍 댓글로 호응중 ^^

  5. Sori_Park 2014.02.13 17:14  댓글주소  수정/삭제  댓글쓰기

    매번 좋은 강의 감사드려요^^
    안드로이드쪽 하다가 iOS 넘어왓는데
    yagom님 덕분에 낯설지 않게,
    이해하기 쉽게 배울 수 있는 것 같아요.

  6. 초보 2014.02.17 17:09  댓글주소  수정/삭제  댓글쓰기

    정말 잘 읽었습니다. R은 배우고 있는데 프로그래밍 지식이 전무한데 ㅠㅠㅠ
    도움이 많이 되었습니다.


오늘의 주제

1. 주석 ( Comment, 코멘트 )


열 네번째 시간입니다.^^

정말 오랜만에 뵙겠습니다...
알고 계시다 시피 저의 맥북 에어가 구입한지 일년도 되지 않았는데...
누군가 슬쩍 해 갔습니다...ㅠㅠ
어흑...
일단 핑계지만...
어흑..ㅠㅠ
여튼... 다시 차근차근 포스팅 해 보려 합니다.

탭 뷰 컨트롤러, 네비게이션 컨트롤러 등을 쭈욱 살펴 왔었는데...
잠시 딴얘기 한 번 해보려 합니다.
저도 좀 더 빨리빨리 이것저것 써보고 싶지만, 
중요하다고 생각하는 만큼 빼놓고 갈 수가 없네요..^^

사실 Objective C와 C 포스팅 중간에 다 들어가 있습니다.
그런데 여기 또 다시 캡쳐하기도 거시기 해서 Objective-C 포스팅에서 퍼왔습니다.
기본적인 내용은 동일 하므로, 제가 저기에 적어 넣은 코드들은
어플리케이션의 AppDelegate.m 파일의
application:didFinishLaunchingWithOptions: 메소드 안에 작성하시면 됩니다.

자, 다시 출발!!


# 주석

주석이 무엇인가 궁금하시죠?ㅎ
다른 블로그나 책에서 한 챕터를 잡고 주석을 설명하는 경우는 거의 없습니다만..
주석은 생각 외로 굉장히 중요한 역할을 하며, 프로그래밍의 첫 습관을 들일때 매우 중요한 녀석이라고 생각합니다. 물론 실무에서도 굉장히 중요합니다.
그래서 주석은 한 챕터로 잡고 설명하려 합니다!!
오늘 포스팅은 짧습니다만, 꼭 기억해 두셔야 할 포스팅입니다^^*

주석.. 코멘트.. 같은 말입니다!
주석은 코드에 아무런 영향을 미치지 않지만, 이 코드가 어떤 코드인지, 무슨 역할을 하는 것인지에 대한 설명을 적어놓는 메모 같은 것입니다.

그런데 이게 왜 중요하냐구요?
정말 간단한 프로그램이라면 굳이 필요 없을지도 모르지만, 나중에 백줄, 천줄, 만줄 ... 길어지는 프로그램이라면 내가 짜 놓고도 이 부분이 어떤 부분이었는지 기억하지 못하는 경우가 허다합니다 ㅋㅋㅋ
나는 기억력이 좋아서 아닐거라구요?
훗...!절대 그렇지 않습니다!
십수년 프로그래밍 한 고수분들도 꼭 적어두는 것이 주석입니다.
정말 코드 짜기도 바빠 죽겠는데 그런거 적을 시간이 어디있냐구요?
그래도 해야 합니다!!
나중에 현업에 가서 협업을 할때에도 굉장히 중요합니다.
내가 짜놓은 코드는 내가 해석하기 쉬울지 몰라도 다른 사람이 같이 일하면서 내 코드를 볼 때, 이해가 가지 않으면 일이 그만큼 늦어지고 심지어는 프로젝트가 망가지기도 하니까요.
제가 여기서 중요하다고 백만번 말해도 모자랄 만큼, 주석을 다는 것은 정말 중요한 습관입니다.
처음부터 주석을 다는 습관을 들여 놓으셔야지 나중에 후회하지 않고, 힘도 덜 드실것을 저는 장담합니다!!

이렇게 말하니까 주석 다는 것이 정말 어려운 것 같지만, 사실은 정말 간단합니다!
한 번 보시죠 ㅎㅎ

자... 화면에 보이는 저 녹색 글씨들 보이시죠? 저것들이 모두 주석입니다.
프로그램을 실행시켰을 때는 전혀 티가 나지 않지만, 작업하는 프로그래머는 보게 되는 저것이 주석입니다.
컴파일 할때 컴파일러가 주석은 모두 제외하고 컴파일 하게 됩니다.


 




위의 코드 실행 결과 화면입니다.
녹색으로 주석처리된 녀석들은 화면에 나오지 않죠???
코드 해석이 어려우시면 지난번 포스팅을 다시 한 번 보고 오세요^^



자... 조금 수정해서 보여드릴게요~!
어떻게 뭐가 달라졌는지 비교해 가면서 보세요^^


결과 화면입니다~!



로그에 찍힌겁 보시면 깨알같은 팁도 있죠?ㅎㅎㅎ
여기에 직접 쓰지 않을테니 한 번 사용해 보세요^^ 


중요한 주석 처리하는 방법은 간단합니다!


// 주석......
이런식으로 주석을 작성하게 되면 한 줄이 주석처리 됩니다.
즉, 한 줄을 자신이 쓰고 싶은 말들을 써놓을 수 있죠.


또한, 
/* 주석...
여러줄
쓸 수 있는
주석... */ 


이런식으로 처리를 하게 되면 여러줄을 주석처리 할 수 있습니다.

참 쉽죠잉!?

위에 예시로 작성한 코드에서는 주석을 위나 아래에 달아놓았는데, 코드 바로 옆에 붙여 써도 무방합니다~
무슨말인지 잘 이해가 안가시면 직접 해보세요 ㅎㅎ
다시 한 번 말씀드리지만, 컴퓨터 안고장납니다잉 ㅋㅋ 폭발 안합니다잉 ㅋㅋㅋ
주석 다는 스타일을 같이 협업하는 사람끼리 정하거나, 자신만의 스타일로 작성해도 됩니다. 딱히 정해진 틀은 없어요^^ 

앞으로 제가 포스팅을 할 때 마다 주석을 일일히 달며 하지는 못할 거예요.
하지만, 여러분은 제 포스팅을 보며 공부 하실때마다 코드에 꼭 주석을 달아주세요!!
부탁드립니다~!
이것은 정말 중요한 습관임을 다시 말씀드립니다!
그래서 일부러 한 챕터를 내서 포스팅을 한거예요~

그럼 긴 잔소리는 여기까지만 하고 다음 번에 뵙도록 해요^^*

뿅!


by yagom

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 늙은독자 2012.01.31 18:43  댓글주소  수정/삭제  댓글쓰기

    맥북에어 ...

    가슴이 아프네요....T_T

  2. Favicon of http://www.theuniuni.com/ BlogIcon cheap bras 2012.06.25 12:38  댓글주소  수정/삭제  댓글쓰기

    Amazing write-up! This could aid plenty of people find out more about this particular issue. Are you keen to integrate video clips coupled with these? It would absolutely help out. Your conclusion was spot on and thanks to you; I probably won’t have to describe everything to my pals. I can simply direct them here

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.25 15:54 신고  댓글주소  수정/삭제

      I don't know how to make a video clip for these...
      If you can, let me know about it.
      But I cannot understand ur words.
      Is this post has a conclusion?
      Do u understand what the post means?
      If you can direct ur friends, I can write it in Eng either.

      p.s.
      If my question were rude to you, forgive me buddy.
      It's just lack of my expression skill.

  3. 컴맹 2012.06.28 17:38  댓글주소  수정/삭제  댓글쓰기

    헐..맥북에어..ㅠㅠ
    어쩌다가...ㅠㅠ

    암튼 강의 잘보고 갑니다.~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.29 09:43 신고  댓글주소  수정/삭제

      안녕하세요 컴맹님 :-)
      그 맥북에어 생각하면 아직도 가슴이 아려옵니다...ㅎㅎ
      찾아주셔서 고맙습니다 ^^*
      자주자주 놀러오세요 ㅎ

  4. neoaero 2012.07.26 12:46  댓글주소  수정/삭제  댓글쓰기

    주석을 그리 중요하게 생각하지 않았는데 명심하겠습니다...^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 17:52 신고  댓글주소  수정/삭제

      ㅎㅎ 넵~!
      주석이 중요하죠...ㅎㅎㅎㅎㅎㅎㅎ
      사실 저도 업무중에 바쁘다보면 안쓰고 지나가 버리는 경우가 많은데 다음에 볼 때마다 후회하죠 ㅠㅠ

  5. chosamong 2012.08.24 17:44  댓글주소  수정/삭제  댓글쓰기

    흑 맘 아픈 맥북 에어...
    또 생각나게 해 드리네요. ㅠ.ㅠ;

    주석 달기 정말 정말 어려버요.
    그래도 배웠으니 이제부터라도...

    감사 인사 꾸우벅 <(__)>

  6. 2013.02.23 17:03  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  7. 딴또 2013.03.07 16:35  댓글주소  수정/삭제  댓글쓰기

    강의 감사합니다.


오늘의 주제

1. 네비게이션 아이템 커스터마이징   


열 세번째 시간입니다.^^

지난 번에는 네비게이션 컨트롤러 사용방법을 알아보았습니다.
조금 이해는 되시나요?
잘 이해는 안되시더라도, 조금씩 조금씩 따라오다 보면 언제쯤엔가 약간 감이 잡히실 거예요 ㅎㅎㅎ
사실 원론적인 이야기들을 쫘악 펼쳐놓고 첨부터 이게 뭐다 저게 뭐다 하기 보다는 이게 더 나을것 같아서요.
깊게 들어가면 잘 못따라 올지도 몰라요..ㅎㅎ
흥미도 훅 떨어지구요 ㅎㅎㅎ
궁금한 사항들이 있으면 댓글 남겨주시면 최대한 상세하게 알려드리도록 하겠습니다 ㅎ

자 그럼 오늘은 네비게이션 아이템들을 약간 커스터마이징 해보죠^^
스따뚜~~~~~~~~~~~~


# 네비게이션 아이템이란?


네비게이션 아이템이란 개발문서에서 살펴보면 

The UINavigationItem class encapsulates information about a navigation item pushed on a UINavigationBar object’s stack. A navigation bar is a control used to navigate hierarchical content. A UINavigationItem specifies what is displayed on the navigation bar when it is the top item and also how it is represented when it is the back item.

이라고 나오는데요 ㅋㅋㅋ

뭐, 대충 훑어 보면 네비게이션바 객체의 스택에 쌓인 네비게이션 아이템에 대한 정보?? 아... 발해석 죄송합니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 대충 감은 오는데 한국말로 어떻게 이쁘게 바꾸는지를 모르겠네요 ㅋㅋㅋ 

여튼 네비게이션바에 있는 구성요소들을 이야기 하는거예요 ㅎㅎㅎ

# 네비게이션 아이템 커스터마이징

한 번 바꿔 봅시다요~

일단 FirstViewController.m 으로 이동!
빨간 네모를 따라 작성해 봅시다 ㅎ

initWithNibName 메소드는 초기화 메소드라고 말씀드렸죠?
self.navigationItem.title = @"The First View";
라고 쓴 것은
self 즉 자신(FirstViewController 인스턴스)의 navigationItem중에 title을 The First View로 바꾸겠다는 말이 되겠습니다 ㅎㅎ
즉, 이 객체 인스턴스를 초기화 할 때 네비게이션아이템 타이틀을 설정한다는 말이 되겠습니다.


자, 마찬가지로 SecondViewController도 설정해 봅시다 ㅎ


이제 AppDelegate로 와서~!
[[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];
라고 입력해 봅시다.
이 코드는 이 어플리케이션의 모든 UIBarButtonItem의 모습 중에 틴트컬러를 검은색으로 바꿔주겠다는 말입니다.
즉, 네비게이션바의 버튼이든 툴바에 있는 버튼이든 간에 바 버튼들의 색상을 검정으로 바꾸겠다 이말입니다.
다른 녀석들에도 응용이 가능하구요^^
물론 원하는 곳에서 개별적으로도 변화시켜 줄 수 있습니다. 그건 저쪼아래 해볼거예요 ㅎㅎ
또 아래 코드는 우리가 만들어준 네비게이션의 바 색상을 변경해 주는 코드입니다. 이녀석도 검정을 해 봅니다 :-)
잘 모르시겠죠?ㅋㅋㅋ 실행해 보시면 감이 오실거예요~


실행 결과 화면입니다 ㅎㅎ

어..? 상단 바의 색상이 검정으로 바뀌었어요 ㅎㅎㅎ 그리고 타이틀도 The First View로 변경이 되었네요!!


SecondViewController도 마찬가지네요^^


그런데 왠지 저기 위에 뒤로가기 버튼의 이름이 너무 길어서 보기 싫어요...ㅋㅋㅋ 저 뒤로가기 버튼은 기본적으로 전 화면의 뷰컨트롤러의 네비게이션 아이템의 타이틀로 세팅이 됩니다. 그런데 우리가 이름을 좀 바꿔줘 봅시다 ㅎㅎ

아래 네모 박스의 코드를 FirstViewController.m에 입력해 줍니다.
분명히 이 버튼은 SecondViewController에서 보여지는데 왜 여기서 입력해 주냐구요?
그냥... 그 버튼은 이 FirstViewController를 가리키는 녀석이니까 여기서 설정해 주는것도 이상하지는 않죠?ㅎ
SecondViewController에 집어 넣으면 그 다음 화면에서 보입니다...^^
여기서 alloc이 뭐고 release가 뭐고... 궁금하시죠?ㅎ 좀 나중에 알아보도록 해요~


실행 결과입니다 ㅎㅎㅎ 버튼이 내가 원하는 이름으로 변경되었네요^^


자, 그런데 우리가 아까 위에서 이 어플리케이션의 바 버튼 아이템들의 색상을 모두 검정으로 바꾸어 주었었죠? 그래서 위의 버튼들도 검은색으로 나오구요 ㅎㅎㅎ
근데 왠지 이녀석 만큼은 파란색으로 바꿔주고 싶어요 ㅎㅎㅎ
바꿔줘 봅시다.


짜잔~ 파란색으로 바뀌었네요 ㅎㅎㅎ
좀 더 이쁜 색으로 바꿔 줄 수 있는 방법은 나중에 얘기해 보도록 해요.ㅎ
아니면 개발문서에서 UIColor에 대해서 알아보셔도 좋을 것 같아요^^


자.. 이렇게 또 하나 해 보았네요~

그런데 코드를 보면서 의아해 하시는 부분이 생길 수 있어요

어떤 속성값(property)에는 self.navigationItem.title = @"title" 처럼 점으로 구분해서 들어가구요.

어떤 속성값은 [[self navigationItem] setTitle :@"title"]; 식으로 설정하기도 하니깐요...ㅎㅎ

그러나 결론은 !! 같다! 입니다^^

원래 Objective-C에서의 정석은 두 번째 방법처럼 [ ]를 사용하여 getter, setter 메소드를 이용하는 것이 정석이지만, C++등 다른 프로그래밍 언어의 프로그래밍에 익숙해 있는 개발자들은 .을 사용하여 코딩하는데에 훨씬 익숙하거든요^^ 그래서 이렇게도 쓰고 저렇게도 쓰는 것입니다.

둘 중 뭐가 더 편하다 불편하다는 자기 판단이고 자기 몫입니다.^^

후우... 대충 감이 오시나요? getter, setter등의 얘기는 좀 더 깊숙한 얘기니까 나중에 차근차근 알아보도록 해요^^

그럼 오늘은 여기까지~! 다음에 또 보아요 ㅎㅎ




by yagom

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 늙은독자 2011.12.10 16:13  댓글주소  수정/삭제  댓글쓰기

    가끔 와서 봅니다.

    워낙 말재주가 좋으셔서, 내용이 너무나 쉽게 이해되네요.
    쭈~욱 계속해 주시길....^^;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2011.12.12 20:55 신고  댓글주소  수정/삭제

      격려의 댓글 고맙습니다~!

      처음으로 격려의 댓글을 남겨주셨네요ㅠㅠ 감격 입니다~!

      자주 오셔서 댓글 남겨주세요^^ 필요한 것 있으시면 말씀해 주시구요~!

  2. 어쩌다마주친그대 2012.01.27 01:02  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎ 우연히 들어오게되었는데요 아주 재미있게~ 시간 가는줄 모르고 읽게되네요
    게속 좋은 강좌 부탁드립니다 ~~

  3. Adnroid Developer 2012.02.22 03:03  댓글주소  수정/삭제  댓글쓰기

    저도요 ㅋㅋㅋ 우연히 들어오게 되었는데 너무 잘 설명해주셔서 계속 보고 있어요! 아이폰 개발 정말 생소했는데 이 글 보면서 기초부터 다지고 있어요 ㅋㅋㅋㅋ 전 안드로이드 개발자거든요 ㅋ 감사합니당 앞으로도 쭉~~~ 좋은 설명 잘해주세요. 계속와서 공부하고싶어요~

  4. 인절미후후 2012.04.23 20:48  댓글주소  수정/삭제  댓글쓰기

    공부를 하면 할수록 야곰님의 글이 더욱 이해가 되면서 얼마나 좋은글인지 알게 되는군요!!
    덕분에 아무것도 모르던 제가 몇주사이에 네비게이션 컨트롤러에 테이블뷰 띄우고
    그안에 xml파싱해서 데이터집어 넣고 파일다운로드 관리 하는 기능을 아주아주 약간이나마 구현하게 되었습니다.
    무한 감사를 드리고 앞으로도 잘 부탁드리겠습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.23 20:55 신고  댓글주소  수정/삭제

      도움이 되신다니 다행입니다^^*
      자주 들러서 글도 남겨주세요 ㅎ
      제가 틀린부분이나 부족한 부분 있으면 지적 부탁드려요~^^

  5. 2012.04.24 16:31  댓글주소  수정/삭제  댓글쓰기

    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];

    이부분에서 xcode 4.3.1 에서는 틴트 색상만 변하네요..

    위 캡쳐부분중에 //어플리케이션 내의 모든 BarButtinItem의 틴트 색상이 검은색이 됨

    이 부분입니다.

    iphone 5.1 Simulator 로 테스트 해봤습니다.~~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.24 18:09 신고  댓글주소  수정/삭제

      ^^;;
      무슨말씀이신지 잘 모르겠어요ㅠㅠ
      틴트 색상을 변경하는 메소드인데...
      틴트 색상이 바뀌는게 맞습니다..^^;
      App내의 모든 UIBarButtonItem 의 틴트색상을 검은색으로 변경하여 준 것입니다...
      제가 지적사항을 잘못 이해한건가요..? ^^;

  6. Newbie 2012.05.15 16:59  댓글주소  수정/삭제  댓글쓰기


    저도 ㅠㅠ 저 바버튼 부분이요 ㅠㅠ...

    저렇게 입력했더니

    Bar 자체 색깔은 안변하고, 뒤로가기 버튼만 검은색으로 변하네요 ㅠ

    Bar 전체 색깔을 바꾸는 방법은 어떻게 해야하나요? T_T?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.15 17:27 신고  댓글주소  수정/삭제

      세 번째 그림에 AppDelegate.m 에서...
      제가 빨간 네모를 해놓지를 않았네요^^;
      코드에 보면 firstViewNavi.navigationBar.tintColor = [UIColor blackColor];
      라고 작성해 놓은 부분이 있을거예요~
      그 부분을 놓치신 것 같습니다..^^
      빨간 네모칸을 놓친 것 죄송합니다~
      빨간 네모가 없어도 소스코드를 찬찬히 한 번 봐주세요^^;

  7. Newbie 2012.05.16 17:51  댓글주소  수정/삭제  댓글쓰기

    아! 찾았습니다. ^^

    근데 질문이 있습니당~~

    버튼 색깔을 바꿀땐

    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];

    네비게이션 색을 바꿀땐

    firstviewNavi.navigationBar.tintColor = [UIColor blackColor];


    이렇게 되어있는데 이것두 Obj C 문법 스타일 / C/C++ 문법스타일 차이인건가요~?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.16 18:06 신고  댓글주소  수정/삭제

      두가지 스타일 다 똑같다는걸 보여드리려고 일부러 그렇게 해 봤습니다 ㅎ
      [[firstviewNavi navigationBar] setTintColor : [UIColor blackColor]]; 로 작성하셔도 무방합니다. ㅎㅎ

  8. NeoSeo 2012.06.13 17:21  댓글주소  수정/삭제  댓글쓰기

    너무나 잘보고 있습니다. 감사합니다.
    궁금한게 있어서 질문드립니다.

    저는 퍼스트뷰에서 클릭을 해서 두번째 네비로 가면
    두번째 뷰에서 타이틀이 안나옵니다. 즉 타이틀 "Second View" 라는게 안보이네요..

    혹시 몰라
    AppDelegate.m에서
    UINavigationController *secondViewNavi = [[[UINavigationController alloc] initWithRootViewController:viewController2] autorelease];

    self.tabBarController.viewControllers = [NSArray arrayWithObjects:firstViewNavi, secondViewNavi, viewController3, nil];

    이렇게 해주면 "Push ViewController"버튼을 누르면 안나오고, 밑에 Second탭을 누르면 나옵니다.

    추가로 해줘야 할것이 있나요?
    너무 초보적인거 같지만 많이 해메고 있네요..

    • NeoSeo 2012.06.13 17:46  댓글주소  수정/삭제

      자답입니다.
      바로 전 글에서 new 보다는 alloc를 지향하라고 하셔서

      SecondViewController *secondViewController = [[SecondViewController new] autorelease];
      -->
      SecondViewController *secondViewController = [[SecondViewController alloc] autorelease];

      로 수정해서 했더니 안나왔습니다.

      여기서는 꼭 new로 해야만 하는 이유가 있는 건가요?

      아니면 제가 완전 잘못 이해한건가요?

      여기서 너무나 많은걸 배우고 있습니다. 감사합니다.

      첨부 구글링했습니다.
      id anObject = [NSObject new]; // Creates and returns an initialized object

      id anotherObj = [NSObject alloc]; // Not yet ready for use...
      라고 하네요..차이점은 알겠지만...그냥 차이점만 대충 알겠네요..어떻게 적용되는건지는-_-

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.13 18:05 신고  댓글주소  수정/삭제

      아하~^^*
      단순히 alloc만 하면 메모리 할당을 하지만 객체를 초기화 하지 않습니다.
      그래서 alloc을 하면 init을 꼭 해주어야 합니다.
      init은 항상 alloc의 동반자 입니다. ㅎ
      [XXX alloc];
      [XXX init];
      이 뜻은 XXX를 위해 메모리를 할당 한 후 초기화 하여라.

      라는 뜻인데요
      간단하게 한줄로 [[XXX alloc] init]; 이라고 표현하기도 합니다.

      따라서
      [XXX new]를 대체하려면 [[XXX alloc] init] 이라고 표현해 주어야 합니다 ㅎ

      충분한 답변이었는지 모르겠네요.
      좋은 질문 고맙습니다^^*

  9. NeoSeo 2012.06.14 09:17  댓글주소  수정/삭제  댓글쓰기

    너무 감사합니다.
    차근차근 공부하고있습니다. 너무 좋은 자료와 정보 감사합니다.
    음 몬가 제2의 taeyo를 보는듯한 느낌!

  10. 열심히 따라하기 2012.06.26 22:01  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 이런 강좌가 있는지 몰랐어요.

    어플 개발에 발을 들여놓으려고 몇 번 시도하다가 계속 마음을 접었었는데,

    제대로 잘 배울 곳이 생겨서 기분이 좋습니다 ^^


    코멘트를 다는 이유는,

    이 강좌 내용중에

    맨 위의 bar색깔 바꾸는 방법이요.
    UIBarButtonItem appearance 말고
    UINavigationBar appearance로 하니까

    bar의 색깔이 바뀌네요.
    강좌대로 UIBarButtonItem을 쓰면 저는 적용이 안 되요. 뒤로가기 버튼만 색이 바뀌더라구요.

    Xcode 4.3.3에서 iPhone 5.1 Simulator 쓰고 있습니닷.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 23:55 신고  댓글주소  수정/삭제

      안녕하세요 :-)
      도움이 된다고 하니 기분이 좋습니다 ㅎ
      코멘트 달아주신 내용이 맞습니다 ㅎ
      오해의 소지가 있는 것 같아서 본문을 조금 수정했습니다.
      제 말뜻은 그 안에 들어가 있는 바 버튼 아이템들의 틴트색상이 변경된다는 것이었는데 바까지 변경된다는 뜻으로 와전된 것 같습니다.
      지적 고맙습니다. ^^*
      자주자주 들러주세요 ㅎ

  11. 초보kay 2012.07.24 02:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요!
    코드를 보면서 잘 이해되지 않던 부분들이 님의 마지막즈음의

    "어떤 속성값(property)에는 self.navigationItem.title = @"title" 처럼 점으로 구분해서 들어가구요.

    어떤 속성값은 [[self navigationItem] setTitle :@"title"]; 식으로 설정하기도 하니깐요...ㅎㅎ

    그러나 결론은 !! 같다! 입니다^^"

    을 보곤 쫘악 해명되네요.

    좋은 강좌 감사드립니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.24 09:08 신고  댓글주소  수정/삭제

      ㅎㅎ 덧글의 세 번 째 줄까지만 읽고
      '본문에 나와있는데...'
      라고 생각했다가 그 다음 줄 읽고 한 짐 놓았네요 ㅎㅎㅎ
      역시 사람말은 끝까지 들어봐야 한다니까요 ㅎㅎ
      불같은 덧글 고맙습니다 :-)

  12. neoaero 2012.07.26 12:37  댓글주소  수정/삭제  댓글쓰기

    평소 이해 안되던게 하나둘 풀리고 있습니다. ㅋㅋ
    yagom님 실력이 대단한가봐야..이렇게 쉽게 글을 쓰실수 있으니 말이예요..^^

  13. chosamong 2012.08.24 16:40  댓글주소  수정/삭제  댓글쓰기

    이론~

    북스타일의 앱을 만들었는데 개념이 없어서 책갈피 구현을 못하고 있어요.
    부끄러운 제 자랑질 ~ ^^a
    http://itunes.apple.com/app/id492516072?mt=8

    좀 내용이 기다란 책에 책갈피, 검색 기능 등 완성도 높은
    북을 안 내놓는다고 투덜대는 독자분덜이 쬐금 있는데
    능력이 부족해서 딱 멈췄어요.

    거의 포기 상태인데 야곰님 강좌를 발견해서 개념 정리 들어가니
    또 의욕 살아나서 가능성을 점치며
    강의 실습하다, 구글링하다, 도큐먼트 예제 소스 살피다.
    이리저리 왔다갔다 정신없이 보다 보니
    최신 댓글에 제글에 대한 답글까지 ~ !!

    무한 감격이 ~ ^^;

    많은 분들의 열렬한 성화에 소임이 꾸려지길 기대하며
    저는 차분히 강좌 따라하며 좀 기본기를 다지고

    야곰님은 훈련 잘 다녀 오시길... ^^;

    역시나 이 글도 감사 인사
    꾸우벅 ~~ <(__)>

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 16:47 신고  댓글주소  수정/삭제

      헤헤, 저야말로 이렇게 글을 남겨주실 때 영광입니다 :)
      더 좋은 앱 만드셔서 많은 분들의 열렬한 성화를 잠재우시고 열렬한 팬으로 바꿔 주세요 ㅎㅎㅎ
      저도 더 좋은 앱 나오길 기대해 봅니다 ㅎㅎ
      앱 업뎃하시면 저한테도 귀뜸 해주시는거죠?ㅋㅋ

  14. chosamong 2012.08.24 17:17  댓글주소  수정/삭제  댓글쓰기

    야곰님 관심은 저의 영광이지요 ^^;

    할 수 있을지 자신은 없는데
    잘 되면 자랑질 도배 하겠습니다. ^____^;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 17:34 신고  댓글주소  수정/삭제

      ㅎㅎㅎ 1층짜리 건물을 짓든 123층짜리 건물을 짓든간에 전부 시작은 삽을 한 번 뜨는거죠~ㅎㅎ
      시작해 보세요~! 기대할게요 ㅎㅎ

  15. asrada 2012.10.27 00:07  댓글주소  수정/삭제  댓글쓰기

    정말강좌가 매회대박이네요

    멈추지 않고 달리셨으면 합니다. 개인적인 바램으로는 멋진 개발을 할 수 있을 것같네요~!!

    감사합니다( __)

  16. 딴또 2013.03.07 16:27  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다. 오늘도 열심히 공부할 수 있게 해 주셔서 너무 감사합니다.

  17. tweeboo 2013.03.15 15:43  댓글주소  수정/삭제  댓글쓰기

    강의가 너무 도움이 된답니다. 질문하고 싶은점이 있는데 혹시 아이폰 기본 메모장처럼,
    타이틀바의 오른쪽에 +버튼을 클릭하는 형태의 네비게이션 컨트롤러는 어떻게 구현하는지 배울 수 있을까요???

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.03.18 18:02 신고  댓글주소  수정/삭제

      음...
      http://stackoverflow.com/questions/1219779/how-to-add-a-right-button-to-a-uinavigationcontroller
      여기를 참고해 보시면 될 것 같습니다 :)
      바 버튼 아이템으로 구현하면 됩니다 ^^

  18. Hide 2013.11.11 20:56  댓글주소  수정/삭제  댓글쓰기

    감사합니다. %%


오늘의 주제


1. 실수 표현 방법


네 번째 시간입니다.

이번에는 사실 그다지 중요하지 않은 포스팅입니다.
그냥 해보는 깨알같은 팁!?ㅋㅋㅋ
서론 필요 없고 실습 시작입니다~!

# 실수 표현 방법

일단 새로운 프로젝트를 만들고 아래와 같은 코드를 입력하여 봅니다.


결과 출력 화면입니다.



간단하게 코드를 설명하자면...

일단 printf안에 %%라고 표현 한것은 로그에 %가 찍히게 하기 위함입니다...
뭐~ 그냥 그렇다구요 ㅎㅎ

%lf는 double형 실수를 표현하기 위한 출력 형식 지정자라는 것은 알고 계시죠?ㅎㅎ
그냥 %lf하면 컴파일러나 프로세서마다 다르겠지만 3532.0483940000... 이런식으로 대책없이 나오는 것이 보통입니다. 
그래서 좀 더 깔끔하게 출력을 하고 싶으신 분들이 있으실 겁니다.

%.3lf 라고 해주면 소수점 3자리 까지만 출력하라는 의미입니다.

마찬가지로 %.9lf해주면 소수점 9자리까지 출력하라는 의미입니다. 당연히 자리수가 없으면 나머지 자리에 0을 채워넣고 출력해주죠.

%10.3lf의 뜻은 총 10개의 칸에 표현하되 소수점은 3자리만 표현하라는 의미입니다. 물론 점(.)도 한 칸을 차지합니다. 다시 쉽게 설명하면 정수자리 6개와 소수자리 3개를 표현 할 때 이런식으로 작성하여 줍니다.

하지만 %3.3lf와 같이 부족한 칸 안에 표현하라고 하면 무시하고 그냥 원래대로 표기해 버립니다.

%10lf 하게되면 총 10개의 칸에 수를 표현하라는 의미입니다. 하지만 입력되어있는 숫자가 정수자리 4자리 + 점 1자리 + 소수자리 6자리 = 총 11자리 이기 때문에 10칸을 초과하죠? 그래서 그냥 무시하고 출력해 버립니다. 

하지만 %15lf하면 총 11자리 중에 4칸이 남기 때문에 좌측에 공백을 4칸 남기고 출력을 해 줍니다.

%-15lf 하면  총 15칸을 쓰지만 좌측정렬을 하라는 의미입니다.

%+15lf는 의미가 없습니다... 이상한 출력이 되지요?ㅎ 기본적으로 우측 정렬로 되어있기 때문에 의미 없는 표현이 되겠습니다..^^

별 의미 없어보이지만, 나름 팁이라고 생각하고 한 번 쯤 봐두시는 것도 나쁘지 않으실거예요^^

참, double형 뿐만 아니라 float형에서도 lf만 f로 바꿔서 해보시면 됩니다.ㅎ

이상 깨알같은 팁 포스팅이었습니다~!

다음에 뵈어요^^

by yagom

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

RSS Feed 받기  


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. Sio 2012.07.11 15:08  댓글주소  수정/삭제  댓글쓰기

    실수 표현할때 많이 버벅였는데 도움이 됬습니다~~~*^^*
    잘보고갑니다~!

  2. chosamong 2012.08.24 20:40  댓글주소  수정/삭제  댓글쓰기

    지금은 절대 기억 못하는
    까마득한 옛날의 기억
    다시 돼 새겨 보네요

    실력이 마구 업그레이드 되면 바로 써먹을 가르침 ^^
    횡설수설 되네요

    캄사. 꾸우벅


오늘의 주제


1. 변수 알아보기


세 번째 시간입니다.

안녕하세요! 야곰입니다.ㅎㅎ
벌써 세 번째 시간이네요 ㅎㅎㅎ
Objective-C는 C를 기반으로 하며 이런저런것들이 추가되고 빠지고 한 것이기 때문에 C에서 기초되어 쓰이는 것들이 많습니다. 그래서 오늘은 C에서 나오는 변수들에 대해 조금 알아보겠습니다.
C가 그냥 커피라면 Objective-C는 T.O.P라 이거죠 ㅋㅋㅋㅋㅋㅋㅋ
 

긴말 필요없고 본론으로 들어가죠 ㅋㅋㅋ


# 변수가 뭐냐?

변수라는 것은 자료를 담아 둘 수 있는 기억공간이라고 생각하시면 됩니다.
컴퓨터는 무슨 일을 처리하기 전에 주기억장치, 즉, RAM에 정보를 올려놓고 맞춰진 스케줄 대로 CPU에서 연산처리 하게 됩니다.(물론 상세히는 좀 더 복잡하고 다를 수 있지만 대충 그렇다고 생각해 두세요 ㅎ)
CPU는 기억력이 없고 계산만 하다보니 처리해야 할 정보들을 기억해줄 녀석이 필요한데, RAM이 그 역할을 하는것입니다.
그리고 프로그래머가 RAM에 정보를 기억할 공간을 할당해 준 것이 변수입니다.
이제 우리는 변수를 하나의 박스라고 생각해 봅시다.

일단 주제와는 약간 벗어나지만 박스는 일단 우리가 사용하던 사용하지 않던간에 항상 공간을 차지하기 마련입니다.
그렇기 때문에 우리는 박스를 필요 이상으로 많이 만들거나 필요 이하로 너무 적게 만들지 말아야 합니다... 뭐 일단 잊어두세요 ㅎㅎㅎ 아직은 그리 중요한 내용이 아니지만, 메모리를 많이 낭비하지 않으려면 변수는 최대한 많이 쓰지 않는게 좋겠죠?ㅎ

서론이 길었습니다..

그런데 문제는 박스의 종류가 몇 가지 있다는 것입니다.
사과박스에는 사과를 담아야 하고(돈은 담지 말아야죠... 그쵸?ㅋㅋㅋ), 귤박스에는 귤을 넣어야 합니다.
겉모양과 내용물이 다르면 컴퓨터랑 사람이 모두 헷갈리잖아요^^

즉, 실수형 변수에는 실수가, 정수형 변수에는 정수가 들어가야 하는 것입니다.
C에서 많이 쓰이는 몇 가지 자료형에 대해 알아봅시다.

# 자료형의 종류

 변수형 크기(32bit 프로세서) 자료형 출력 형식 지정자 
 int 4byte  정수  %d
 float 4byte  실수  %f 
 double  8byte  실수  %lf 
 char 1byte  문자  %c

위의 표에 적혀있는 자료형의 크기는 상자의 크기로 생각하시면 될 것 같습니다. 즉, 메모리에 하나의 자료가 저장될 때 할당되는 메모리 크기입니다.
float과 double은 같은 실수형 표현인데 왜 크기가 다른지 궁금하실 텐데요, 간단합니다.
더 많은 메모리를 할당하면 더 큰 수를 표현할 수 있기 때문입니다.
지금 표에는 각 변수들이 표현할 수 있는 숫자의 한계를 적어놓지 않았는데, C관련 책자 보시면 나옵니다. 굳이 여기서는 깊고 심오하게 들어가지 않겠습니다 ㅋㅋ
메모리가 차지하는 크기가 클 수록 표현할 수 있는 숫자의 크기가 증가한다는 것을 기억하시면 되구요. 또한 변수의 크기가 클수록 연산하는데 시간이 더 오래걸립니다(보통 평균적으로..^^). 하지만, 우리는 지금 일단은 그런건 제껴둡시다! 나중에 다 알아서 깨닫게 되실테니..ㅎㅎ
참고로 정수는 우리가 말하는... 숫자, 즉 -3, -2, -1, 0, 1, 2, 3 등등등 요런 숫자들을 말하구요, 실수는 우리가 흔히 말하는 소수... 0.1, -94.0342, 5.34, 3.14 등등 이런 숫자들을 말합니다~
출력형식 지정자는 대표적인 것들만 적어 두었습니다. NSLog에 찍을 때 쓰는거 말예요 ㅎㅎ
물론 NSLog에만 쓰이지는 않습니다^^
더 자세히 알아보고 싶으신 분들은 http://blog.naver.com/corea139/50038232196 를 참고하시길 바랍니다!!

자, 이제 그럼 무작정 한 번 실습해 봅시다~!

일단 새로운 프로젝트를 생성해 줍시다~

 
그리고 아래와 같이 코드를 작성해 봅니다^^
코드 작성 위치는... 지난 번 포스팅을 참고하세요^^
main함수 안에 autorelease풀 안쪽에 작성하시면 됩니다~
함수가 뭐냐구요?ㅋㅋ
그냥 지난 번 포스팅 보고 눈치껏!!
제가 캡쳐를 잘못해가지고 못보여 드리는거 절대 아닙니다요(ㅠㅠ)ㅋㅋㅋㅋㅋㅋㅋㅋ
 


실행 결과 화면입니다.


설명을 하자면,
처음에 변수들을 주욱 선언해줍니다.
int는 자료형 val_integer는 그 변수(상자)의 이름입니다.
즉 정수를 담을 수 있는 상자 하나를 만든 거예요.
밑에도 똑같이 float을 담을 수 있는 상자를 만들거예요~ 이름은 val_float...
float은 더블과 차이를 두기 위해 실수 뒤에 f를 붙여줍니다. float에 담을 숫자라고 표현해 주는거죠~
자, 이해되셨나요? 그리고 등호를 붙이고 옆에 숫자를 쓴다는 것은 그 상자에 그것을 담아두고 싶다고 말하는 것입니다.

그렇게 해서 NSLog로 화면에 찍어보니 상자에 담긴 내용이 보입니다~
그런데 좀 이상한게 보이죠?
분명히 char (문자형, Character)는 %c로 표현한다고 했는데, %d로 찍어도 뭔가 나오네요~
char형에는 ASCII, 즉 아스키 코드에 해당하는 숫자가 들어가 있습니다...^^
그래서 C의 아스키 코드값에 해당하는 67이 출력되는겁니다.
그래서 지금 선언되어 있는 val_char를
val_char = var_char +1;
이라고 더해줘도 에러가 나지 않습니다.
또한 val_char = 99; 라고 대입해줘도 됩니다. 물론 %c로 출력해보면 ASCII코드 99에 해당하는 문자가 출력될 거예요~
반대로 정수형의 숫자를 문자로 찍어볼 수도 있습니다.
후우~

여기까지 이해가 되셨는지 모르겠습니다~
이해가 되지 않으시면 폭풍 댓글 질문 주세요~@_@

그리고 아래에 xxx_array[x] 라는 식으로 선언해준 변수도 보이시나요?
이것은 배열이라고 합니다.
배열은 나중에 좀 더 심도있게 포스팅 할텐데요~
여기서는 이런게 있다~ 라고 아시면 됩니다.

배열은 똑같은 자료형을 사용하는 상자들을 쭈욱~~~~~~ 붙여놓은 것이라고 생각하시면 됩니다. 무조건 동일형 자료들만 배열로 만들 수 있습니다~!
선언 방법은 자료형을 표기한 후 배열이름[칸수] 로 선언해 주시면 됩니다.
말로 설명하니 너무 어려우시죠?

간단히 int int_array[3] 이라고 선언하게 되면

 int_array[0] int_array[1]  int_array[2] 

이런식으로 변수들이 생기게 되는 겁니다.
배열의 숫자는 0부터 시작해요~ 헷갈리지 마세요~

배열을 사용하는 방법은 코드를 참고해 보세요 ㅎㅎ

물론 여기서 배열을 이해하지 못한다고 좌절할 필요 없습니다!
나중에 다시 배우면 돼요 ㅎ 배열 이해 안가시는 분들은 일단 배열은 패스하세요!

char형의 배열 맨 마지막을 보시면 \0 이라는 문자를 집어 넣어 놓은 것을 보실 수 있습니다.
char형의 배열은 문자 하나하나 따로 빼서 볼 수도 있지만, 길게 보면 하나의 문장으로 볼 수도 있기 때문에 여기서 이문장은 끝! 이라는 표시로 \0을 넣어주게 됩니다. \0은 null이라고 표현합니다. null이라는 것은 뭐... 없다.. 비었다.. 이런 뜻입니다. 일단 패스^^

그래서 char형 배열은 문장(string)으로 출력해 보고 싶으면 %s로 출력해 볼 수 있습니다.
이제 위에 코드들이 조금 이해가 가실까요?
잘 이해가 가지 않으시면 C 책 가지고 계신거 하나쯤 참고하며 보세요~^^
책만큼 많은 모든 내용을 담을수가 없네요 ㅎ 여기서는 꼭 필요한 내용만 콕 찝어서 말씀드리려고 해요~
물론... 잔소리와 잡소리와 부연설명 투성이지만...ㅋㅋㅋ

자, 그럼 변수안의 내용물을 조금 바꿔치기 해 보도록 할게요~!
변수에다가 다른 숫자들을 대입해 봅시다.
위에 작성하였던 코드 아래쪽에 추가적으로 작성해 주세요~!


변경 된 후에 찍히는 로그 입니다.


변수안에 다른 수를 대입해 주면 원래 있던 내용물은 없어지고 새로운 내용물이 채워지게 됩니다.
즉, 새로운 정보를 입력하면 지난 정보는 사라지고 새로운 정보가 입력되는 거죠^^

어떠신가요... 좀 이해가 되시나요?

후악후악 힘드네요 ㅋㅋㅋ

추가적으로 unsigned라는 녀석을 보게 되실텐데요.
이녀석은 부호를 사용하지 않겠다는 거예요. 즉, 정수에도 음의정수 양의정수가 있는데, 양의 정수만 사용하겠다는 의미입니다.
왜냐면 같은 메모리 4byte를 사용할 때, 양의 정수만 사용하면 더 큰 수까지 표현이 가능하기 때문에 사용하게 됩니다.
어쨋든 unsigned는 음이아닌 양의 수만 사용할 때 사용하시면 됩니다!
효율적인 사용을 위해서^^

으아~~~~~~
오늘은 이만해야 겠습니다.
머리가 아프시죠??ㅎ
근데 뭐 이것만 하면 C 1/3은 했다고 보시면 됩니다 ㅋㅋ
그만큼 뭐 별거 없어요~~~~~~~~~~
몇 번이고 보면서 생각해 보시기 바랍니다.

궁금하신 점은 폭풍 댓글 질문 해주세요^^

자, 그럼 다음번에 뵙도록 하겠습니다 ㅎ


by yagom

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

RSS Feed 받기  


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. hun 2012.04.05 16:23  댓글주소  수정/삭제  댓글쓰기

    아..마지막 쯤 한줄때문에 댓글을 안 달수가 없네요..

    폭풍 댓글 질문 ㅜㅜ 화이팅이에요!!^^

  2. 네모누리 2012.07.16 18:37  댓글주소  수정/삭제  댓글쓰기

    많은 도움이 되었습니다. 감사합니다

  3. 감사 2012.07.17 02:25  댓글주소  수정/삭제  댓글쓰기

    감사합니다 덕분에 공부 잘 되었어요

  4. 2012.07.31 14:12  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  5. chosamong 2012.08.24 20:33  댓글주소  수정/삭제  댓글쓰기

    여기도 촉풍 댓글
    폭 (폰에서 글쓰니 수정 어렵~)

    여기저기 캄사 <(__)>

  6. chosamong 2012.08.25 12:02  댓글주소  수정/삭제  댓글쓰기

    스트링형 선언과 쓰는 것은 없네요.
    게으른 학생 한번에 보고 시포서 ㅎ

    좀 무례한 댓글 용서를 ... OTL

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.27 00:57 신고  댓글주소  수정/삭제

      NSString *string = [[NSString alloc] initWithString:@"String입니다"];
      라고 사용하시면 되겠네용..ㅎㅎㅎ
      NSString *abc = @"abc";
      라고 사용하셔도 됩니다 ㅎㅎ

  7. leahtree 2012.11.20 02:07  댓글주소  수정/삭제  댓글쓰기

    아직도 변수라는 개념이 어플리케이션을 만들때 구체적으로 어떻게 쓰이는건지 이해가 되지 않습니다..ㅠ
    변수에대한 개념은 이해가 되는데요 어떻게 활용되는건지 감이 잡히지 않으니 답답해서 이렇게 글 남깁니다!

    정말 잘 읽고 있습니다! 감사해요 :)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.20 09:19 신고  댓글주소  수정/삭제

      음... 앞으로 하다보면 아주 쉴 새 없이 쓰게 되실테니 너무 걱정하지 않으셔도 될거예요^^
      아주 자연스럽게 체득하게 되실겁니다 ㅎ

  8. leahtree 2012.11.24 00:04  댓글주소  수정/삭제  댓글쓰기

    감사합니다 :)

  9. hyung 2012.11.29 09:23  댓글주소  수정/삭제  댓글쓰기

    개념 다시한번 정독중입니닷!

  10. 하이앟 2013.09.26 18:00  댓글주소  수정/삭제  댓글쓰기

    Integer can be converted to character 옆에 0 나와야 할 것 같은데 안나오네요.
    val_integer에 다른 숫자 넣어보니 거꾸로된 물음표가 나오네요.. 왜 이런거죠?ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.09.27 10:07 신고  댓글주소  수정/삭제

      int val_integer = 100;
      으로 변경하고 해보세요 ^^
      아마 알파벳 d가 출력될 것 같습니다 :)
      혹은 printf 함수 안에 오타가 있는지 잘 확인해 보셔요 ㅎ

    • 하이앟 2013.09.29 00:24  댓글주소  수정/삭제

      제가 터무니없이 작은 수를 넣어서 그렇게 됐었나봅니다. ㅎ
      답변 감사요~:)

  11. 조용연 2014.04.25 15:22  댓글주소  수정/삭제  댓글쓰기

    블로그에 좋은 내용이 많네요.
    잘 보고 있습니다~!!

  12. 공유결합 2017.01.14 13:47  댓글주소  수정/삭제  댓글쓰기

    NSLog 뒤에 @는 왜쓰는건가요?


오늘의 주제


1. Document 살펴보기


열한 번째 시간입니다.

지난 번에는 탭바를 기반으로 한 어플 하나를 만들어 보았습니다~
이 당분간은 이 탭바를 가지고 진행할 예정이오니 프로젝트를 지우지 마시고 계속 따라와 주세요~!ㅎㅎ
이제 슬슬 재미좀 붙이고 계신지 모르겠네요^^

오늘은 개발에 꼭 필요한 문서를 보는 방법을 알려드리려 합니다~
물고기를 잡아드리는 것이 아니라 잡는 법을 좀 알려드려야겠죠?ㅎ

이 Document에는 개발에 필요한 첫 밑거름 부터 심오한 내용까지 모두 담겨져 있습니다.
이 개발 문서만 가지고도 충분히 개발할 만한 강력한 무기입니다.
물론 영어라서 조금의 힘든점은 있지만, 그래도 사용할 줄 알아야 합니다!
서론이 길었네요 ㅎ
시작합니다~!

# 개발문서

개발 문서는 요로코롬 생겼습니다~!ㅎ


그럼 이제 직접 개발문서를 열어보도록 할까요?
열 수 있는 방법은 많습니다~
일단 첫 번째로, Xcode 메뉴에서 Help - Documentation and API Reference 를 클릭하는 방법!
두 번째로, 단축키를 사용하는 방법 : Shift + Alt + Command + /


세 번째로, 궁금한 객체를 Alt + Click 하는 방법
알고 싶은 객체 위에 Alt + Click하면 그에 대한 도움말이 나옵니다.
거기서 Reference를 누르면 개발문서로 이동합니다.



네 번째로, Quick Help창에서 눌러보는 방법
궁금한 객체로 커서를 옮기면 Quick Help창에 간단한 설명이 나옵니다. 거기서 Reference를 누르면 개발문서로 이동합니다~



자... 그래서 일단 UIImage (이미지 객체)의 Reference로 이동해 보았습니다.
간단히 살펴보자면, 
이 객체는 NSObject에서 상속받았고 (상속은 다음에 설명해 드릴게요^^)
NSCoding과 NSObject를 따르며
UIKit프레임워크를 사용하며
iOS 2.0이상에서 사용가능 한 객체이고,
UIImage.h라는 파일안에 선언이 되어있으며
관련있는 샘플코드로는 BubbleLevel, PhotoScroller... 등이 있네요^^
(이 샘플 코드들을 잘 해석하고 이용하기만 해도 엄청난 내공이 쌓이실거예요 ㅎㅎ)


Overview에서는 이 객체에 대한 간략한 개요가 나옵니다. 대충 읽어보시면 이 객체의 성격과 역할, 이용용도 등을 파악하실 수 있을거예요.
다양한 얘기들이 나오네요. 
이미지와 메모리 관리에 대한 이야기들, 지원하는 이미지 포멧 등등.
정말 많은 정보들이 수록되어 있죠?ㅎ
또 쭉 내려가 볼까요?


Task에는 이 이미지에서 이용 가능한 메소드(함수)들이 쭈욱 열거되어 있습니다.
이 이미지 객체를 구워 삶을 수 있는 방법들이 나와요.
이미지를 캐시하는 방법, 새로운 이미지를 만드는 방법, 이미지를 초기화 하는 방법, 이미지의 속성을 변경 할 수 있는 방법 등등 정말 많죠?ㅎ
이 많은 것들을 제가 일일히 다 알려드릴 수 없기 때문에 궁금한 내용이 있으면 이렇게 개발 문서를 찾아 보셔야 하는거예요 ㅎ


그런데 뭐가 뭔지 모르시겠죠?
파란색으로 써있으면서 뒤에 콜론( : )이 붙어 있는 녀석들은 메소드 입니다. C언어 에서 함수라고 생각하시면 될거예요. 더 쉽게 설명하자면 속성값이 아니라 우리가 명령을 내리면 어떠한 일을 수행하는 녀석들입니다.
또, 금색 글씨들과 빨간 글씨들이 보이죠?ㅎ
금색으로 property라고 써있는 녀석들은 우리가 속성 값을 바꿔 줄 수 있음을 의미합니다. 이 녀석들은 메소드가 아니고 하나의 변수라고 생각하시면 됩니다. (뒤에 콜론이 안 붙어있죠? 물론 메소드 중에 콜론이 없는 메소드 들도 많습니다^^)
또한 빨간색으로 쓰인 것은 왠지 빨간색이라 깨름칙 하죠?ㅋㅋㅋ
맞습니다. 이녀석들은 Deprecate 된 녀석들입니다. 
Deprecated in iOS 5.0 이라고 써 있으면 iOS 5.0에서 사용이 금지되어 있다 라는 뜻으로 이해하시면 되겠습니다.
또는 Available iOS 2.0 through iOS 3.1 등의 표기가 있으면 iOS 2.0 ~ iOS 3.1 에서만 사용 가능하다는 의미겠죠?ㅎ
이렇게 버전마다 사용할 수 없는 메소드들이 있기 때문에 문서를 보면서 혹시 하위버전에서 지원 가능한 것일까 아닐까를 체크해 주시는 것도 필요합니다.
만약 지원하지 않는 메소드를 사용하게 되면 폰에서 소위 말하는 튕김 현상이 발생하고, 또한 애플의 검수과정 중에 reject 즉, 등록 거부를 당할 수 있습니다.^^
 


또 이렇게 클래스 메소드, 인스턴스 메소드 등에 대한 설명들도 쭈욱 나옵니다.
클래스 메소드, 인스턴스 메소드가 뭐냐구요?
흐음... 일단은 그런게 있다고 쳐 둡시다 ㅎㅎ
다음에 필요하면 그 때 포스팅 하도록 할게요^^
포스팅 중에는 최소한의 필요한 코드로만 진행하려고 합니다~
좀 더 필요한 정보나 코드, 프로그래밍 기법이 필요하시면 댓글로 문의주시거나, 블로그에 Objective-C 포스팅을 참조하시길 바랍니다^^ 


자, 그럼 다른 것들도 찾아볼까요?
지난 번에 포스팅 하였던 탭바 컨트롤러에 대해 찾아봅시다.
좌측 상단에 검색창에 UITabBarController라고 입력해 봅시다. 물론 대소문자는 구별하지 않아요..ㅎㅎ
여기서도 많은 정보들이 나오네요. 기본적으로 나오는 내용들을 한 번 훑어 보세요~
조금 느낌이 오시나요?ㅎ


그림까지 첨부되어 개요가 나오고요~


개념 이해를 위한 상세한 설명까지 들어가 있네요.
정말 원더풀 하지 않습니까?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
사실... 기초적인 지식만 가지고 있다면 정말 이 문서만 가지고도 개발 할 수 있습니다!


여기도 Task와 Property, Method 들이 주욱 나옵니다~



이런 식으로 문서를 한 번 훑어 보시면 됩니다.
궁금한 녀석들이 있으면 샘플 코드도 내려 받아 볼 수 있으니 얼마나 좋습니까?
비단 클래스 정보 뿐만이 아니라 개발 가이드, 시스템 가이드, 툴 가이드, 샘플코드 등등 정말 무궁무진한 정보의 바다입니다.
사실 문서 보는 법만 자세히 다뤄도 챕터 몇개는 할애할 수 있을 정도로 정말 필수 불가결한 녀석이 이 개발문서 입니다.

궁금한 것이 있다면? 구글을 찾아보기 전에 우선 개발문서 먼저..!! ^^
구글에서 무엇인가 찾았는데 사람들이 답변에 떡하니 ModalView에 대해 알아보세요~ 라고 던져주기만 한다면?
뒤도 돌아보지 말고 개발문서로..!!  ^^
무슨 말인지 아시겠죠?
스스로 찾는 힘을 기르는 것은 많은 지식을 아는 것 보다 훨씬 중요합니다.

그럼 다음 번에 또 알찬 내용으로 돌아오겠습니다~
필요한 내용이 있다면 댓글 남겨주세요^^

by yagom

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

RSS Feed 받기  


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. .a, 2012.01.31 18:47  댓글주소  수정/삭제  댓글쓰기

    잘 보고 있습니다
    감사합니다!!!

  2. 옥탑방원숭이S 2012.03.03 21:14  댓글주소  수정/삭제  댓글쓰기

    진짜 개발문서만 잘 활용해도 머릿속의 아이디어들을
    멋지게 구현할 수 있을 것 같네요 ^_^
    개발문서는 정말 잘 쓸 줄 알아야겠어요~~ ㅋ
    개발자분들과 얘기해봐도 문서들이랑 구글링 잘 하라고
    하던데 딱 필요한 내용이었네요^_^
    잘 봤습니다 !!

  3. Berry 2012.05.02 23:19  댓글주소  수정/삭제  댓글쓰기

    개발문서와 관련된 포스팅이 역시 없을리가 없었네요
    왜 11번 포스팅만 보지 않았을까요 ...
    이제라도 봐서 다행입니다 .. !!

  4. plateblack 2012.05.08 03:17  댓글주소  수정/삭제  댓글쓰기

    영어 공부도 되고 일석이조네요^-^
    아직 Objective-C에 대해서 잘 몰라서 특정한 용어들이 어렵기만 하지만...
    익숙해지겠죠? 하하하;;

  5. SODA 2012.06.27 16:47  댓글주소  수정/삭제  댓글쓰기

    덕분에 너무 공부 잘하고 있습니다. 포스트 정말 감사드리고 항상 행복하세요.^______^

  6. Sio 2012.07.16 16:33  댓글주소  수정/삭제  댓글쓰기

    잘보고갑니다~~!!ㅎㅎ
    으~ 영어 힘들어서 좀더 쉽게쉽게 할려고 구글링만 했었는데....
    개발문서나 구굴링이나 영어 천지니 이젠 좀더 개발문서와 친해지도록 해봐야 겠네요 ㅎㅎㅎ

  7. neoaero 2012.07.26 10:49  댓글주소  수정/삭제  댓글쓰기

    전 가끔 개발문서 보는데..기초가 부족해서 그런지..아직까진...이해도가 떨어져요..그래서..일단..지금은 기초를 쌓는데 노력하고 있습니다.. 개발 문서 너무 방대해요..^^

  8. chosamong 2012.08.24 14:27  댓글주소  수정/삭제  댓글쓰기

    도큐먼트 ~ ㅠ.ㅠ
    언어의 장벽이 OTL
    친해지도록 노력해야죠 : )

    감사의 인사를 꾸벅 <(__)>

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 14:44 신고  댓글주소  수정/삭제

      자주 보다보면 언어의 장벽을 넘을 수 있습니다.
      대충 느낌 팍팍 올 날이 있을거예요 ㅎㅎㅎ
      물론 영어실력도 늘면 더 좋겠지만요 :)

  9. kimsdn 2012.10.19 14:13  댓글주소  수정/삭제  댓글쓰기

    거의 매일 오고있습니다..
    다시 강의하는날까지 파이팅입니다.

  10. 딴또 2013.03.07 08:40  댓글주소  수정/삭제  댓글쓰기

    열심히 공부하겠습니다. 많이 가르쳐주세요.

  11. Hide 2013.11.10 14:29  댓글주소  수정/삭제  댓글쓰기

    감사합니다.

  12. 야곰님짜앙 2018.11.22 15:13  댓글주소  수정/삭제  댓글쓰기

    도움많이 되었어요


오늘의 주제


1. 코드에 주석쓰기

두 번째 시간입니다.

안녕하세요! 야곰입니다.ㅎㅎ


# 주석

주석이 무엇인가 궁금하시죠?ㅎ
다른 블로그나 책에서 한 챕터를 잡고 주석을 설명하는 경우는 거의 없습니다만..
주석은 생각 외로 굉장히 중요한 역할을 하며, 프로그래밍의 첫 습관을 들일때 매우 중요한 녀석이라고 생각합니다. 물론 실무에서도 굉장히 중요합니다.
그래서 주석은 한 챕터로 잡고 설명하려 합니다!!
오늘 포스팅은 짧습니다만, 꼭 기억해 두셔야 할 포스팅입니다^^*

주석.. 코멘트.. 같은 말입니다!
주석은 코드에 아무런 영향을 미치지 않지만, 이 코드가 어떤 코드인지, 무슨 역할을 하는 것인지에 대한 설명을 적어놓는 메모 같은 것입니다.

그런데 이게 왜 중요하냐구요?
정말 간단한 프로그램이라면 굳이 필요 없을지도 모르지만, 나중에 백줄, 천줄, 만줄 ... 길어지는 프로그램이라면 내가 짜 놓고도 이 부분이 어떤 부분이었는지 기억하지 못하는 경우가 허다합니다 ㅋㅋㅋ
나는 기억력이 좋아서 아닐거라구요?
훗...!절대 그렇지 않습니다!
십수년 프로그래밍 한 고수분들도 꼭 적어두는 것이 주석입니다.
정말 코드 짜기도 바빠 죽겠는데 그런거 적을 시간이 어디있냐구요?
그래도 해야 합니다!!
나중에 현업에 가서 협업을 할때에도 굉장히 중요합니다.
내가 짜놓은 코드는 내가 해석하기 쉬울지 몰라도 다른 사람이 같이 일하면서 내 코드를 볼 때, 이해가 가지 않으면 일이 그만큼 늦어지고 심지어는 프로젝트가 망가지기도 하니까요.
제가 여기서 중요하다고 백만번 말해도 모자랄 만큼, 주석을 다는 것은 정말 중요한 습관입니다.
처음부터 주석을 다는 습관을 들여 놓으셔야지 나중에 후회하지 않고, 힘도 덜 드실것을 저는 장담합니다!!

이렇게 말하니까 주석 다는 것이 정말 어려운 것 같지만, 사실은 정말 간단합니다!
한 번 보시죠 ㅎㅎ

자... 화면에 보이는 저 녹색 글씨들 보이시죠? 저것들이 모두 주석입니다.
프로그램을 실행시켰을 때는 전혀 티가 나지 않지만, 작업하는 프로그래머는 보게 되는 저것이 주석입니다.
컴파일 할때 컴파일러가 주석은 모두 제외하고 컴파일 하게 됩니다.


위의 코드 실행 결과 화면입니다.
녹색으로 주석처리된 녀석들은 화면에 나오지 않죠???
코드 해석이 어려우시면 지난번 포스팅을 다시 한 번 보고 오세요^^


자... 조금 수정해서 보여드릴게요~!
어떻게 뭐가 달라졌는지 비교해 가면서 보세요^^


 결과 화면입니다~!

 
로그에 찍힌겁 보시면 깨알같은 팁도 있죠?ㅎㅎㅎ
여기에 직접 쓰지 않을테니 한 번 사용해 보세요^^ 


중요한 주석 처리하는 방법은 간단합니다!


// 주석......
이런식으로 주석을 작성하게 되면 한 줄이 주석처리 됩니다.
즉, 한 줄을 자신이 쓰고 싶은 말들을 써놓을 수 있죠.


또한, 
/* 주석...
여러줄
쓸 수 있는
주석... */ 


이런식으로 처리를 하게 되면 여러줄을 주석처리 할 수 있습니다.

참 쉽죠잉!?

위에 예시로 작성한 코드에서는 주석을 위나 아래에 달아놓았는데, 코드 바로 옆에 붙여 써도 무방합니다~
무슨말인지 잘 이해가 안가시면 직접 해보세요 ㅎㅎ
다시 한 번 말씀드리지만, 컴퓨터 안고장납니다잉 ㅋㅋ 폭발 안합니다잉 ㅋㅋㅋ
주석 다는 스타일을 같이 협업하는 사람끼리 정하거나, 자신만의 스타일로 작성해도 됩니다. 딱히 정해진 틀은 없어요^^ 

앞으로 제가 포스팅을 할 때 마다 주석을 일일히 달며 하지는 못할 거예요.
하지만, 여러분은 제 포스팅을 보며 공부 하실때마다 코드에 꼭 주석을 달아주세요!!
부탁드립니다~!
이것은 정말 중요한 습관임을 다시 말씀드립니다!
그래서 일부러 한 챕터를 내서 포스팅을 한거예요~

그럼 긴 잔소리는 여기까지만 하고 다음 번에 뵙도록 해요^^*

뿅!


by yagom

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

RSS Feed 받기  


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 사슴 2014.01.26 10:42  댓글주소  수정/삭제  댓글쓰기

    우와 정말 감사합니다. 도움이 많이 되네요!!


오늘의 주제


1. Hello, World 콘솔에 찍어보기


첫 번째 시간입니다.

안녕하세요! 야곰입니다.ㅎㅎ
iOS 개발 포스팅을 하다보니 조금 더 상세히 알고 싶거나, 기초를 좀 더 다지고 싶으신 분들이 있을 것 같아 이렇게 Objective-C 언어도 포스팅을 시작합니다.
사실 C 또는 C++만 잘 알고 있어도 iOS개발에 큰 무리는 없습니다.
물론 다른 언어를 써 보신분들도 마찬가지 일거구요.
절차지향적인 언어를 쓰던 분들은 헷갈리는 부분들이 있을텐데, 그것은 iOS 포스팅 중간중간 설명을 넣구요~
뭐, 여하튼!
절차지향 언어인 C언어를 하니 객체지향 언어인 Objective-C를 한 번 해볼까 합니다.
물론 C++, C#, JAVA 등등 많은 언어들이 있지만!
여기는 iOS 개발부터 시작한 블로그니깐욬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
별다른 이유 없구요~ 한 번 해봅니다.
혹여나 필요한 다른 언어 있으시면 댓글 남겨주세요^^
잡소리 그만두고 이제 시작하도록 하겠습니다 ㅎㅎㅎ


# Hello, World !!
자, Objective-C 컴파일을 위하여 Xcode를 설치해 주세요~
 Xcode 설치 방법은 제 블로그 포스팅을 참고하시면 됩니다.

iOS개발하기 #1. 개발준비(1)  에서 '# Xcode설치' 를 참고하시면 되겠습니다^^


Xcode를 설치한 후 첫 실행화면입니다. 
Create a new Xcode project 를 선택해 줍니다.


여러 템플릿 중에 Mac OS X 템플릿 중 Application탭의 Command Line Tool을 선택하고 Next


Product Name을 MyFirstC로 지정해 주었습니다. 여러분들이 원하는 프로젝트명을 넣어주세요..^^
프로젝트는 하나의 프로그램이 완성되기 위한 단위라고 생각하시면 되겠습니다.
Type은 Foundation으로 지정해 줍니다.
Next를 누르시고 저장을 위한 위치를 지정해 주세요.

자, 프로젝트가 생성이 되었습니다.
대책없이 그냥 실행시켜 봅시다 ㅋㅋㅋ
화면 좌측 상단에 보시면 Run버튼이 있는데 클릭해 봅시다. 또는 단축키 커맨드+R입니다.


실행 결과 입니다.
뭔가 뿅 튀어나올 줄 알았는데 별거 없죠..?ㅋㅋㅋ
예.. 좀 시시하긴 합니다 ㅋㅋㅋ
화면 하단에 새로 올라온 창이 있는데, 디버그 영역입니다. 거기서 로그가 쫙 찍혀 나오는 곳이 디버그 콘솔입니다. 디버그 콘솔을 보면 뭐라뭐라 막 써있는데, 거기서 잠깐 보니 Hello, World! 라고 찍혀있는게 보입니다 ㅋㅋ
와우~
콘솔은... 음... 뭐 도스창, 아니면 터미널 등등 뭐 다 같은 개념으로 보시면 될거예요~
아! 디버그창이 제것과 같이 생기지 않았다면 화면 확대해서 잘 보세요 ㅋㅋ
제 디버그 콘솔 오른쪽 위에 보면 보기 옵션 버튼들이 있습니다.
두 개의 창이 나오는 가운데 녀석을 선택해 주세요~


근데 콘솔에서 우리는 Hello, World!만 보고 싶은데 시스템과 프로젝트 로그까지 찍혀나오니 어지럽지요?ㅎㅎ
그래서 우리가 보고싶은것만 보도록 합시다.
디버그 콘솔 왼쪽 위쪽에 All Output을 Target Output으로 변경해 줍니다.


그러고 나면 원하는 Hello, World!만 보여요 ㅎㅎㅎ


Xcode화면 좌측 파일 네비게션 영역에서 main.c파일을 클릭해 봅니다.


코드를 보면 NSLog(@"Hello, World!"); 이라고 작성되어 있을 텐데요~
아래 화면처럼 더 타이핑 해주고 실행해 봅시다.
아 그리고 줄마다 맨 끝에 붙는 것은 세미콜론 (;) 입니다.
우리가 글에서 쓰는 마침표라고 생각하시면 될거 같아요~
그렇다고 무조건 쓰는건 아니지만 대부분 코드안에서 줄이 끝날때 찍어주셔야 할거예요~


실행 결과 화면입니다.
별거없죠?ㅎㅎ 


  오늘은 간단히 콘솔화면에 출력하는거 하면서 놀아보았습니다 ㅎㅎ
그런데 화면에 보이는 초록색 글씨는 뭘까요?
하나도 안중요해 보여도, 무지하게 중요한 녀석중에 하나라고 할 수 있기에, 다음 번에는 그녀석에 대해 간략히 알아보도록 할게요~ 
다음번에 뵈어요^^* 

by yagom

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

RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. 컴맹 2012.09.25 07:43  댓글주소  수정/삭제  댓글쓰기

    아~ 나머지 강의도 이렇게 쉬우면 얼마나 좋을까~~~~ㅎㅎ
    아이폰 어플만들기 위해서, XCode를 배우다보니 Object C문법을 좀더 잘알고 있어야될것같아요.ㅠㅠ
    좋은 강의 잘보고 갑니다.~~^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:53 신고  댓글주소  수정/삭제

      ㅎㅎ Objective-C를 제대로 하려면 머리 많이 아파지죠~
      그래도 정말 iOS 완벽하게 다루고 싶다면 Objective-C도 마스터 해봐야겠죠?ㅎ

  2. Favicon of http://www.facebook.com/suyongchoi7972 BlogIcon 합본취리42 2012.09.28 00:19  댓글주소  수정/삭제  댓글쓰기

    C언어만 배웠는데ㅠㅠObjective C도 될지 모르겠네요ㅠㅠ
    네이버에서 찾아가 즐찾해서 배워봅니다..ㅎㅎ
    계속 배워볼께요ㅋㄷ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:55 신고  댓글주소  수정/삭제

      ㅎㅎ 제 블로그에 있는 내용들은 크게 어렵지 않으실 겁니다~
      블로그에 있는 내용들은 정말 많이 부족하기 때문에 다 보시고 더 알고싶은 내용들이 생기시면 Objective-C책을 한 권 사보시는 것도 나쁘지 않을 것 같습니다.
      즐겨찾기까지!!!
      영광입니다 ㅎㅎ 종종 들러주세요 :)

  3. ppange 2012.10.24 01:36  댓글주소  수정/삭제  댓글쓰기

    최고의 강의인것 같아요..
    왜 진작 이 사이트를 몰랐을까요..
    그동안 인터넷 강의에 허비한 돈을 생각하면 ㅠ.ㅠ
    Objective C 책 중에서 추천해 주실 만한 책이 있을까요?
    아직 책은 안사봤거든요.. ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.24 18:14 신고  댓글주소  수정/삭제

      안녕하세요 ppange님~!
      강의라고 하기도 부끄러운 것들이죠^^;
      찾아주시고 이렇게 덧글까지 남겨주시니 황공할 따름입니다.
      Objective-C책이 많은 편은 아니지만, 책 나름대로의 스타일이 있다보니 나에게 맞는 스타일의 책을 찾아보시는 것이 좋을 것 같습니다.
      직접 서점에 가셔서 책을 훑어보시는 것을 추천드립니다 :)
      두껍고 내용이 많다고 입문서로 좋은 것만은 아닙니다.
      처음에 쉽고 가볍게 접근 할 수 있으면서 알찬 내용을 가진 책을 골라서 시작하시고, 책마다 부족한 부분들은 어디든지 있으니 더 배우고픈 욕심이 생기면 다른 책들도 찾아보는 식으로 학습해 나가는게 좋지 않을까 싶습니다 ^^*
      큰 도움이 되어드리지 못해 죄송합니다 ㅠ

  4. 명상가 2013.01.05 14:59  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다~

    C 해보신분이면 별다른 어려움 없이 기분좋게 프로그래밍 할 수 있겠네요~

  5. 파워팰리스 2013.03.05 17:34  댓글주소  수정/삭제  댓글쓰기

    우와~! 최강 강좌입니다.
    책보다더 눈에 확들어와 너무 도움이 된 강좌였습니다.

    계속 안드로이드쪽으로 하다가 오늘부터 obj-c로 넘어왔는데요,
    자바랑은 좀 달라 모르는것이 많지만,
    하나 하나 저에게 큰 도움이 되네요 감사합니다.^_^