오늘의 주제

1. 네비게이션 컨트롤러 사용해 보기 


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

지난 번에는 개발지식의 보고 개발문서를 알아보았습니다.
한 번 쭈욱 둘러보셨는지요?
정말 중요한 것이니 몇 번을 보고, 다른 싸이트를 검색하고, 직접 계속 둘러보면서 꼭 몸으로 익히도록 하세요~!

자 그럼 오늘은 네비게이션 컨트롤러를 사용하여 화면 전환을 해 보도록 하겠습니다^^
스따뚜~~~~~~~~~~~~


# 네비게이션 컨트롤러란?


네비게이션 컨트롤러는 차에 달려있는 네비게이션이 아니구요...ㅎㅎ
아이폰 설정창에 들어가서 각각 셀을 누르면 다른 화면으로 스윽 밀려 들어가지요?
그리고 back버튼을 누르면 다시 돌아오구요...ㅎ
이게 바로 네비게이션 컨트롤러가 하는 일입니다~!

# 네비게이션 컨트롤러 붙여보기

뭐... 일단 실습 해 보도록 하죠 뭐 ㅎㅎㅎ
계속 사용중이던 프로젝트를 꺼내 봅시다~
MyFirstTabbedApp 아시죠?ㅋㅋㅋ
FirstViewController.h 파일로 가 봅시다.
커스텀 메소드를 만드는 것이 지금 하는 것보다 약간 더 간편한 방법도 있지만, 그거는 미리 캡쳐를 못했네요...ㅎㅎ
그건 요거 좀 알게 되면 추후에 알려드릴게요^^
무슨말인지 잘 모르시겠다구요? 일단 따라와 보세요 ㅋㅋ 시작합니다~
빨간 네모 따라오시면 돼요~


헤더파일 (***.h)에 작성 끝내셨으면 이제 구현파일 (***.m)으로 갑니다.
헤더파일이 뭐고 구현파일이 뭐냐구요?
음... 책으로 비유해 봅시다.ㅎ
책 첫장에 목차랑 서문이 있고 뒤에 가면 본문과 내용이 있죠?
헤더파일은 목차랑 서문이라고 생각하시고 구현파일은 본문이라고 생각합시다.
헤더에서 이 클래스는 어떤어떤 기능을 한다. 어떠어떠한 메소드와 어떤 변수들이 있다.. 라고 써놓고, 구현파일에 와서 그에 대한 상세한 기술을 하는 거예요. 대충 감이 오시나요?ㅎㅎ

자, 구현파일에도 요대로 써 봅시다~
네비게이션 컨트롤러에서 다음 화면으로 넘어갈 때는 뷰 컨트롤러를 푸쉬 해 줍니다. 반대로 나올때는 팝 합니다.
이는 메모리를 생각해 보면 알 수 있는 용어인데요, 메모리 안에다가 새로운 어떤 녀석을 집어 넣어줘야 하니까 메모리 안으로 푸쉬 해주고~
필요없어져서 빼버릴땐 메모리에서 팝! 하고 꺼내는거죠 ㅋㅋㅋ
그래서 지금 밑에 보시면 pushViewController 가 보이시죠?
Objective-C는 이렇게 메소드명이 실제언어와 흡사하고 직관적인 것이 특징이자 매력입니다.ㅎㅎㅎ 메소드 이름만 봐도 대충 뭐하는 놈인지 감이 오잖아요 ㅎㅎㅎ


자, 일단 여기로 오기 전에 헤더파일과 구현파일을 미리 저장 해 줍시다. 헤더파일에서도 커맨드+s로 저장해 주시고, 구현파일에서도 커맨드+s로 저장 해 줍시다.
자 그리고 이제 xib파일로 와 봅시다.
그리고 Round Rect Button 하나를 쭈욱 끌어와서 넣어주구요~
이쁘게 위치도 잡아주고, Title을 달아줍니다 ㅎㅎ Title은 사실 넣어줘도 안넣어줘도 그만~ㅋㅋㅋ


자 이제 아래 그림에서 보듯이 버튼을 마우스 오른쪽 클릭하면서 File's Owner로 쭈욱 끌어당겨서 파란색으로 표시가 되면 놓아줍니다.
혹은 컨트롤키를 누른 상태로 마우스 왼쪽 버튼을 누른 상태로 드래그 앤 드롭 해 주셔도 됩니다.
그러고 나서 검은색 선택 박스가 나오면 잘 하신겁니다. 또 아래그림 참조 하세요^^


이런 검은색 박스가 새초롬 하게 뜨면 성공하신 겁니다. 물론 처음 연결하면 앞에 동그라미는 안생겨 있어요^^
자 그럼 이제 우리가 미리 헤더파일에 선언해 주었던 메소드 goToSecondViewController를 클릭해 줍니다!!
그럼 어디선가 파란것이 반짝반짝 할거예요~ㅎㅎㅎ
혹시 모르니깐 다시 한 번 해 보세요. 요 밑에서처럼 동그라미로 체크가 되어있는지. 그럼 잘 연결이 된 거예요~


우리는 지금 FirstViewController에 버튼을 하나 추가하고 네비게이션 컨트롤러 관련 메소드를 추가해 준겁니다. 그러니깐 FirstViewController의 인스턴스가 네비게이션 컨트롤러 안에서 작동하게 해야 합니다.
잘 이해가 안가시죠?ㅎㅎ
네비게이션 컨트롤러는 한 개 또는 복수 개의 뷰 컨트롤러 들을 자신이 컨트롤 하는 방식입니다.
자신의 실체는 없지만 그 뷰 컨트롤러들을 넣었다 뺏다 할 수 있는 녀석이죠...
지금 당장은 잘 이해가 안가지만 일단 한 번 오늘거를 만들어 봅시다.
궁금증이 폭발하시는 분은 개발문서에서 UINavigationController와 그에 관련된 것들을 쭈욱 읽어보시는 것도 좋을 것 같네요^^

자, 그럼 이제 마지막 관문~
AppDelegate.m으로 옵니다.
FirstViewController의 인스턴스가 네비게이션 컨트롤러 안으로 들어가야 한다고 했죠? (인스턴스 이해 안가시면 앞에가서 다시 읽고오세요...ㅎ)
그러기 위해서는 새로운 네비게이션 컨트롤러를 하나 만들어 줍니다.(위의 빨간네모) 생성할 때 보면 initWithRootViewController 라는 곳 안에 viewController1이 들어가죠? init이라는 것은 초기화 한다는 것인데, 지금 새로 생성하는 네비게이션 컨트롤러의 최 상단 뷰컨트롤러가 viewController1인 네비게이션 컨트롤러로 초기화 하겠다. 라는 뜻으로 해석 되시나요?ㅎ
참고로 viewController1은 FirstViewController의 인스턴스입니다.

그리고 나서는 탭바컨트롤러에 원래 viewController1, viewController2, viewController3를 넣었었는데, firstViewNavi, viewController2, viewController3를 넣어줘 봅시다.


자! 그리고 이제 드디어 대망의 실행타임~~~~~~~~~~
커맨드+R로 실행해 봅니다 ㅎㅎㅎ


네비게이션 잘 동작하시나요?ㅎㅎㅎ
버튼 누르면 SecondView가 나오죠?
그리고 뒤로가기 버튼을 누르면 다시 돌아오구요 ㅎㅎㅎ


그리고 탭바도 이상없이 잘 동작합니다~
세번째로 갔다가 다시 첫번째로 돌아와도 네비게이션은 아직 잘 동작하고 있습니다 ㅎㅎㅎ 


후아~~~~~~~~~~~~~

네비게이션으로 화면 움직이기 한 번 해봤는데요, 어떠신가요?

아직 답답하고 99% 부족해 보이고 무슨말인지도 잘 모르겠고, 왜 이걸 하고 앉아있는지도 잘 모르실거예요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

그 기분 잘 알아요~ 하지만, 이건 정말 조금 후를 위한 준비과정이니까 조금만 따라와 주세요~

얼마 지나지 않아 요령껏 잘 하고 있는 자신의 모습을 보게 되실테니까요 ㅋㅋㅋ

그럼 저는 다음에 또 알찬 정보를 가지고 돌아오겠습니다~~

뿅!!


by yagom

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

RSS Feed 받기  
 


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

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 초보kay 2012.07.24 00:53  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다.
    하나씩 따라하니 정말 잘 되는군요.
    한가지 의문되는것은 FirstViewController의 헤더파일에는 네비게이션콘트롤러를 선언하지 않고도 FirstViewController.m파일에서 자기 클라스의 성원변수처럼 [self.navigationController pushViewController...]와 같이 호출하였는데 이것을 잘 모르겠습니다.
    딜리게이트구현파일에서 야곰님 말씀대로 FirstViewController의 인스턴스가 네비게이션안에 들어가게만 하면 구현파일의 임의의 함수에서도 네비게이션을 호출할수 있다는 의미인지 감이 잘 잡히지 않네요.

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

      네 맞습니다.
      어떤 뷰 컨트롤러의 상속 뷰 컨트롤러든간에 네비게이션 컨트롤러의 하위 뷰 컨트롤러가 되면 자신의 self.navigationController를 사용할 수 있습니다.
      그렇기 때문에 FirstViewController든 어떤 뷰 컨트롤러든 간에 네비게이션 컨트롤러의 종속 뷰 컨트롤러라면 자신의 뷰 컨트롤러에서 네비게이션 뷰 컨트롤러를 호출 할 수 있습니다.

      즉, 네비게이션 컨트롤러의 컨트롤 안에 들어가게 되면 그 뷰 컨트롤러의 navigationController 프로퍼티가 해당 네비게이션 컨트롤러로 설정이 되며, 만약 네비게이션 컨트롤러에 의해 컨트롤 되지 않고 있다면 해당 프로퍼티(navigationController)는 nil 값으로 설정되어있을 거예요 ㅎ

  3. 초보kay 2012.07.24 10:46  댓글주소  수정/삭제  댓글쓰기

    상세한 설명 정말 감사드립니다.

  4. neoaero 2012.07.26 11:47  댓글주소  수정/삭제  댓글쓰기

    저도 self.navigationController가 잘 이해되지 않는데..
    탭바의 첫번째 탭은 navigationController안에 firstviewController가 있기 때문에 firstviewcontroller를 navigationController에 넣으려고 하니깐 self.navigationController을 사용하는 건가요??

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

      FirstViewController가 navigationController의 컨트롤 하에 있기 때문에 자신을 관장하는 네비게이션 컨트롤러를 호출하는 것이 self.navigationController 프로퍼티 호출입니다..^^*

  5. CSM 2012.07.27 20:24  댓글주소  수정/삭제  댓글쓰기

    저는 조금 다른 문제에 봉착했는데요.... 실행만 시키면 Thread 1: EXC_BAD_ACCESS (code 블라블라) 이런식으로
    에러가 나서 실행이 안되네요 ㅜㅜ 도대체 어디가 문제인지 모르겠습니다;

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

      안녕하세요 CSM님~!
      BAD_ACCESS 가 나왔다면 메모리 참조를 잘못한 것입니다.

      alloc되지 않은 메모리 영역을 침범한다던가, 잘못된 메모리 영역을 침범하였거나... 가장 잦은 것은 이미 해제된 메모리에 접근하였을 때 발생합니다.

      잘못된 객체에 접근을 시도하였는지 확인해 보시기 바랍니다^^

  6. dobo 2012.07.30 17:54  댓글주소  수정/삭제  댓글쓰기

    강의 너무너무 고맙습니다!!
    근데..
    음.. 저는 왜.. 마지막 부분 ApleDelegate.m 에 두번째 UINavigation controller *firstViewnavi 에서 왜
    unused variable 'first ViewNavi'
    경고가 뜰까요??

    런은 되는데.. 버튼을 눌러도.. 이동하지 않습니다. ㅜㅠ

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

      안녕하세요 dobo님~!
      경고는 말 그대로 firstViewNavi라는 녀석이 만들거나 선언된 이후로 쓰이지 않았다는 뜻입니다.
      만들어놓고 쓰지 않았는지 확인해 보시면 됩니다 ^^*

  7. chosamong 2012.08.24 15:01  댓글주소  수정/삭제  댓글쓰기

    드뎌, 그렇게도 어렵던 네비게이션에 도전하게 되었습니다.

    역쉬나 첫번째 따라하기 실패~ ! ㅜ.ㅜ;
    전 아예 탭이 하나 더 생겨서 네개가 되는군요.

    현재 Xcode 4.4.1인데 코드 부분을 보니
    AppDelegate의 디폴트로 생성된 self.tabBarControll.viewControllers의 코딩이 좀 다르군요.

    다시 도전해 보겠습니다.

    진심으로 감사의 마음을 담아서
    꾸벅 <(__)>

  8. chosamong 2012.08.24 15:14  댓글주소  수정/삭제  댓글쓰기

    코드 문제가 아니었군요.
    다만 눈이 잠시 무르게 나빠졌을 뿐

    잘 되네요.
    이렇게도 되다니...

    탭바에서 세컨드 탭바로 넘어가 볼려구 그렇게 찾아도 자료가 없더니
    야곰님의 강의를 통해서 구현 되니 실로 감격 스럽습니다.

    여전히 첩첩 산중이지만...
    감사합니다.

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

      잘 해결되셨다니 다행입니다 ㅎㅎㅎ
      너무 빨리 소화하려다 보면 탈이나게 마련이니 천천히 되짚어 보면서 쉬엄쉬엄 가세요 :)

  9. snoopy 2012.09.04 17:15  댓글주소  수정/삭제  댓글쓰기

    self.tabBarController.viewControllers = [NSArray arrayWithObject:firstViewNavi, viewController2, viewController3, nil];

    위 부분에서 'Too manu arguments to method call, expected 1, have 4' 라는 에러 메시지가 나타나는데 어떻게 해야할까요?

  10. 에네스케이 2012.10.28 23:02  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 1강부터 잘 보고있습니다.

    다만 한가지 궁금한게 있는데 네비게이션 바를 추가한 뒤 화면이 눌려서 그런지 사각버튼이 제가 지정한 위치에 있질 않네요(텍스트 뷰를 가림).

    xib에서 직접 네비게이션바를 추가하고 소스코드와 연동하는(사실 이걸 몰라요ㅠㅠㅠ)게 아니라 소스코드에서 직접 네비게이션바를 추가해서 그런듯 한데 어떻게 해결해야 좋을까요?

  11. hyung 2012.11.13 14:59  댓글주소  수정/삭제  댓글쓰기

    음~ 네이게이션을 이렇게 쓰는 거였군요 ^^
    그런데 야곰님 xib파일을 하나더 만들지 않고 하나의 xib파일안에서 view를 여러개 만들어서 그 뷰끼리 화면이동은 못시키나요?
    스토리보드에서 modal로 끌어다 쓰는거 같이요

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

      스토리보드에서 모달로 불러쓰는것도 마찬가지로 뷰 컨트롤러를 여러개 생성하는 것으로 알고 있습니다.
      네비게이션 화면전환은 뷰 컨트롤러끼리만 가능합니다 :)

    • hyung 2012.11.13 16:07  댓글주소  수정/삭제

      그렇군요 ~~ 항상 친절한 답변 감사 드립니다

  12. Mins 2012.11.25 21:59  댓글주소  수정/삭제  댓글쓰기

    열씨미 보고 따라하면서 배우고 있습니다
    초보라 모르는거 투성인데요
    질문하나 드릴꼐요
    위의 소스대로 따라서 해봤는데 엉뚱한 결과가 나와서..도저히 뜯어봐도
    제 실력으론 도통 모르겠네요..
    일단 탭바아이콘이 네개가 나오구여 첫번째 탭바도 first 두번째 탭바도 first 네여..
    첫번째 탭바 누르면 검은색화면에 네비게이션바는 나옵니다.
    나머지탭바들을 클릭하면 화면은 다 나오는데 네비게이션바는 안나오고여
    FirstViewController.xib에서 만들었던 버튼도 먹통이고...
    천천히 보면서 다시 해봐도 결과는 그대로네여..멘붕옵니다..도와주세요
    참고로 저는 X-code 4.5 쓰고 있습니다..

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

      탭바는 세 개가 나오는게 정상이구요,

      AppDelegate 소스쪽에서 뭔가 헷갈린 부분이 있는 거 같습니다 ^^;
      코드를 한 번 다시 잘 살펴보시구요~

      첫 번째 탭바 외에는 네비게이션 컨트롤러가 없는 것이 정상입니다...^^

      버튼은 xib에서 오른쪽 버튼 눌렀을 때 메소드가 잘 연결 되어있는지 확이해 보시고 연결되어있지 않다면 다시 연결해 보시면 될 것 같습니다~

  13. jinbok 2013.01.24 17:23  댓글주소  수정/삭제  댓글쓰기

    잘배워 갑니다. ^^

  14. nadeko 2013.01.25 16:13  댓글주소  수정/삭제  댓글쓰기

    goToFirstViewController 부분의 FirstViewController의 인스턴스(?)를 선언할때 new가 아닌 alloc으로 처리하니 네비게이션으로 넘긴 페이지의 타이틀이 네비게이션바에 나타나질 안던데 무슨차이 일까요..?

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

      오이잉.. 왜그럴까요?
      alloc후에 initWithNibName도 해 주신건가요?

    • 철이 2013.07.19 11:22  댓글주소  수정/삭제

      저도 뒤늦게 공부하는 처지라 자세히는 설명하지 못하지만
      네비게이션바에 나타나지 않던 문제는 alloc으로 할당한 후에, init으로 초기화를 해주지 않으셔서 나타난 문제 같네요
      new를 alloc으로 바꾸신 코드 뒷줄에 init 추가하시면 될 것 같아요
      [[[SecondViewController alloc]init] autorelease];
      출처 [http://en.wikibooks.org/wiki/Cocoa_Programming/Objective-C_basics]

  15. 행복한 하루 2013.01.25 20:10  댓글주소  수정/삭제  댓글쓰기

    야곰님 안녕하세요 질문 좀 드릴게요

    FisrtViewController 클래스가 있고 SecondViewController클래스가 있는데요

    FisrtViewController 클래스에서 선언한 NSSttring *idVal; 가 있는데

    idVal에 NSString형 어떤 값이 있구요.

    그런데 SecondViewController 클래스에서
    FirstViewController 클래스에 있는 NSString *idVal에 접근해서
    idVal 값을 바꾸고 싶은데

    어떻게 해야 하는지요?

    제가 SecondViewController 클래스에서
    FisrtViewController *frt = [[FirstViewController alloc]init];
    frt.idVal = idStr; (idStr은 SecondViewController 클래스 에서 구한 NSString형 어떤 값 입니다.)

    이렇게 했는데 전혀 FirstViewController클래스에 있는 idVal
    값이 변화가 없네요 쩝

    제가 봐도 새로 메모리 할당하고 초기화 해버리니 전혀 다른 객채 생성인것 같아 맞지 않은것 같기한데요.

    어떻게 해야 할지 부탁드려요

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

      FirstViewController 에서 idVal이 property로 설정이 되어있는 상태이겠지요?

      property로 선언 한 후에 변경해주면 값이 변경되어 들어가게 되는데...

      요상요상하네용~_~

      혹시 탭바에 다른 두 컨트롤러가 있을 때 FirstViewController와 SecondViewController 간의 자료교환이 필요하신건가요?

      그렇다면 SecondViewController에서 [self tabBarContoroller] 였나..

      자신의 탭바 컨트롤러를 불러와서 그 컨트롤러의 viewControllers였나... 이 메소드로 뷰 컨트롤러 객체들을 담고있는 NSArray를 가져와서

      FirstViewController를 가져온 후 idVar를 가져와야겠군요..^^

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

    좋은 강의 감사합니다. 문법을 이해하기가 난해하군요. 하지만 열심히 공부해 보겠습니다.

  17. 새내기개발자 2013.04.02 18:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. ios시작한지 일주일된 새내기 입니다....;;
    안드로이드 개발인데 회사에서 ios개발하라고 해서 머리 아퍼죽겠습니다.
    그러던중 야곰님의 블로그를 발견하고 엄청난 도움을 얻고 있습니다.
    감사합니다.

    질문입니다만
    위의 설명은 소스코드에서 생성? 하잖아여

    전 xib파일에서 A-controller, B-controller 각각 네비게이션바를 붙이고 버튼을 삽입했습니다.

    uiNavigationController = [[UINavigationController alloc] initWithRootViewController:self.ViewController];
    요렇게 하면 제가만든 네비게이션바 위에 또 디폴트의 네비게이션바가 나오더라구여

    요점은 xib에서 마우스로 네비게이션바를 만든후 데리게이트등에 적용하는방법
    혹시 아시면 팁이라도 주심 감사하겠습니다.

    첫글남기면서 질문까지 드려 죄송합니다.
    그럼 부탁드립니당

    스토리보드는 초보자는 사용안하는게 좋다해서 xib로 했는데 어렵네요 ㅎ;;

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

      안녕하세요, 반갑습니다.

      음... 네비게이션 컨트롤러에 뷰 컨트롤러를 붙이면 자동으로 기본 네비게이션 바가 생성이 됩니다.

      만약에 커스텀 네비게이션바의 생성을 원하신다면, 제 포스팅 중에 커스텀 네비게이션바를 만드는 예제가 있으니 참고하시면 될 것 같습니다 :)

  18. 새내기개발자 2013.04.03 11:49  댓글주소  수정/삭제  댓글쓰기

    빠른 답변감사합니다.
    말씀하신 예제 보고 연구해 보겠습니다.^^

  19. 새내기개발자 2013.04.03 18:43  댓글주소  수정/삭제  댓글쓰기

    안녕하세요... 어찌어찌 완성했습니다^^

    감사합니다.

    질문계시판이 아닌데 자꾸 질문드려서 죄송합니다.
    혹시 textView의 개행 제한 하는법 아시나요?

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    위메소드 안에 아래 조건문을 넣어서 int값에다가 더해준다음 2가되면 리턴되게끔하면 될런지.. 근데 해보니 안되네여...
    if ([text isEqualToString:@"\n"]) {
    count++;
    }

    위의 코드에서 문제는 개행키를 눌렀을때 text에" " 아무값도 없다는거.....;;;;;;

    방향만 설며해주셔도 감사합니다.

    ios잼나요,ㅎㅎ

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

      relacementText를 체크하여 만약에 개행문자가 들어온다면 NO를 리턴하고, 그 외의 문자라면 return YES를 해 주시면 개행문자를 사용자가 입력하여도 입력되지 않습니다~ :)

  20. devtest 2013.07.10 13:12  댓글주소  수정/삭제  댓글쓰기

    autorelease의 역할이 뭐예요ㅜㅜ?
    autorelease를 쓰면 오류가 생기는데 없이 하려니까 제대로 출력이 안되네요.
    autorelease를 쓸때 빨간줄로 그어져서 decrements the receiver's retain count at the end of the current autorelease pool block. 라고 뜨는데 왜이럴까요?

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

      검색을 먼저 해 보심이 좋을 것 같습니다... ^^;

    • seungjae 2013.07.26 03:14  댓글주소  수정/삭제

      프로젝트 만드실때 처음에

      ARC 해제하셔야되요!

      이게 Auto-Resource-Correction인가 그거 체크해제하고 다시만드시면 될거에요. 리소스관리해주는 걸 우리가 직접하게 쓰는 걸로 일단 초기에 공부하고 아마 뒤에서는 다른파일로 하시겟죠?ㅋㅋ 맞는지 친절한 설명 부탁드립니다 야곰님

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

      네, 초반에 기초 개념 때문에 ARC를 사용하지 않았었습니다...^^
      이제는 앞으로는 큰 의미가 없어지겠군요...ㅎ

  21. 하이앟 2013.09.29 00:28  댓글주소  수정/삭제  댓글쓰기

    야곰님 질문이 있습니다. 위에도 비슷한 이야기가 있는 것 같은데..
    storyboard를 사용해서 FirstViewController 앞에 네비를 넣고 FirstViewController의 h와 m파일에 빨간박스에 있는 코드를 추가해서 그냥 해봤는데요..
    저도 역시 그냥 까만 화면이..xib파일이 없어서 그렇게 되는 것 같은데요.

    스토리보드 상에서 FirstViewController에 있는버튼에 control drag&drop을 해서
    SecondViewController로 segue를 연결하면 TabBarController와 뭐가 엉키는지(?자세힌 모르겠습니다.. 제가 초보자라) 버튼을 누르면 바로 튕기네요.. main.m에 에러있다면서. (..에러라기보단..그 초록색으로 breakpoint 라면서 나오는거요)

    이럴 때.. 스토리보드는 그대로 이용하면서 FirstViewController와 SecondViewController를 버튼으로 연결시킬 수 있는 방법을 혹시 알고계시면 좀 알려주실 수 있을까요? 부탁드립니다..!


오늘의 주제


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  댓글주소  수정/삭제  댓글쓰기

    지금은 절대 기억 못하는
    까마득한 옛날의 기억
    다시 돼 새겨 보네요

    실력이 마구 업그레이드 되면 바로 써먹을 가르침 ^^
    횡설수설 되네요

    캄사. 꾸우벅

C <4>. 실수 표현 방법

C 2011.12.04 13:00


오늘의 주제


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 받기  


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

'C' 카테고리의 다른 글

C <6>. 조건문(1), if, else  (6) 2011.12.11
C <5>. 반복문(1), 단항 연산자  (2) 2011.12.08
C <4>. 실수 표현 방법  (2) 2011.12.04
C <3>. 변수. Variable  (4) 2011.12.02
C <2>. 주석(Comment)  (6) 2011.11.29
C <1>. Hello, World!  (9) 2011.11.25
Posted by yagom

댓글을 달아 주세요

  1. Berry 2012.05.02 21:30  댓글주소  수정/삭제  댓글쓰기

    책에서만 한번 잠시 보고
    다양한 표현방법을 많이 섞어서 사용해보지 않았는데
    이번 포스팅으로 좀더 다양한 표현법을 상기해보고 갑니다 ㅎㅎ


오늘의 주제


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 뒤에 @는 왜쓰는건가요?

C <3>. 변수. Variable

C 2011.12.02 13:00


오늘의 주제


1. 변수 알아보기


세 번째 시간입니다.

안녕하세요! 야곰입니다.ㅎㅎ
벌써 세 번째 시간이네요 ㅎㅎㅎ
이번에는 C언어에서 가장 기초가 될 변수에 대해 알아보도록 하겠습니다~!
 

긴말 필요없고 본론으로 들어가죠 ㅋㅋㅋ


# 변수가 뭐냐?

변수라는 것은 자료를 담아 둘 수 있는 기억공간이라고 생각하시면 됩니다.
컴퓨터는 무슨 일을 처리하기 전에 주기억장치, 즉, 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 등등 이런 숫자들을 말합니다~
출력형식 지정자는 대표적인 것들만 적어 두었습니다. printf에 찍을 때 쓰는거 말예요 ㅎㅎ
물론 printf에만 쓰이지는 않습니다^^
더 자세히 알아보고 싶으신 분들은 http://blog.naver.com/corea139/50038232196 를 참고하시길 바랍니다!!

자, 이제 그럼 무작정 한 번 실습해 봅시다~!

일단 새로운 프로젝트를 생성해 줍시다~



그리고 아래와 같이 코드를 작성해 봅니다^^
코드 작성 위치는... 지난 번 포스팅을 참고하세요^^
main함수 안에 작성하시면 됩니다~
함수가 뭐냐구요?ㅋㅋ
그냥 지난 번 포스팅 보고 눈치껏!!
제가 캡쳐를 잘못해가지고 못보여 드리는거 절대 아닙니다요(ㅠㅠ)ㅋㅋㅋㅋㅋㅋㅋㅋ


실행 결과 화면입니다.


설명을 하자면,
처음에 변수들을 주욱 선언해줍니다.
int는 자료형 val_integer는 그 변수(상자)의 이름입니다.
즉 정수를 담을 수 있는 상자 하나를 만든 거예요.
밑에도 똑같이 float을 담을 수 있는 상자를 만들거예요~ 이름은 val_float...
float은 더블과 차이를 두기 위해 실수 뒤에 f를 붙여줍니다. float에 담을 숫자라고 표현해 주는거죠~
자, 이해되셨나요? 그리고 등호를 붙이고 옆에 숫자를 쓴다는 것은 그 상자에 그것을 담아두고 싶다고 말하는 것입니다.

그렇게 해서 printf로 화면에 찍어보니 상자에 담긴 내용이 보입니다~
그런데 좀 이상한게 보이죠?
분명히 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 받기  


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

'C' 카테고리의 다른 글

C <6>. 조건문(1), if, else  (6) 2011.12.11
C <5>. 반복문(1), 단항 연산자  (2) 2011.12.08
C <4>. 실수 표현 방법  (2) 2011.12.04
C <3>. 변수. Variable  (4) 2011.12.02
C <2>. 주석(Comment)  (6) 2011.11.29
C <1>. Hello, World!  (9) 2011.11.25
Posted by yagom

댓글을 달아 주세요

  1. Berry 2012.05.02 21:27  댓글주소  수정/삭제  댓글쓰기

    변수에 있어 많은 것들을 적으시느라 고생이 많으셨겠네요 !!
    역시 추천을 안하고 갈수 없네요 !

  2. 정평화 2013.09.06 22:45  댓글주소  수정/삭제  댓글쓰기

    잘 보았습니다!


오늘의 주제


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  댓글주소  수정/삭제  댓글쓰기

    도움많이 되었어요

C <2>. 주석(Comment)

C 2011.11.29 13:00


오늘의 주제


1. 코드에 주석 쓰기


두 번째 시간입니다.

안녕하세요! 야곰입니다.ㅎㅎ

# 주석

주석이 무엇인가 궁금하시죠?ㅎ
다른 블로그나 책에서 한 챕터를 잡고 주석을 설명하는 경우는 거의 없습니다만..
주석은 생각 외로 굉장히 중요한 역할을 하며, 프로그래밍의 첫 습관을 들일때 매우 중요한 녀석이라고 생각합니다. 물론 실무에서도 굉장히 중요합니다.
그래서 주석은 한 챕터로 잡고 설명하려 합니다!!
오늘 포스팅은 짧습니다만, 꼭 기억해 두셔야 할 포스팅입니다^^*

주석.. 코멘트.. 같은 말입니다!
주석은 코드에 아무런 영향을 미치지 않지만, 이 코드가 어떤 코드인지, 무슨 역할을 하는 것인지에 대한 설명을 적어놓는 메모 같은 것입니다.

그런데 이게 왜 중요하냐구요?
정말 간단한 프로그램이라면 굳이 필요 없을지도 모르지만, 나중에 백줄, 천줄, 만줄 ... 길어지는 프로그램이라면 내가 짜 놓고도 이 부분이 어떤 부분이었는지 기억하지 못하는 경우가 허다합니다 ㅋㅋㅋ
나는 기억력이 좋아서 아닐거라구요?
훗...!절대 그렇지 않습니다!
십수년 프로그래밍 한 고수분들도 꼭 적어두는 것이 주석입니다.
정말 코드 짜기도 바빠 죽겠는데 그런거 적을 시간이 어디있냐구요?
그래도 해야 합니다!!
나중에 현업에 가서 협업을 할때에도 굉장히 중요합니다.
내가 짜놓은 코드는 내가 해석하기 쉬울지 몰라도 다른 사람이 같이 일하면서 내 코드를 볼 때, 이해가 가지 않으면 일이 그만큼 늦어지고 심지어는 프로젝트가 망가지기도 하니까요.
제가 여기서 중요하다고 백만번 말해도 모자랄 만큼, 주석을 다는 것은 정말 중요한 습관입니다.
처음부터 주석을 다는 습관을 들여 놓으셔야지 나중에 후회하지 않고, 힘도 덜 드실것을 저는 장담합니다!!

이렇게 말하니까 주석 다는 것이 정말 어려운 것 같지만, 사실은 정말 간단합니다!
한 번 보시죠 ㅎㅎ

자... 화면에 보이는 저 녹색 글씨들 보이시죠? 저것들이 모두 주석입니다.
프로그램을 실행시켰을 때는 전혀 티가 나지 않지만, 작업하는 프로그래머는 보게 되는 저것이 주석입니다.
컴파일 할때 컴파일러가 주석은 모두 제외하고 컴파일 하게 됩니다.
코드에 보시면 \t 이라는 문구들이 보이실 텐데요~
지난 번에 보던 \n과 같이 출력할 때 효과를 주는 녀석입니다.
이녀석은 탭(tab)효과를 줍니다~! 한 번 해보세요 ㅎㅎ 
다시 한 번 말씀드리지만, 컴퓨터 안고장납니다잉~ 마구마구 써먹어 보세요 ㅎㅎㅎ 



위의 코드 실행 결과 화면입니다.
녹색으로 주석처리된 녀석들은 화면에 나오지 않죠???
코드 해석이 어려우시면 지난번 포스팅을 다시 한 번 보고 오세요^^


주석 처리하는 방법은 간단합니다!

// 주석......

이런식으로 주석을 작성하게 되면 한 줄이 주석처리 됩니다.
즉, 한 줄을 자신이 쓰고 싶은 말들을 써놓을 수 있죠.

또한,
/* 주석...
여러줄
쓸 수 있는
주석... */ 


이런식으로 처리를 하게 되면 여러줄을 주석처리 할 수 있습니다.

참 쉽죠잉!?
 

주석 다는 스타일을 같이 협업하는 사람끼리 정하거나, 자신만의 스타일로 작성해도 됩니다. 딱히 정해진 틀은 없어요^^ 
 

앞으로 제가 포스팅을 할 때 마다 주석을 일일히 달며 하지는 못할 거예요.
하지만, 여러분은 제 포스팅을 보며 공부 하실때마다 코드에 꼭 주석을 달아주세요!!
부탁드립니다~!
이것은 정말 중요한 습관임을 다시 말씀드립니다!
그래서 일부러 한 챕터를 내서 포스팅을 한거예요~


그럼 긴 잔소리는 여기까지만 하고 다음 번에 뵙도록 해요^^*

뿅!


by yagom

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

RSS Feed 받기  

 

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

'C' 카테고리의 다른 글

C <6>. 조건문(1), if, else  (6) 2011.12.11
C <5>. 반복문(1), 단항 연산자  (2) 2011.12.08
C <4>. 실수 표현 방법  (2) 2011.12.04
C <3>. 변수. Variable  (4) 2011.12.02
C <2>. 주석(Comment)  (6) 2011.11.29
C <1>. Hello, World!  (9) 2011.11.25
Posted by yagom

댓글을 달아 주세요

  1. Berry 2012.05.02 21:15  댓글주소  수정/삭제  댓글쓰기

    백번 천번 강조하여도 모자르지 않는 주석이네요
    있고 없고의 차이는 정말 프로그램을 받아보았을때만 알수 있죠 ㅠㅠ

  2. BlogIcon 김준 2017.10.03 16:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 ^^ 혹시 주석에 관련된 단축키가 있나요?
    특정 부분을 지정해놓고 단축키를 누르면 그부분이 다 주석처리 된다던지..


오늘의 주제


1. 코드에 주석쓰기

두 번째 시간입니다.

안녕하세요! 야곰입니다.ㅎㅎ


# 주석

주석이 무엇인가 궁금하시죠?ㅎ
다른 블로그나 책에서 한 챕터를 잡고 주석을 설명하는 경우는 거의 없습니다만..
주석은 생각 외로 굉장히 중요한 역할을 하며, 프로그래밍의 첫 습관을 들일때 매우 중요한 녀석이라고 생각합니다. 물론 실무에서도 굉장히 중요합니다.
그래서 주석은 한 챕터로 잡고 설명하려 합니다!!
오늘 포스팅은 짧습니다만, 꼭 기억해 두셔야 할 포스팅입니다^^*

주석.. 코멘트.. 같은 말입니다!
주석은 코드에 아무런 영향을 미치지 않지만, 이 코드가 어떤 코드인지, 무슨 역할을 하는 것인지에 대한 설명을 적어놓는 메모 같은 것입니다.

그런데 이게 왜 중요하냐구요?
정말 간단한 프로그램이라면 굳이 필요 없을지도 모르지만, 나중에 백줄, 천줄, 만줄 ... 길어지는 프로그램이라면 내가 짜 놓고도 이 부분이 어떤 부분이었는지 기억하지 못하는 경우가 허다합니다 ㅋㅋㅋ
나는 기억력이 좋아서 아닐거라구요?
훗...!절대 그렇지 않습니다!
십수년 프로그래밍 한 고수분들도 꼭 적어두는 것이 주석입니다.
정말 코드 짜기도 바빠 죽겠는데 그런거 적을 시간이 어디있냐구요?
그래도 해야 합니다!!
나중에 현업에 가서 협업을 할때에도 굉장히 중요합니다.
내가 짜놓은 코드는 내가 해석하기 쉬울지 몰라도 다른 사람이 같이 일하면서 내 코드를 볼 때, 이해가 가지 않으면 일이 그만큼 늦어지고 심지어는 프로젝트가 망가지기도 하니까요.
제가 여기서 중요하다고 백만번 말해도 모자랄 만큼, 주석을 다는 것은 정말 중요한 습관입니다.
처음부터 주석을 다는 습관을 들여 놓으셔야지 나중에 후회하지 않고, 힘도 덜 드실것을 저는 장담합니다!!

이렇게 말하니까 주석 다는 것이 정말 어려운 것 같지만, 사실은 정말 간단합니다!
한 번 보시죠 ㅎㅎ

자... 화면에 보이는 저 녹색 글씨들 보이시죠? 저것들이 모두 주석입니다.
프로그램을 실행시켰을 때는 전혀 티가 나지 않지만, 작업하는 프로그래머는 보게 되는 저것이 주석입니다.
컴파일 할때 컴파일러가 주석은 모두 제외하고 컴파일 하게 됩니다.


위의 코드 실행 결과 화면입니다.
녹색으로 주석처리된 녀석들은 화면에 나오지 않죠???
코드 해석이 어려우시면 지난번 포스팅을 다시 한 번 보고 오세요^^


자... 조금 수정해서 보여드릴게요~!
어떻게 뭐가 달라졌는지 비교해 가면서 보세요^^


 결과 화면입니다~!

 
로그에 찍힌겁 보시면 깨알같은 팁도 있죠?ㅎㅎㅎ
여기에 직접 쓰지 않을테니 한 번 사용해 보세요^^ 


중요한 주석 처리하는 방법은 간단합니다!


// 주석......
이런식으로 주석을 작성하게 되면 한 줄이 주석처리 됩니다.
즉, 한 줄을 자신이 쓰고 싶은 말들을 써놓을 수 있죠.


또한, 
/* 주석...
여러줄
쓸 수 있는
주석... */ 


이런식으로 처리를 하게 되면 여러줄을 주석처리 할 수 있습니다.

참 쉽죠잉!?

위에 예시로 작성한 코드에서는 주석을 위나 아래에 달아놓았는데, 코드 바로 옆에 붙여 써도 무방합니다~
무슨말인지 잘 이해가 안가시면 직접 해보세요 ㅎㅎ
다시 한 번 말씀드리지만, 컴퓨터 안고장납니다잉 ㅋㅋ 폭발 안합니다잉 ㅋㅋㅋ
주석 다는 스타일을 같이 협업하는 사람끼리 정하거나, 자신만의 스타일로 작성해도 됩니다. 딱히 정해진 틀은 없어요^^ 

앞으로 제가 포스팅을 할 때 마다 주석을 일일히 달며 하지는 못할 거예요.
하지만, 여러분은 제 포스팅을 보며 공부 하실때마다 코드에 꼭 주석을 달아주세요!!
부탁드립니다~!
이것은 정말 중요한 습관임을 다시 말씀드립니다!
그래서 일부러 한 챕터를 내서 포스팅을 한거예요~

그럼 긴 잔소리는 여기까지만 하고 다음 번에 뵙도록 해요^^*

뿅!


by yagom

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

RSS Feed 받기  


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

댓글을 달아 주세요

  1. 사슴 2014.01.26 10:42  댓글주소  수정/삭제  댓글쓰기

    우와 정말 감사합니다. 도움이 많이 되네요!!


오늘의 주제


1. 기기별 Icon추가 및 관리하기
2. 해상도별 이미지 처리

열 번째 시간입니다.

지난번에는 TabView기반 어플리케이션을 만들어 보았습니다~!

오늘은 지난 번에 다음 번에 얘기 해 보자고 한 이미지에 대해 얘기해 보려 합니다...ㅎㅎ

자 이제 본론으로 고고 ^^

# 어플리케이션 Icon관리하기

지난번에 만들어 놓았던 MyFirstTabbedApp을 이용해 볼까 합니다~

그 전에 아이콘 파일들에 대해 좀 살펴봐야 할 것 같아요~
제가 미리 만들어본 아이콘 파일들입니다.


이게 다 뭐냐구요?ㅋㅋ
설명해 드릴게요.
아이콘 안에 들어가 있는 숫자들은 아이콘 이미지의 크기입니다.
29 x 29  부터 114 x 114까지 다양하지요?
지금부터 설명 들어갑니다~!

 파일명 사이즈  용도 
Icon.png  57 * 57 
iPod 터치 3세대 이하
iPhone3GS 이하 
디스플레이의 홈화면 아이콘
Icon@2x.png 114 * 114 
iPod 터치 4세대 이상
iPhone4 이상 Retina 
디스플레이용 홈화면 아이콘 
Icon-72.png  72 * 72
iPad 및 iPad2
홈화면 아이콘 
Icon-Small.png   29 * 29
iPod 터치 3세대 이하
iPhone3GS 이하
스포트라이트용 아이콘 
Icon-Small@2x.png 58 * 58 
iPod 터치 4 이상
iPhone4 이상 Retina
스포트라이트용 아이콘 
Icon-Small-50.png   50 * 50
iPad 및 iPad2
스포트라이트용 아이콘 

조금 감이 오시나요?
아이콘 종류가 뭐가 이렇게 많냐구요?
기기별로 지원 해상도와 화면 크기가 다르기 때문이죠~
아, 그런데 물론 기본아이콘인 Icon.png하나만 넣어도 모든 기기에서 똑같은 아이콘을 볼 수 있긴 하지만 기기별로 아이콘이 약간 뭉그러져 보이거나 깨끗해 보이지 않을 수 있기 때문에 분리해서 넣어주는 거예요.
분리해서 안넣어준다고 쇠고랑 차지 않아요~
그냥 안이뻐 보이면 안좋으니까 하는거예요~
ㅋㅋㅋㅋㅋㅋㅋ

아, 또 스포트라이트가 뭐냐구요?
iOS의 기능 중에 하나인데, 홈화면에서 왼쪽으로 쭈욱 끝까지 화면 이동하면 검색하는 화면이 나올거예요.
거기가 스포트라이트 검색창입니다.
기기에 있는 모든 정보들을 검색할 수 있는 곳이죠.
그 목록에는 조금 작은 아이콘을 넣어놓으면 이미지 로딩 속도가 더 빠르기 때문에 스포트라이트용 아이콘을 따로 넣는 건데요, 사실~ 이것도 굳이 넣어주지 않아도 됩니다.

하지만 그냥 유저들을 위한 깨알같은 서비스?ㅋㅋㅋ
여튼 이렇게 여러 크기의 아이콘을 만드는 이유를 조금 이해하시나요?

제가 먼저 만든 아이콘은 파일 첨부 해 두었습니다^^


그럼 이 아이콘들을 직접 어플에 적용시켜 봅시다.

지난 번에 만들었던 어플을 다시 한 번 실행시켜 봅시다^^* (아, 물론 그냥 비어있는 어플 만드셔도 상관없습니다~)
 

일단 아이콘 이미지들을 넣어 줄 그룹을 생성했구요~


아이콘 파일들을 끌어다 넣어줍니다.
가져올때 복사에 체크 해 주시는거 잊지 마시구요~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@190B50334ECCA5A6301C13.png%7Cwidth=%22500%22%20height=%22343%22%20alt=%22%22%20filename=%222.png%22%20filemime=%22image/jpeg%22%7C_##]
 총 6개가 되겠죠?ㅎ

그런데... 이렇게 여섯개나 되는 파일을 일일히 저장하기 귀찮죠...ㅠㅠ
그런 분들을 위한 어플이 존재합니다~
Mac App Store에 가셔서 iConify라는 어플리케이션을 받아 설치하시면 한방에 모두 해결해 드립니다 ㅎㅎㅎ

iConify

또는 Icon Express를 이용하세요~

Icon Express


네비게이션 영역에서 MyFirstTabbedApp-Info.plist 파일을 찾아 클릭해 봅시다.
새로 프로젝트를 만드신 분들께서는 <ProjectName>-Info.plist 의 형식으로 자동생성이 되어있을거예요.
plist파일은 Property list 파일입니다. 즉, 속성값들을 갖고 있는 파일입니다.
지금 선택된 이 plist파일은 이 어플리케이션의 속성과 설정 값들을 저장하고 있는 파일이라고 생각하시면 됩니다~!
잘 보시면 Icon files라는 행이 보이실거예요.
오른쪽에 보시면 0 items라고 써있는게 보이구요~


우리는 6개를 넣어줄거니까요~
Icon files 좌측에 보시면 화살표가 보이는데, 아래로 향하도록 한번 클릭해 주시고~
Icon files라는 행이 파란색으로 표시되어 있는 상태에서 엔터 한번 눌러주시면 아래 item 0 이라는 행이 하나 생길거예요~
여섯 행을 만들어 줍시다.
그리고 아이콘 파일들의 이름을 쭈욱 적어줍니다~! (대소문자 구별 합니다)


그리고 실행시켜 볼까요?
시뮬레이터에서 보니 아이콘에 57 x 57 이라고 보이시죠?
제가 Icon.png 파일에 57 x 57 이라고 적어놓았으니 이렇게 나올거예요~
그런데, 시뮬레이터 화면은 분명히 아이폰4 모양인데 왜 57 아이콘이 나올까요?ㅠㅠ


자, 시뮬레이터는 기본적으로 레티나 디스플레이가 아닌 기기로 설정이 되어있습니다.
시뮬레이터 실행 중에 상단에 메뉴표시줄에서 Hardware-Device-iPhone(Retina)를 선택하여 레티나 화면으로 변경하여 봅시다.


짜잔~ 아이폰4 이상에서 지원되는 레티나 화면에서는 114 아이콘 (Icon@2x.png)가 정상적으로 나오네요~


그럼 디바이스를 아이패드로 바꾸면? 
짜잔~ 72 아이콘이 나와욬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아 신기해랔ㅋㅋㅋㅋㅋㅋㅋㅋ


그런데, 나는 아이콘에 발광 효과를 넣지 않았는데 여기는 자동으로 나와요~
없애고 싶으신 분들을 위하여 방법을 알려드립니다~
다시 plist파일로 돌아와서 공백에 대고 마우스 오른쪽 클릭!
또는 컨트롤+클릭 하시면 메뉴가 나오는데요
Add Row를 클릭합니다~


그러면 새로 한 줄이 나오는데요, Key라는 열의 내용을 Icon already includes gloss effects라고 입력하여 하시고 (아마 자동완성으로 나올거예요) Value는 YES를 써주시구요~(대소문자 구별합니다)


다시 실행하여 봅니다~
엄허~! 뽀송뽀송 글로시 효과가 사라졌어용 ㅋㅋㅋ


근데 아이콘 밑에 보이는 어플이름을 좀 바꾸고 싶다면...??
plist파일에 보면 Bundle display name 이라는 행에서 Value를 자신이 원하는 이름으로 바꿔주시면 됩니다. 한글 영문 상관없습니다. 다만 ...이 생기지 않으려면 한글6글자, 영문 12자까지만 써주시면 됩니다.(띄어쓰기는 영문 1글자로 취급됩니다)


자~ 이렇게 어플 아이콘 아래의 이름이 변경되었습니다~!
나라별로 지정 가능합니다. 이를 로컬라이제이션이라고 하는데, 그 부분에 대해서는 다음에 다루도록 해 볼게요..ㅎㅎ



# 해상도별 이미지 관리

아이폰에는 두 가지 해상도가 존재합니다.
320*480과 640*960.
꼭 두배 차이나죠?
그렇기 때문에 높은 해상도의 화면과 낮은 해상도의 이미지 화면의 이미지의 선명도도 다릅니다.
기본적으로 어떤 크기의 이미지던간에 기기별로 알아서 리사이징을 해 주어 같은 이미지를 출력하도록 해주지만, 그렇게 하면 리사이징 처리 시간도 걸리게 되고, 기기에 최적화된 이미지가 아니기 때문에 선명하지 못하거나 뭉그러져 보일 수 있습니다.
그래서 깨끗한 화면을 원하는 개발자는 해상도별로 이미지도 따로 관리를 해주게 되는데요~
그것에 대해 간략한 설명 드리겠습니다~
지난 번에 집어 넣었던 yagom_icon.png라는 이미지 파일이 있습니다.
아이콘 파일이 아닙니다... 혼동을 드려 죄송합니다 (ㅠ_ㅠ)
여튼, 이 파일의 이미지 크기와 꼭 2배가 되는 이미지를 yagom_icon@2x.png라는 이름으로 집어 넣어줍니다.
.


그리고 실행해 봅시다.
retina디스플레이가 아닌 일반 화면(320*480) 버전의 기기를 통하여 yagom_icon.png라는 파일을 사용하였던 화면을 보면 전에 봤던 것과 동일한 이미지가 나옵니다.


하지만 레티나 디스플레이로 변경한 후 다시 보게된다면!?



어머나 세상에!
전 단지 @2x라는 접미어만 붙여서 파일을 넣어줬을 뿐인데 알아서 찾아서 보여주네요~ 


이렇게나 친철하게 말입니다 ㅋㅋㅋ


그래서 아이패드로도 실행 해 보았습니다.
그런데...
아이패드에서 아이폰 어플을 실행하였을 때에는 @2x가 아닌 일반 이미지를 로딩하는군요.
이 이유에 대해서는 논란이 많은데, 구글링 해보시면 조금이나마 이유를 알 수 있으실 거예요..^^
정확한 사실도 아니거니와 설명하기 복잡하여 일단 패스 합니다 ㅎㅎㅎ


자 이렇게 해서 아이콘 넣어보기와 이미지 관리에 대해 조금 알아보았습니다~
협업하시는 디자이너 분께 이렇게 저렇게 이미지를 처리해 주세요~ 라고 말씀하시면서 이유를 설명해 주세요~ㅎㅎ
이미지가 더 이뻐보이려고 이렇게 한다고 말씀드리면 마다하는 디자이너분은 없으실 거예요ㅋㅋ
그런데~!
더 편하게 하는 방법을 소개해 드립니다~!
맥 앱스토어에서 Unretiner 검색하시면 나옵니다..^^
레티나 디스플레이 기준의 이미지를 넣으면 이미지 뒤의 @2x라는 접미어를 없애는 동시에 크기를 절반으로 줄여서 따로 저장해 줍니다~
그러면 일반 이미지와 레티나 이미지를 한방에 해결할 수 있죠^^
다만, 사이즈가 111x123과 같이 홀수가 되는 파일은 처리가 되질 않으니 112x124와 같이 이미지 크기를 조정하셔서 넣어주셔야 합니다^^
링크는요~ Unretiner


후아~
이렇게 아이콘과 이미지에 대해 조금 알아보았습니다^^
어떠세요?
유익하셨나요?
별거 아닌 내용인 것 같아도 나중에 다 피가되고 살이되는 내용일겁니다 ㅎㅎ
유익하셨다거나 도움이 되셨다면 응원이나 질책의 댓글 하나씩 남겨주세요 ㅠㅠ 넙죽넙죽
저는 그럼 다음번에 조금 더 유익한 내용으로 찾아뵙겠습니다~^^*

다음에 뭐 할까요? 댓글 주세요 ㅎㅎ
 

by yagom


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


RSS Feed 받기 


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

Posted by yagom

댓글을 달아 주세요

  1. 옥탑방원숭이S 2012.03.03 21:05  댓글주소  수정/삭제  댓글쓰기

    이번 내용도 잘 보았습니다 ^_^
    아이콘 설정은 꼭 알아야 할 중요한 내용 같네요!
    중간에 알려주신 아이콘 등록 앱은
    일일이 설정으로 잡을 걸 알아서 파일 옮기면 해주는 건가요??

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

      폭풍같은 댓글 감사드립니다~!

      중간에 소개해 드린 앱들은 저렇게 많은 아이콘 파일들을 일일히 다른이름으로 저장하는 불편함을 덜어주기 위하여 가장 큰 해상도인 114*114 해상도의 아이콘만 만들어서 이 앱에 넣어 주시면 이름별로 스스로 정리해서 뱉어주는 녀석입니다~^^*

  2. 한이 2012.03.16 00:42  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다.
    중간중간에 유틸 소개 정말 도움이 되었습니다. ㅎㅎㅎㅎㅎㅎㅎ

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

      찾아주셔서 감사합니다^^
      도움이 되셨다니 행복하네요~
      필요하거나 궁금한 것이 있으면 언제든 말씀주세요^^

  3. 여맹이 2012.03.26 14:01  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다!!!

    이제 입문인데 많이 배워가네요.^^

  4. 리현 2012.07.21 07:42  댓글주소  수정/삭제  댓글쓰기

    잘보고있습니다. 지금 따라 해보는데욤. 저는 plist 에서 아이콘 파일 리스트가 안나와요 ㅁ흠 ㅠㅠ 왜ㅡ일까요?

  5. 초보kay 2012.07.23 19:11  댓글주소  수정/삭제  댓글쓰기

    잘 보고있습니다.
    plist 파일에서 icon files의 아이템이름을 임의로 주었더니 실행시 어플의 아이콘이 생기지 않습니다.
    아이콘파일이름은 야곰님이 이용하신 이름으로 고정되였고 그래야 콤파일러가 인식을 하는건지요?

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

      임의로 아이콘 이름을 설정해도 그에 맞는 아이콘이 있다면 구동이 될 것 입니다.
      대소문자도 구분을 하구요~ 확장자도 넣어주어야 합니다.
      png형태로 넣어주시는 것이 좋구요.
      그리고 그래도 아이콘이 안나온다면 Build-Clean 한 후 다시 빌드해 보시기 바랍니다.
      빌드클린 단축키는 Command+Shift+K 입니다~
      그럼 잘 해결되시면 좋겠네요 ㅎ

  6. 초보kay 2012.07.23 23:00  댓글주소  수정/삭제  댓글쓰기

    아, 제가 plist 에 파일 확장자를 써넣지 않았댔군요.
    답글 감사합니다.
    저는 현재 시뮬레이터상에서 테스트를 해보고 있습니다.
    본래 아이콘이미지파일을 지우고 새 아이콘파일을 복사해서 넣었고
    또 Build-Clean도 해 주었는데 실행하면 아이콘그림이 바뀌지 않고 지워진 이미지가 계속 나와서요.
    시뮬레이터에 이미 설치된 앱의 정보가 남아있는것 같은데 무슨 방도가 없을가요? ㅠ ㅠ ㅠ

  7. neoaero 2012.07.26 10:38  댓글주소  수정/삭제  댓글쓰기

    전 아이콘파일 해상도는 57*57만 있는줄 알았는데..이런 기능이 있는줄 몰랐네요..
    감사합니다.

  8. chosamong 2012.08.24 14:07  댓글주소  수정/삭제  댓글쓰기

    정말로 피가 되고 살이 되는 내용이네요.
    마음을 담아서 감사의 인사를 드립니다.
    꾸벅 <(__)>

  9. alison 2012.09.10 18:01  댓글주소  수정/삭제  댓글쓰기

    왜...
    위에것 그대로 따라했는데 어떤 버젼에석너 114짜리 해상도 아이콘으로만나올까요..;;;
    엑스코드 4.4.1, 시뮬레이터 5.1 쓰고 있는데 뭔가 다른건가요??

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

      만약에 그렇게 나온다고 하면 Xcode에서 빌드클린(커맨드+K)을 해 보시고 시뮬레이터 안에서 어플리케이션을 삭제하고 다시 한 번 해보세요~

  10. 루감 2012.11.22 08:37  댓글주소  수정/삭제  댓글쓰기

    감사히 잘 배웠습니다.
    근데.. 질문이 .. xcode나 시뮬레이터등 캡쳐는 어떻게 하신건가요?
    창 뒤쪽 그림자까지도 캡쳐되어 있네요.. 신기합니다.

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

      안녕하세요 루감님 :)
      덧글 고맙습니다 ㅎ
      Command + Shift + 4 누르신 후에 화면이 바뀌면 Space 눌러주세요 ㅎ 그럼 창 캡쳐가 됩니다.
      추가로 Command + Shift + 3을 누르시면 전체 화면 캡쳐구요 ㅎ
      Command + Shift + 4를 누르고 원하는 영역 드래그 하시면 영역 캡쳐입니다.

      이미지는 데스크탑에 저장됩니다 ㅎ

    • 루감 2012.11.23 08:13  댓글주소  수정/삭제

      와우.. space에 비밀이 있었군요.. 상상도 못했네요. ㅎㅎ
      무한한 정보 정말 감사합니다.

  11. 딴또 2013.03.07 08:31  댓글주소  수정/삭제  댓글쓰기

    진짜 최고의 명강의 입니다. 감사합니다.

  12. 2013.03.12 18:16  댓글주소  수정/삭제  댓글쓰기

    우왕! 깨알같네여! 요즘은 바쁘신지 포스팅을 미루시는 듯...?. 실망이네여 흥쳇퉷

  13. yimcold 2014.04.09 09:34  댓글주소  수정/삭제  댓글쓰기

    대박이네요 ㅋㅋ 항상 야곰님 블로그에서 많이 얻고갑니다!

  14. yimcold 2014.04.09 09:34  댓글주소  수정/삭제  댓글쓰기

    대박이네요 ㅋㅋ 항상 야곰님 블로그에서 많이 얻고갑니다!

오늘의 주제

1.Tab View 기반 어플리케이션 만들어보기

아홉 번째 시간입니다.

지난번에는 아이폰 화면에 이미지를 띄워 보았습니다~!

오늘은 약간 응용하여 탭뷰를 만들어 봅시다...ㅎㅎ

자 이제 본론으로 고고 ^^

# MyFirstTabbedApp

지난 번 이미지 띄운 것을 조금 응용해 볼게요~
일단 뭘 시작하려면 프로젝트를 하나 생성해야 겠지요?
이제 프로젝트 정도는 혼자 생성할 줄 아셔야 해요~ㅋㅋ
잘 모르시면 지난 포스팅 한 번 보시고~
참고로 새 프로젝트 만들기 단축키는 커맨드+Shift+N입니다.
이번에는 Tabbed Application 템플릿을 이용해 보겠습니다~


이번 프로젝트명은 MyFirstTabbedApp입니다~!


기본 세팅 해 주시구요~


일단 무작정 실행시켜 봅시다 ㅋㅋ
커맨드 + R
우왕ㅋ 그냥 잘 되네용ㅋㅋㅋ


이것저것 눌러봅시다~
아래 탭 눌러서 화면전화 해봐용~


자.. 이제 본격적으로 초큼 바꿔 보도록 하겠습니다~!
우리 지난번에 썼던 이미지들 한 번 다시 끌어와 볼까요?
짜잔~ 다시 두 이미지 끌어와 봤습니다~


좌측 네비게이션 영역에서 FirstViewController.xib 파일을 클릭하여 아래 IB화면으로 이동합니다.
이미지 뷰 하나를 끌어 넣어서 자신이 가져온 이미지를 화면에 넣어줍시다~


SecondViewController.xib에서도 마찬가지로 이미지를 넣어줍니다~!


그리고 또 한번 실행 ㅋㅋ
커맨드 + R 
어휴~ 이렇게 이쁘게 또 나왔네요 ㅋ


하..지..만... 탭이 두개밖에 없으니 쓸쓸해 보이지 않나요?
탭을 하나 더 추가해 봅시다~!
프로젝트 폴더에서 오른쪽 버튼을 누르고 New File 클릭!
또는, 커맨드+N 입니다!

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile3.uf@1831363F4ECA0F7A04B227.png%7Cwidth=%22500%22%20height=%22339%22%20alt=%22%22%20filename=%2211.png%22%20filemime=%22image/jpeg%22%7C_##]
아래 그림처럼 새 파일 템플릿이 나오면 UIViewController subclass 를 선택합니다.
이말인 즉슨 새로운 뷰 컨트롤러 녀석을 하나 생성하겠단 뜻이겠죠?
[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile1.uf@1131363F4ECA0F7C052651.png%7Cwidth=%22500%22%20height=%22352%22%20alt=%22%22%20filename=%2212.png%22%20filemime=%22image/jpeg%22%7C_##]
Class명은 ThirdViewController 입니다.
subclass of 에는 UIViewController 라고 기입해 줍니다.
UIViewController에서 상속받는 ThirdViewController라는 클래스를 생성한다는 뜻입니다.


이렇게 파일이 저장될 위치를 설정해 준 후(그냥 기본적으로 잘 되어있으니 바꾸지 않으셔도 됩니다) Create !!


짜잔~ 네비게이션 영역에 보면 파일들이 생성이 됩니다.
보기좋게 위치정렬 해주시고~ ThirdViewController.xib파일을 클릭해 줍니다.


저는 이미지 하나와 Label하나를 집어 넣어 보았습니다~
마음껏 하나 꾸며보세요 ㅎ


그리고 실행 해 봅시다~!
커맨드 + R
어...? 그런데 왜 세번째 탭이 안생겼죠? 


당연히 프로그램은 우리가 말해주지 않으면 모릅니다...ㅋㅋㅋ
프로그램에게 새 뷰컨트롤러를 만들어 줬고, 거기에 넣고 싶다고 말해줍시다.
우선 AppDelegate.m이라는 파일로 가 봅시다.
AppDelegate라는 녀석은 어플리케이션 전체를 총괄 관리하는 녀석이라고 생각해 주시면 됩니다.
긴 설명은 차후에 하도록 하고, 일단 코드를 봅시다..!
드디어 코드..!? 두둥!
겁먹지 마세요~ㅋㅋ
아주 간단하게 할거예요.


복사 붙여넣기 신공을 펼쳐 봅시다.
화면에서
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
라는 메소드로 이동해 봅시다.
이게 뭐냐구요? 메소드가 뭐냐구요?
뭐... 다음에 설명합니다 ㅋㅋㅋ
뭐 이런 날림이 다 있어 하지만 걱정마세요ㅋㅋㅋ
거기서 viewController2에 해당하는 줄을 복사해서 아래줄에 붙여 넣어 봅시다.
뭔가 뻘건게 눈에 띕니다.
뭐가 불만이냐...?
Redefinition of 'viewController2' 라고 나오네요.
같은 이름이 중복선언 되었다고 나와요~
이 세계에서는 이름이 같으면 안되나 봅니다.


그래서 이름을 살짝 바꿔줍니다. viewController3로 바꿔주시구요~
안에 적혀있는 [SecondViewController alloc ]도 ThirdViewController alloc으로.. 뒤에 @"SecondViewController"도 @"ThirdViewController"로 변경해줍니다.
여튼 화면에 보이는 것처럼 바꿔주세요 ㅋㅋ
그런데도 빨간놈이 안없어진다구요?
예... 안없어집니다. 코드 상단에 보면 #import라는 녀석이 보일텐데요, 이녀석도 한 줄 추가해 줍니다. 화면에 보이는 것처럼요~
import는 말 그대로 데려오는건데요~
여기서 이 클래스를 사용하겠다는 의미입니다.
우리가 어렵사리(?) 만들어 놓은 ThirdViewController 클래스를 데려와줍니다 ㅋ

그러고 나서도 뭔가 누런게 우리보고 지껄입니다...
viewController3 라는 녀석이 쓰이지 않았다는 waring 메세지 입니다.
왜 만들어놓고 쓰지 않느냐는 뜻입니다.
우리가 탭에 새로 만든 녀석을 넣어줘야 하므로...
아래에 
self.tabBarController.viewControllers에 우리가 만든 녀석을 살포시 하나 더 넣어줍니다.


그러면 이렇게 말끔한 화면이 탄생할거예요~
두구두구두구두...
실행해 봅시다~!


우왕 ㅋ 새탭이 나타났어요~


 그런데 새로만든 탭에 아무것도 없어요..ㅠㅠ

화면은 나오는데 탭에 이름도.. 그림도 없네요!!
넣어봐 주어야 겠지요?

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile24.uf@20185C344ECA137A1193AF.png%7Cwidth=%22396%22%20height=%22744%22%20alt=%22%22%20filename=%2223.png%22%20filemime=%22image/jpeg%22%7C_##]
탭에 넣어줄 이미지를 가져와 줍니다.
투명 바탕을 사용하는 이미지여야 해요~!
png파일로 가져와야 해요.ㅎ
그런데 여기서 파일을 보면 제가 star.png와 star@2x.png 두개를 가져왔지요?
그냥 이름은 아이폰 3GS이하의 기종에서 지원하는 이미지, @2x를 붙이는 것은 아이폰4 이상의 기종(현재 기준)을 지원하는 이미지 입니다.
사실 iOS는 기종별로 지원하는 해상도가 다르기 때문에 좀 더 깨끗한 이미지를 원한다면 좀 더 높은 해상도의 이미지를 넣어주어야 한답니다.
하지만 굳이 그럴 필요없이 고해상도 이미지만 넣어도 큰 무리는 없습니다.
다만 좀 더 느린 사양의 기기에서 구동속도가 조금 느려지는 정도!?
어떻게 하시든간에 선택은 자신의 몫입니다.
저는 그냥 주로 아이폰4 기준의 이미지를 넣는 편입니다.
하나의 이미지만 넣어도 어플 내에서 알아서 인식하고 이미지 크기나 해상도 조절을 합니다.
하나의 이미지만 넣고 싶으면 @2x등을 붙일 필요없이 지난번에 넣었던 것처럼 이미지를 그냥 끌어다 넣으면 됩니다~

일단 제가 이번에 넣은 이미지는 star.png가 30*30의 크기, star@2x.png는 60*60의 크기를 갖습니다. 딱 2배 크기예요~ @2x는 두배 크기라는 말씀..^^

추가된 2개의 파일은 첨부파일로 올려놓았습니다.
여튼 두 파일을 끌어다 놓습니다~



[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile7.uf@12185C344ECA137B120EA8.png%7Cwidth=%22500%22%20height=%22352%22%20alt=%22%22%20filename=%2224.png%22%20filemime=%22image/jpeg%22%7C_##]
그리고 FirstViewController.m 파일로 와서 빨간색으로 표시된 영역의 두줄을 복사해둡시다.


그리고 우리가 만든 세번째 뷰컨트롤러 ThirdViewController.m에 와서 붙여넣고 아래 스크린샷처럼 내용을 살짝 바꿔줍시다~!


그리고 에러가 없다면 실행-!!
짜잔~!
드디어 나왔네요 ㅋㅋㅋ 이름과 그림 ㅋㅋ 


후아후아~
여기까지 잘 따라오셨나요?
다음에는 무슨 이야기를 해볼까요?
사실 여기서 다음에 다음에 한다~
이렇게 써놓은거...
귀찮아서 그런거 절대 아닙니다 ㅋㅋㅋ
여기서 쓰면 한도없이 길어져서 따로 챕터를 만들까 하는데, 먼저 필요한 부분 댓글로 남겨주시면 하루이틀 내로 포스팅 해드릴게요~
소통에 게을리 하지 않겠습니다 ㅋㅋㅋ
 
그럼 다음에 뵙도록해요~!



by yagom

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


RSS Feed 받기 


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

Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 루감 2012.11.21 12:21  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    지난주부터 시작해서 덕분에 잘 배우고 있습니다. 쉽게 설명해주셔서 따라하기만 하면 되더군요.
    근데 드디어 진행이 안되고 막혔네요.
    xcode 4.5.2 사용하고 있는데요. (iOS SDK 6.0 입니다.)
    이 글의 UIViewController를 추가를 위해 New File 메뉴를 선택하니..
    화면이 틀려요.
    Choose a options for your new file: 이라는 그림과 같은 창이 아니고요.
    Choose a template for your new file: 이라는 이름의 창이 뜨고, iOS, OSX 두가지 범주에서
    Cocoa Touch, C and C++, User Interface 등 여러가지 항목과 그 하위에 수많은 클래스들을
    선택할 수 있게 되있네요..
    다 눌러봐도 UIViewController 또는 그와 비슷한것도 찾을수가 없네요.
    뭘 선택해서 추가해야 하나요?

  3. Lisa 2012.11.22 12:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 야곰님의 블로그에서 많은 정보를 얻고 열심히 아이폰 개발을 하고 있는 초짜 인데요.
    질문을 좀 몇가지만 드리려고 합니다.

    참고로 Xcode 4.5.2, 스토리보드X, xib View - Bottom Bar 로 Tab Bar 형태로 개발하고 있습니다.

    1. A뷰콘트롤러에는 여러개의 버튼들이 있습니다. 그리고 하단에는 Tab Bar 가 있어서 A, B, C... 순서대로 탭바 내용이 보이게 됩니다. 그리고 그 버튼들은 각 B, C... 뷰콘트롤러로 이동할 예정입니다.
    그런데 A -> B 로 화면전환 할때
    SecondViewController *secondModal = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 초기화를 한 후
    [self presentViewController:secondModal animated:YES completion:nil]; 모달뷰 형태로 지정해서 실행하면 Tab Bar는 보이지 않은 상태에서 View 내용이 보이게 됩니다. 그렇다고 [self.view addSubview:secondModal.view]; 형태로는 현재 뷰 위에 얹혀서 보이는 식으로 나타나게 됩니다. (이 부분은 당연한 부분이겠죠.)

    해서 제가 원하는 결과는 A뷰컨트롤러에서 B, C....뷰컨트롤러로 화면전환이 이동되면서 Tab Bar가 보이고 Tab Bar Item도 각 Tab 위치에 맞는 활성화된 상태로 보이도록 하는것이 목표입니다.

    2. FifthViewController에는 툴바가 있고 네비게이션바는 없는 상태입니다. 해당 뷰안에 버튼이 있는데 이 버튼을 누르게 되면
    SixthViewControlller 로 화면전환 하려 합니다. 그런데 SixthViewController 에서는 툴바는 설정 안해놨습니다. 네비게이션바와 Back 버튼이 보이고 클릭하면 FifthViewController 로 돌아가고 싶습니다. 가능한지요?

    아직 실력이 미흡해 제대로 설명을 못드린것 같아 죄송합니다.

    염치불구하지만 답변 기다릴게요 ^^;;

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

      안녕하세요 Lisa님! 반갑습니다 :)
      1번의 경우에는 모달은 원래 그런 용도(새로운 화면으로 덮어버리는...)이기 때문에 원하는 기능에 적절하지 않은 것 같습니다. 네비게이션 컨트롤러를 이용하는 것이 좋을 것 같습니다.

      2번의 경우에는 이동할 때마다 네비게이션 컨트롤러의 setNavigationBarHidden: 메소드로 보였다 가렷다 하면 될 것 같습니다~ :)

      도움이 될지 모르겠습니다. ^^;

  4. Lisa 2012.11.23 16:25  댓글주소  수정/삭제  댓글쓰기

    답변 달아주셔서 감사합니다.

    기존 작업들 다 엎고 모달로 불러올 수 있도록 재작업중에 있습니다. ㅡ.ㅜ
    제대로 된 교육도 안받고 기초도 없는 상태에서 사정상 개발부터 하려니 참... 힘드네요. ㅠㅠ

    아무쪼록 또 궁금한 사항 생기면 여쭤봅도록 하겠습니다.

    주말 잘 보내세요 ^^

  5. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.03 22:16  댓글주소  수정/삭제  댓글쓰기

    또 고맙습니다.
    저도 블로거로써 이 고마움을 어찌 전해야할지 모르겠네요. :)

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

      까만거북이님 :)
      저도 거북이님 블로그 보면서 많은 정보 얻어갑니다 ㅎㅎ
      유용한 팁과 정보들이 정말 많네요 ㅎ

  6. 첼로와 짜짜 2013.01.11 17:21  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋㅋㅋㅋㅋ 탭바에 이미지 넣는거 좀 헤매다가 결국 알아냈어요. 끝까지 다 볼겁니다. 정말 도움이 많이되요. 감사합니다.
    탭 4개 만들었어요ㅋㅋㅋㅋ

  7. 딴또 2013.03.07 08:11  댓글주소  수정/삭제  댓글쓰기

    명강의 감사합니다.

  8. Favicon of http://keepingstar.tistory.com BlogIcon keepingstar 2013.03.30 13:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야(한)곰님~
    따라하기로 하고 있는데 이상하게 이미지뷰를 집어넣은 곳과
    시뮬레이터로 실행시킨 후의 위치가 틀리네요-?

    지금 제가 6.0을 사용하고있는데 이것의 버그일까요?
    흠..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.03.31 00:08 신고  댓글주소  수정/삭제

      야한곰은 절대로 아니구요...ㅠㅠ
      일단 탭뷰안에 들어가서 위치가 달라보일 수도 있고
      뷰가 오토 리사이징이 되어서 그럴 수도 있을 것 같습니다..

  9. 청담동개발자 2013.04.15 16:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ 궁금한거 하나만 물어볼께요

    Tabbed Application을 이용하면 FirstViewController ,SecondViewController 라고 이름이 정해지는데

    이름을 바꿀 수 없나요? 이름 바꿨더니..오류나고 실행이 안되네여..

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

      당연히 바꿀 수 있습니다... ^^;
      어디서 어떤 이름을 바꾸셨는지 모르겠지만...
      파일이름을 변경하고 싶으시면 파일이름 변경 후에 #import에서도 바꿔주셔야 하구요...
      클래스 이름을 바꿔주셨으면 xib에서도 클래스 정보를 바꿔주셔야 합니다...

  10. 질문돌이 2013.06.08 15:59  댓글주소  수정/삭제  댓글쓰기

    제가 뭘 잘 몰라서 그런데요,
    탭바에 view controller를 등록하기 전에

    UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

    이런식으로 UIViewController instance를 만드는데,
    막상 생성하는건 FirstViewController instance네요.

    이래도 되는건가요?

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

      제가 잘못 표현한 부분입니다 ^^;
      FirstViewController와 SecondViewController 포인터로 선언해 주는것이 더 맞겠습니다 ㅎㅎ

  11. 개개개발의 귀태랑 2013.07.01 17:39  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좋은 강의 잘 보고 있습니다.

    한가지 궁금한 점이 있는데요. 이번 강좌를 다 따라했고, run실행 시 오류도 없었습니다.
    그런데 시뮬레이션 화면에서 세번째 탭( star이미지도 잘 뜹니다)을 누르기만 하면 시뮬레이터가 멈춰 버리는데요.;

    이건... 어떤 문제인지 알 수 있을까요?

    xcode는 4.6.2버전입니다~

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

      글쎄요...^^;

      그렇게만 말씀해 주시면 저도 뭐라고 답변을 드려야 할지 잘 모르겠습니다 ㅠ_ㅠ

    • 개개개의 귀태랑 2013.07.02 10:54  댓글주소  수정/삭제

      아... 어디가 잘못되었는지를 모르니 질문을 상세하게 드릴 수가 없네요.ㅠㅠ

      디버그 네비게이터에

      int main(int argc, char *argv[])
      {
      @autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); <--Thread 1: signal SIGABAT
      }
      }

      이라고 나옵니다. 댓글 중에도 몇분이 SIGABAT얘기를 하시는 것 같은데 무슨 말인지 모르겠네요.ㅜㅜ

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

      난감한 상황이 아닐 수 없습니다..ㅠ_ㅠ

      메모리에 잘못 접근하고 있는 것 같은데, AppDelegate쪽에 오타나 잘못 입력한 부분이 있는지 확인해 보시고, ThirdViewController의 xib파일에 문제가 없는지 확인해 보시는 것도 좋을 것 같습니다. 'ㅁ'

  12. 개개개의 귀태랑 2013.07.02 17:23  댓글주소  수정/삭제  댓글쓰기

    해결했습니다.ㅎㅎ;

    탭을 새로 추가하는 부분에 문제가 있었습니다. 본문에는 New File을 하고 템플릿에서 UIViewController subclass를 선택하면 된다고 되어 있습니다만, 저 같은 경우 그런 템플릿을 못찾아서;; 그냥 템플릿 라이브러리에서 만들어 썼던 게 문제였던 것 같습니다.

    제 xcode에서는 new file을 한 뒤 'ios' --> 'cocoa touch' --> 'objective-c class'를 선택해 줘야 'UIViewController subclass'를 선택할 수 있었습니다.

    아무튼 이제 나머지 부분을 따라갈 수 있겠네요~~ 감쏴함다~~ㅎ

  13. sunju 2013.07.30 11:54  댓글주소  수정/삭제  댓글쓰기

    혹시 두번째 tab에 안녕하세요이런 문자열을 저장해 놓구 첫번째 tab에서 읽어 올수 있는 방법은 없나요??? 블로거님 delegate 부분 보구 해봣는데 안되네요 ㅠㅠ 도와주세요~ㅠㅠ

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

      안녕하세요 선주님!! :)
      어떤식으로 저장하셨고, 어떤 식으로 델리게이트 연결을 하셔서 구현을 하셨는지에 대한 정확한 설명과 코드 없이는 제가 도와드릴 수 있는 부분이 없을 것 같아요...^^
      어떤 부분이 어떻게 동작을 안하는지 직접 쉽게 설명할 수 있는 정도로 자신의 코드를 이해해서 설명해 보셔요. 아마 그때 쯤이면 스스로 원하는 기능을 완성하셨을 거예요.
      그럼에도 불구하고 원하는 기능이 동작하지 않는다면, 이해한 내용을 저에게 다시 설명해 주세요. 함께 방법을 찾아보아요 :)

  14. sunju 2013.07.30 13:22  댓글주소  수정/삭제  댓글쓰기

    답변감사합니다
    아직 해결이 안되서 또 물어볼게요 ㅠㅠ
    두번째 tab view에 uislider 만들고 viewDidDisappear에서[self.delegate returnValue...] 이런식으로 코딩하고 첫번째 tabview에서 returnvalue란 함수를 통해서 값을 읽어오구 싶은데 우선 첫번째 setDelegate을 어디부분에서 해야될지 막막합니다. viewDidload에서 setDelegate을 했더니 returnvalue 함수가 호출도 되지 않네요...ㅜㅜ 설명이 제대로 됬는지는 잘모르겠네요 ㅠㅠ 감사합니다.

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

      탭바에서는 viewDidDisappear가 호출이 안될텐데, 로그 찍어보셨나요?
      viewDidDisappear말고 다른 방법으로 해당 메소드를 호출해줘 보세요.
      가령 예를 들어 버튼을 누른다던지, 첫 번째 탭에서 다른 방법으로 불러오는 방식이라던지요... ^^

  15. Hide 2013.11.05 19:57  댓글주소  수정/삭제  댓글쓰기

    감사합니다. ~

  16. 무숙자 2013.12.16 22:18  댓글주소  수정/삭제  댓글쓰기

    설명 최고네요 최고....감탄을 하고 갑니다.
    저같이 일반인도 이해가 가다니요

  17. Bart 2014.02.04 22:43  댓글주소  수정/삭제  댓글쓰기

    요즘 맥을 시작하는 초보사용자로 야곰님 강좌를 처음부터 따라하기 시작한 사람입니다

    저는 xcode5.0.2 사용 중인데, 프로젝트 생성할때 storyborad 선택이 없어서 메소드 부분이 없어서 막히고 있는데요,
    혹시 다른 해결 방안은 없는지요?

  18. myonug 2014.05.21 19:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좋은 강좌 감사합니다.!
    그때 한번 댓글 달았는데 빠른 답변도 정말 감사드리고요^^

    궁금한점이 있습니다.
    혹시 title의 사이즈를 좀더 키울 수 없을까요?
    키울수 있다면 어떤 방법으로 키워야 되나요?

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

      http://goo.gl/BE1tCF
      한 번 참고해 보셔요 :)
      제가 지금 문서를 안봐서 모르겠지만 아마 iOS 6 이상에서부터 사용할 수 있는 메소드일거예요 ㅎㅎ

  19. myonug 2014.06.10 15:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 벌써 세번째 댓글을 다는거 같습니다.
    항상 답변해주셔서 감사해요!

    탭뷰를 하면서 5페이지를 만들었어요.. 근데 1245페이지는 버튼을 눌렀을때 지정해준 뷰로 이동을 하는
    일반적인 탭뷰형식입니다. 3번째 위치한 탭뷰버튼을 눌르면 마지막으로 보여진 뷰는 유지되면서
    그위에 버튼을 구현을 할려고 하는데 혹시 조언이나.. 검색을 어떻게 하면 되는지 가르쳐주실수 잇나요..ㅠㅠ
    머라고 검색을 해야되는지.. 잘 몰라서 물어봅니다!

    0
    0
    탭뷰: 1 2 3 4 5

    탭뷰 3번째를 클릭했을때 0이라는 버튼이 그위에 구현되는 방식입니다.


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

      안녕하세요 :)
      UITabBarControllerDelegate 에 대해서 알아보시면 될 것 같아요 :)
      탭바를 눌렀을 때 호출되는 델리게이트 메소드가 있을거예요 ㅎ

  20. 2014.11.13 18:06  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  21. 루나 2016.01.02 15:11  댓글주소  수정/삭제  댓글쓰기

    포스팅이 2011년으로 오래되긴 했지만 너무 자세히 설명해 주셔서 차근 차근 따라하고 있습니다.
    Xcode 7.2를 사용해서 배우는 중인데 지금은 ViewController Class 파일을 만들지 않고 Object에서 ViewController를 추가하여 오른쪽 버튼으로 연결하게 변경이 된거 같아요. 코딩 필요 없이요. 그래서 게시글과 달라 조금 헤맸습니다. ㅎㅎㅎ
    시뮬레이터로 띄워봤을 때 3번째 탭이 나타납니다.
    다만 정말 초보기에 질문드리는데... 이렇게 Object로 ViewController를 연결하면 첫번째, 두번째 탭처럼 h, m 파일이 생성되지 않아서 궁금합니다. 제가 Xcode 최신 버전을 사용해서 다른 걸까요? 아님 제가 뭘 잘못한 걸까요?

    새해 복 많이 받으세요. :)

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

      안녕하세요 루나님~!
      음... 그것은 기본적으로 UIViewController 클래스의 객체를 스토리보드에서 자동으로 생성해주기 때문입니다. 쉽게 말로 풀어쓰기가 정말 어려운데... 음...ㅠㅠ
      스토리보드의 ViewController 객체를 스토리보드에 올려놓으면 코드로 UIViewController를 생성해주는 것과 같은 효과를 얻게됩니다. 컴파일 할 때 자동으로 스토리보드를 분석해서 Xcode가 대신 코딩해주는 효과라고 할까나요?
      지금 위에서처럼 UIViewController 클래스를 상속받는 클래스 두 개를 더 만든 후에 스토리보드에 올린 UIViewController 객체를 선택하시고 Identity inspector 메뉴(참고 : https://goo.gl/UwdTx4)에서 Class 이름을 우리가 만들어준 클래스 이름으로 지정해주면 위에서 해본 예제랑 같은 효과를 얻어보실 수 있습니다 :)

      말로 최대한 풀어 써보려고 했는데 잘 이해가 되실지는 모르겠어요ㅠ

      더 궁금하신 사항이 있으면 또 글 남겨주세요~!


오늘의 주제

1. iOS Application의 화면구조
2. View Controller
3. 화면에 보이지 않는 Object 종류 알아보기

일곱 번째 시간입니다.

지난번에는 Object에 대하여 조금 알아보았습니다~

오늘은 iOS App의 화면구조와 아직 배우지 못한 몇몇 객체들에 대해 알아봅시다...ㅎㅎ

자 이제 본론으로 고고 ^^

# iOS Application의 화면구조

우리가 iOS를 사용할 때 보이는 화면구조에 대해서 조금 먼저 알아볼 필요가 있겠습니다.
일단 최고로 상위에 있는 녀석이 UIWindow입니다.
지난 번에 설명드렸듯이 iOS는 하나의 윈도우창으로 이루어져 있습니다. 즉 하나의 화면 안에서 모든 것들이 이루어지는것이라는 말이죠. 즉, 컴퓨터로 생각해 보면 하나의 모니터가 있고, 그 모니터 안에 여러개의 창을 띄워놓고 작업하지요? 그것과 같습니다.
한 화면 안에서 여러개의 창을 띄워놓을 수 있습니다.
그 하나하나의 창을 우리는 View로 표현 할 수 있습니다.
헷갈리시나요?
일단 아래의 그림을 봅시다.
하나의 UIWindow안에 View가 여러개 존재하여 보여질 수 있습니다.
View가 각자의 영역을 가지고 보여질 수도 있고, 곂쳐져 보여질 수도 있습니다.
이래도 솔직히 감이 안옵니다 ㅎㅎ
또 아래의 그림으로 가봅시다.


[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile2.uf@131957454EBAB4AE1F41BC.png%7Cwidth=%22500%22%20height=%22750%22%20alt=%22%22%20filename=%222.png%22%20filemime=%22image/jpeg%22%7C_##]

실질적인 어플리케이션의 화면입니다.
화면 최상단에는 Status Bar, 즉 상태바가 있지요.
상태바를 보여줄지 안보여줄지는 개발자의 선택입니다.
일단 이 어플리케이션에는 상태바가 보이네요.
상태바도 하나의 뷰로 생각할 수 있습니다.
우리는 상태바를 보이게 할지 안보이게 할지, 또 상태바의 스타일은 어떤식으로 표현할지 등을 정할 수 있습니다. 
화면에 보면 일단 메인뷰(UIView)가 존재하고 메인뷰 크기만큼의  이미지뷰(UIImageView)가 존재합니다. 이미지뷰로 배경화면을 깔아 놓았고 그 위에 버튼들로 구성된 화면입니다.
버튼(UIButton)도 View의 종류중에 하나입니다. 화면에 보이는 거의 모든것이 View에서 상속받은 것인데요, 상속이라는 것은 뭐 일단을 설명하지 않겠습니다.ㅎㅎ
지금 보다시피 지금 이 화면(UIWindow)에는 하나의 뷰(UIView)위에 이미지뷰(UIImageView)하나가 얹어져 있고, 버튼(UIButton) 5개로 이루어진 윈도우입니다.
위에 설명이 잘 이해가 안가시면... 지난 번 포스팅을 한 번 더 보고 오시는것은 어떨까요?ㅎ
 


아래 화면을 보시면 하나의 윈도우 위에 상태바가 존재하고 메인 뷰 위에 배경을 씌운 이미지 뷰 하나, 그위에 여러 View들로 이루어져 있습니다.
사용자의 선택을 받기 위한 버튼들, 제목표시를 위한 라벨, 입력받기 위한 텍스트필드와 텍스트뷰가 존재합니다. 지난 번에 설명해 드린 것을 참고하시면 어떤 역할을 하는지 대충 감이 오시겠죠?ㅎ


이렇게 화면에 많은 뷰들로 구성이 되어있는데 이 많은 뷰들을 어떻게 관리를 해 줄 것인가??
그런 생각이 드실거예요. 뷰들이 화면에 어떤 모양으로 보여지게 될지는 뷰 자체적으로 결정을 합니다. 하지만 사용자의 입력을 받거나 사용자의 행동에 따라 화면을 어떻게 바꿔줄지 또는 어떤 동작을 하는지는 Controller라는 녀석이 결정을 하게 됩니다.
헷갈리기 시작하시는 모습이 눈에 선합니다 ㅎㅎ
컨트롤러라는 녀석들은 화면에 보이질 않는 추상적인 녀석들이니까요..^^
그럼 거기에 대해서 조금 더 알아볼까요?

# View Controller

이제 컨트롤러 중에서 가장 많이 보게 될 View Controller에 대하여 알아봅니다.
일단 iOS의 동작이 어떤 순서로 이르어 지는지 먼저 살펴봅시다.


iOS는  MVC모델을 기반으로 합니다.
Model - View - Contorller 의 준말입니다.뭐 무슨말인지는 나
중에 이해하게 되실거예요~

Model은 데이터를 저장하는 곳, View는 화면에 보이는 것, Controller는 View와 Model을 관리하는 객체라고 보시면 됩니다.
무슨말인지 잘 감이 안잡히시죠? 괜찮습니다~
어쨋든 Controller라는 녀석이 대부분의 모든것을 주관한다라고 생각해 두세요.
그리고 View Controller는 화면에서 일어나는 것들의 처리를 맡아서 처리한다고 생각하시면 되겠지요?
즉, 컨트롤러들은 일처리를 열심히 하는 일꾼이고, 뷰들은 컨트롤러가 쏴주는 명령과 데이터로 화면에 보여주는 아바타 꼭두각시들입니다. ㅎㅎ
정리가 좀 되실라나요?


# 화면에 보이지 않는 Object 종류 알아보기
그럼 이제까지 화면에 보이는 녀석들을 좀 봤으니 화면에 보이지 않는 녀석들과 컨트롤러 들에 대하여 한 번 알아보도록해요~
 

이름 : Tap Gesture Recognizer
설명 : 화면에 직접적으로 보이지는 않지만 앱 내부에서 열심히 동작하는 녀석들 중에 하나가 Recognizer 녀석들입니다. Recognize하면 알아차리다 라는 뜻이죠? 말 그대로 Tap, 즉 우리가 터치하는 것들을 알아차리고 프로그램에 전달하는 녀석입니다. 이녀석이 사용자가 어디를 탭했다 또는 몇 손가락으로 터치를 했다 라고 전달해 주면 어플이 그에 알맞는 동작을 할 수 있게되는거죠^^ 이녀석은 Recognizer중에 화면을 터치하는 것을 감지해 주는 녀석입니다.
클래스 : UITapGestureRecognizer

이름 : Pinch Gesture Recognizer
설명 : Pinch 하면 집게죠 ㅎ 즉, 손가락을 집게처럼 오므리거나 벌리는 동작을 말합니다. 화면을 확대 축소 할때 주로 쓰이는 동작이죠? 그 동작을 사용자가 하면 시스템에 알려주는 역할을 합니다.
클래스 : UIPinchGestureRecognizer

이름 : Rotation Gesture Recognizer
설명 : 손가락으로 동그랗게 돌리는 것을 인식하여 시스템에 전달해 주는 역할을 합니다.
클래스 : UIRotationGestureRecognizer


이름 : Swipe Gesture Recognizer
설명 : Swipe하면 쓸어내다 이런 뜻이죠. 화면을 쓸어내듯이 미는 동작을 감지합니다. 밀어서 잠금해제 뭐 이런 동작이요 ㅎ
클래스 : UISwipeGestureRecognizer


이름 : Pan Gesture Recognizer
설명 : 쉽게말해서 드래그 하는 동작을 잡아냅니다 ㅎ
클래스 : UIPanGestureRecognizer


이름 : Long Press Gesture Recognizer
설명 : 말그대로 길~~~~~~~~게 누르고 있는 동작을 인식하여 시스템에 알려줍니다~!
클래스 : UILongPressGestureRecognizer


이름 : Object
설명 : 이녀석이 우리가 말하는 객체의 원형이라고 볼 수 있겠네요. 인터페이스 빌더에서 사용할 수 없는 커스텀 객체를 구성 할 수 있습니다.
클래스 : NSObject


이름 : External Object
설명 : 문서 외부에서 끌어오는 객체를 위한 Placeholder, 즉 자리를 차지하게 해주는 인터페이스 빌더의 요소입니다.
클래스 : 


이름 : View Controller
설명 : 드디어 뷰컨트롤러네요 ㅎㅎ 이녀석이 뷰에서 일어나는 일들을 감지하고 어떤 동작을 하고 어떤 변화를 줄지 결정하고 수행하는 역할을 하는 녀석입니다. 아까도 말씀드렸죠? 뷰는 꼭두각시 아바타일 뿐, 요녀석이 조종사입니다 ㅎㅎ
클래스 : UIViewController


이름 : Table View Controller
설명 : iOS보면 목록들을 쭈욱 나열할 수 있는 테이블을 볼 수 있습니다. 사실 테이블이라고 하면 잘 감이 안오시겠지만, 아이폰 설정에 들어가면 설정 메뉴 목록이 섹션별로 나뉘어서 쭈욱 목록이 나오는 것이 테이블입니다. 그 테이블 화면에 나올 것들과 테이블 열(Row)를 눌렀을 때 어디로 이동하게 될지 정해주는 역할을 해요~
클래스 : UITableViewController


이름 : Navigation Controller
설명 : iOS화면 상단에 보면 제목과 뒤로가기버튼, 메뉴 버튼 등이 존재하는 바가 존재하지요? 그것을 네비게이션 바 라고 지난번에 설명을 드렸는데, 그녀석이 뒤로가기 버튼이나 메뉴 버튼을 눌렀을 때 어떤 동작을 취할지 명령을 내리는 컨트롤러 입니다. 아이폰 설정화면 상단에 보면 네비게이션 바가 있지요^^
클래스 : UINavigationController


이름 : Tab Bar Controller
설명 : 탭바를 통제하는 녀석입니다. 그 유명한 카카오톡 화면 아래에 보면 메뉴들을 보여주는 탭바가 존재하지요? 그 탭바를 눌렀을 때 어떻게 동작을 하게될지 결정하는 녀석입니다.
클래스 : UITabBarController


이름 : Page View Controller
설명 : iPad에서만 동작하는 녀석입니다. 말그대로 페이지처럼 동작하는 뷰들을 관리합니다.
클래스 : UIPageViewController

이름 : Search Bar and Search Display Controller
설명 : 아이폰에서 검색할 때 쓰이는 검색바와 그 검색 결과창에 어떤 것을 검색해서 표현해 줄지 결정하고 명령하는 녀석입니다.
클래스 : UISearchDisplayController


이름 : GLKit View Controller
설명 : 지난 번에 설명드렸던 GLKView를 관리하는 녀석입니다. 3D 사용을 위한 Open GL ES를 사용하는 뷰에 대한 조종을 합니다.
클래스 : GLKViewController


 이렇게 해서 IB의 Library에서 볼 수 있는 객체들에 대해 알아보았는데요, 사실 객체의 종류는 수도 없이 많습니다. IB에서 볼 수 있는 객체들은 일부에 불과해요..^^
화면에 보이지 않는 객체들은 수도 없이 많습니다.
하지만 걱정하지 마세요~
저와 함께 차근차근 신나게 알아보도록 해요~
일단 지난번과 이번에 본 것들은 아~ 이런것들이 있구나 하는 정도로 알아두시고 (물론 다 기억하시면 시야가 넓어지는 좋은 일이 생기지요..^^) 이후에 진행되는 내용들에서 잘 기억이 나지 않거나 이해가 가지 않는 부분이 생기면 돌아와서 한 번쯤 돌아보시는 것도 좋을 것 같아요.

오늘은 iOS화면구성과 iOS 동작에 대한 내용 아주 초큼, 그리고 화면에 보이지 않는 객체들을 일부분 살펴보았습니다.

혹시나 올바르지 못한 내용을 발견한 고수분들은 의견주세요^^*

다음에는 무엇을 해볼까요?ㅎ
이 블로그의 주인은 여러분들입니다. 여러분들이 해보고 싶은 것들을 댓글로 말씀해 주시면 준비해 보도록 하겠습니다^*^

이론만 하기는 너무 힘드시죠?ㅎ
다음 번에는 한 번 실전에 들어가 보도록 할까 합니다~
고된 여행을 떠날 준비가 되셨나요?ㅎ

다음에 뵙도록 해요^~^
 


by yagom

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

RSS Feed 받기 


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

Posted by yagom

댓글을 달아 주세요

  1. 말썽쩡 2011.12.12 19:46  댓글주소  수정/삭제  댓글쓰기

    감사해요 막막했는데 이렇게 설명을 잘해주시다니 ㅋㅋ 잘봤어요 ^^

  2. 옥탑방원순이S 2012.03.03 09:58  댓글주소  수정/삭제  댓글쓰기

    진짜 신나게 읽었습니다.
    다음번 실전도 너무 재밌을 것 같아요 ^_^
    정리해서 책으로 내셔도 될 것 같아요~~~
    잘 봤습니다 ^_^

  3. 블루아빠넹 2012.04.20 09:13  댓글주소  수정/삭제  댓글쓰기

    정말 잘 보고 있습니다.
    친절한 포스팅 너무 감사하구요.
    앞으로도 꾸준한 포스팅 부탁드려요~!!

  4. 봇짱 2012.06.17 19:51  댓글주소  수정/삭제  댓글쓰기

    쉬운 설명 감사합니다.
    정말 잘 보고 갑니다.

  5. 자몽주스 2012.06.25 13:40  댓글주소  수정/삭제  댓글쓰기

    이제야 아이콘들이 어떤기능들을 하는지 알것 같아요 정말감사합니다.

  6. SODA 2012.06.27 16:13  댓글주소  수정/삭제  댓글쓰기

    죄송한데 IB가 무엇을 말하는 건가요?

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

      google에서 Xcode IB라고 검색하시면 제가 답변해 드리는 것 보다 훨씬 속시원한 답을 얻으실 수 있을 것 같아요 ^^*

  7. 딴또 2013.03.06 08:43  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 정말 감사합니다.

  8. ios 개발자 될놈.. 2013.05.08 19:04  댓글주소  수정/삭제  댓글쓰기

    야곰님 앞으로도 쭉,!!

  9. ryan 2014.06.17 09:38  댓글주소  수정/삭제  댓글쓰기

    아 글 너무 잘 읽고 있습니다. 안드로이드를 조금 만지다가 Swift 가 나왔다고해서 이참에 iOS도 배우고 있는 중인데요. 설명을 너무 잘 해주셨네요. Swift 에 관련된 강좌는 하실 계획이 없으신지요? :)

  10. 동기 2017.03.17 14:55  댓글주소  수정/삭제  댓글쓰기

    책을 안 사서 무작정 하고 있는데 이런 좋은 글들 때문에 서점이 망하지 않을까 우려가 되네요...ㅎㅎㅎ 감사합니다 잘 보고 있습니다!! 댓글을 웬만해선 귀찮아서 안 다는데 너무 감사해서 댓글 달고 갑니다 ㅎㅎ

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

      안녕하세요 동기님!
      덧글 고맙습니다 :) 너무 예전 자료라 많이 도움이 될지는 잘 모르겠습니다^^; 종종 들러주세요~

  11. 김성욱 2017.03.28 10:36  댓글주소  수정/삭제  댓글쓰기

    잘 봐씁니다. 감사합니다.


오늘의 주제

1. Object란??
2. 화면에 보이는 Object 종류 알아보기

여섯 번째 시간입니다.

지난번에는 Xcode를 한 번 살펴보았습니다~

오늘은 일단 화면에 보이는 녀석들이 무엇인지 한 번 파악해 봅시다..ㅎㅎ

자 이제 본론으로 고고 ^^
 

우리는 iOS프로그래밍(Cocoa Touch)을 할 때 Objective-C를 사용합니다.

물론, C나 C++등을 이용하여 프로그래밍도 가능하지만, 기본적으로 Objective-C를 사용하여 코딩한다고 생각합시다.

Objective-C는 '객체지향언어'입니다.

객체지향언어는 객체지향 프로그래밍을 지향하는데요...

아.. 처음 보는 분들은 도무지 무슨말인지, 뭔소린지 도통 모르시겠죠?ㅎㅎ

사실, 모든 것을 시작을 할 때 기초를 탄탄히 다지고 하는것도 좋지만 전 지금 여러분들이 프로그래밍에 대한 지식이 전무하다고 생각을 하고 진행해 볼 생각입니다.

일단, 머리아프게 생각하지 맙시다..ㅎㅎ

지금 기초부터 정말 탄탄히 다지고 싶은분들은..

객체지향언어, 객체지향 프로그래밍, Objective-C, 객체, 인스턴스, 메소드, 클래스에 대해서 역사부터 차근차근 공부하고 오시길 바랍니다. 그러면 조금 더 이해가 잘 갈 수도 있어요^^

하.지.만...

공부하고 되돌아 오시는 분들은 그렇게 많지 않을 것 같네요.ㅎㅎ

하다가 분명히 지칠 것 같아요^^..

그냥 간단간단하게 알아두고 차근차근 한 번 생각하며 나가 봅시다~

일단 저만 믿고 와보시라니까요^^~
아, 그리고 Cocoa Touch가 무엇이냐구요? 구글 검색 한 번 해보시길...^^ 크게 중요한 것이 아니라 여기서는 넘어가겠습니다~ 그냥 우리가 배우고 있는게 Cocoa Touch구나~ 정도 알아두시면 되겠습니다~ 


# Object란??

오브젝트라는 것이 무엇일까요?
아..!! 그 전에 미리 말씀드리는데, 지금 보이는 이 챕터의 원론적인 이야기들은 정 이해가 가지 않으신다면 일단 스킵하셔도 큰 무리가 없습니다. 나중에 다음거 보다가 이해가 안되시면 다시 돌아와서 보실일도 많을 거라 생각합니다. 그만큼 처음엔 굉장히 헷갈리는 부분이거든요..^^

다시 돌아와서 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를 배우지 않으신 분들이 아니라면 굳이 여기서 설명해 드릴 필요는 없을 것 같아요^^
다음 번 정도에 객체지향언어의 특징과 왜 객체를 사용하는지 정도에 대해서 간략히 설명해 드릴게요. (만약 제가 깜빡하고 안하면 댓글 남겨주세요..ㅎㅎ)


# 화면에 보이는 Object들 알아보기 
 
사실.. 오늘 이것만 하려고 했는데, Object에 대한 설명이 필요할 것 같아서 위에 아주 장황하게 써놓았네요..ㅋㅋㅋ
자, 본래의 목적으로 돌아왔습니다~
우리가 iOS기기들의 화면에 보이는 녀석들을 한 번 알아봅시다.
참, 이곳에서는 iOS5 기준으로 설명하겠습니다.
때에따라서는 iOS5 미만의 버전들에서 없는 것이 추가로 생긴것도, 있던것들이 없어진 것도 있으시 참고하세요^^

이름 : Page Control
설명 : 아이폰 홈 화면에서도 보이죠? 말그대로 페이지를 이동할 때 마다 페이지 상태를 보여주는 역할을 합니다. 또한 양 옆을 터치해주면 페이지가 넘어가는 역할도 하죠^^
클래스 : UIPageControl

이름 : Stepper
설명 : iOS5 부터 지원되는 녀석입니다. 생긴것만 봐도 아시겠죠? 값을 증감시킬 수 있는 버튼입니다~
클래스 : UIStepper

이름 : Table View
설명 : 말 그대로 테이블(표) 뷰 입니다. 뷰라는 것이 무엇인가요..?? 흠... 컴퓨터 화면에서 보이는 하나의 윈도우창이라고 생각하시면 될 듯 합니다. 일단 자세한 설명은 다음번에^^
클래스 : UITableView

이름 : Table View Cell
설명 : 테이블뷰 셀입니다. 말 그대로 테이블뷰의 기본적인 셀이 아니라 자신이 셀 모양을 직접적으로 만들어주고 싶을 때 사용하게 됩니다.
클래스 : UITableViewCell

이름 : Image View
설명 : View중에서도 이미지를 보여줄 수 있는 View입니다.
클래스 : UIImageView

이름 : Text View
설명 : View중에서 주로 장문의 텍스트를 볼 수 있도록 해주는 녀석입니다. 사용자들에게 수정, 편집, 복사권 등을 허용 또는 불허 할 수 있습니다.
클래스 : UITextView

이름 : Web View
설명 : View중에서 웹사이트 화면을 직접 보여줄 수 있습니다.
클래스 : UIWebView

이름 : Map View
설명 : 설명을 안해도 아시겠죠? 우리가 보는 지도 화면입니다..^^
클래스 : UIMapView

이름 : Scroll View
설명 : 위아래로 스크롤 할 수 있는 화면입니다. 그냥 View는 스크롤이 안돼요^^~ 눈치 빠른 분들은 눈치채셨겠지만, Text View는 Scroll View안에 글자들이 들어가 있는 것이라고 보셔도 무방합니다~
클래스 : UIScrollView

이름 : Date Picker
설명 : 날짜를 선택할 수 있게 만들어 놓은 녀석입니다
클래스 : UIDatePicker

이름 : Label
설명 : 사용자에게 텍스트를 보여줄 때 사용합니다. 여러줄을 나타낼 수 있지만 TextView처럼 스크롤은 불가능 합니다. 또한 사용자가 수정, 편집, 복사 등을 할 수 없습니다. 즉, 보여주기만 가능하다는 말씀!
클래스 : UILabel

이름 : Picker View
설명 : 뺑그르르 돌면서 선택할 수 있게해주는 그 녀석 아시죠?^^
클래스 : UIPickerView

이름 : Ad BannerView
설명 : iAd라는 iOS전용 광고를 사용할 때 사용하는 광고 배너창입니다~ 여기에 관해서는 나~중에 한 번 설명할 기회가 있다면 설명해 보겠습니다
클래스 : ADBannerView

이름 : GLKit View
설명 : OpenGL ES를 포합하는 뷰입니다.  3D관련 모듈을 iOS에서 보다 편리하게 사용하기 위해 만들어진 녀석인데요 iOS5에서 새로 선보였습니다.
클래스 : GLKView

이름 :Round Rect Button
설명 : 우리가 아이폰에서 자주 볼 수 있는 둥그스름한 버튼입니다~ 사실 이 모양 말고도 다른 모양으로 변환도 가능합니다~ 기본적으로 제공되는 버튼들이 많아요~
클래스 : UIButton


이름 : View
설명 : 위에서 소개해 드렸죠? 컴퓨터의 한 화면(창)이라고 보시면 될 듯 합니다. 자세한 설명은 다음 시간에^^
클래스 : UIView

이름 : Window
설명 : 영어 설명을 보시면 화면에 표시된 뷰를 관리하고 꾸미는 역할이라고 정의되는데, 뭐... 딱히 신경쓰지 않아도 될 녀석입니다. iOS에서는 하나의 윈도우가 기본적으로 밑바탕에 깔리게 되며, 하나의 윈도우 안에서 많은 뷰들로 화면이 보이게 됩니다. 사실 윈도우는 사용자에게 부각되거나 보이진 않는 부분이라는게 맞을 것 같기도 하네요~
클래스 : UIWindow

이름 : Navigation Bar
설명 : 익숙한 녀석일 거예요~ 화면에서 위에 Back버튼 보이면서 왔다갔다 할 수 있게 하는 상단의 바 아시죠? 그녀석입니다~
클래스 : UINavigationBar

이름 : Segmented Control
설명 : 사용자에게 몇 개 중 하나를 택일하게 할 때 쓰이는 버튼입니다. 대충 그림보면 답 나오죠?^^ 이것도 버튼과 마찬가지로 몇가지 형태가 존재합니다~ 사실 대부분의 View들은 속성을 조절하면 다양한 형태의 모습이 됩니다~ 마치 내 차에 스티커를 붙이거나 새로 도색을 하는 것 처럼요^^
클래스 : UISegmentedControl

이름 : Navigation Item
설명 : Navigation Bar에 들어가는 내용들을 총칭하여 Navigation Item이라고 합니다. 좌측 또는 우측버튼, 바 제목 등이 Navigation Item에 속합니다.
클래스 : UINavigationItem

이름 : Search Bar
설명 : 이 또한 굳이 설명하지 않아도..^^ 검색할 때 보이는 그 검색 바 입니다.
클래스 : UISearchBar


이름 : Tool Bar
설명 : 화면 상단 또는 하단 등에 바 형태로 여러개의 버튼들을 넣어 기능을 수행할 수 있게 만든 녀석입니다.
클래스 : UIToolBar

이름 : Bar Button Item
설명 : 툴바에 들어가는 아이템들을 총칭합니다. 네비게이션 아이템에도 포함됩니다.
클래스 : UIBarButtonItem

이름 : Fixed Space Bar Button Item
설명 : 화면상에 바 버튼 아이템들 사이에 정해진 간격만큼의 간격을 주는 녀석입니다. 실제로 점선은 보이지 않아요~
클래스 : 클래스 없음

이름 : Flexible Space Bar Button Item
설명 : 위에 있는 녀석은 고정 넓이라면, 이 녀석은 버튼들 사이를 균등한 간격으로 띄워주는 역할을 합니다~
클래스 : 클래스 없음

이름 : Tab Bar
설명 : 카카오톡에 보면 아래에 메뉴처럼 화면 옮겨 다닐 수 있게 몇개의 버튼들을 나열해 놓은 바 같은 곳이 있죠? 그곳이 탭바 입니다.
클래스 : UITabBar

이름 : Tab Bar Item
설명 : 말 그대로 탭바에 들어가는 아이템들을 총칭합니다..^^
클래스 : UITabBarItem

이름 : Text Field
설명 : 사용자에게 텍스트를 입력받을 수 있는 필드입니다.
클래스 : UITextField

이름 : Slider
설명 : 설정창에 음량조절, 화면밝기조절 등에 보면 많이 보이죠? 뭐 그런 역할 주로 합니다
클래스 : UISlider

이름 : Switch
설명 : 설정창에 보면 On/Off설정 하는 녀석 보이죠? 그 녀석입니다~
클래스 : UISwitch

이름 : Activity Indicator View
설명 : 여기 캡쳐에서는 잘 보이지 않지만... 대기 화면에서 뱅글뱅글 돌아가는 녀석 아시죠? 날 자꾸 기다리며 설레게 하는 그 녀석...ㅋㅋㅋ 그녀석을 Activity Indicator 라고 합니다. 인터넷 사용중에 화면 상단 Status Bar에서 돌아가는 작은 녀석은 Network Indicator라고 불러요~
클래스 : UIActivityIndicator

이름 : Progress View
설명 : 말 그대로 현재 진행상황을 보여줄 때 주로 쓰입니다. 주우우욱 차오를 때 마다 설레는 그 기분^~^
클래스 : UIProgressView


후아~
넘넘 길어요!! 
진이 쭉쭉 빠지네요...^^
열심히 한 만큼 많은 도움과 참고가 되었으면 좋겠네요~
지나가는 고수분 께서는 혹여 제가 실수한 부분이 있다면 지적 부탁드릴게요~
저도 사람인지라 방대한 양을 하려니 지치고 헷갈리는 부분도 더러 있네요~^^;
참..!! 그리고 여기 있는 설명이 부족하면 Xcode실행하셔서 Object Library에서 객체들 위에 살포시 얹어 놓고 기다리시면 도움말이 보일거예요~ 
아래 그림처럼요..^^



자, 그럼 오늘은 여기까지 해 보구요~
다음 번에는 iOS화면들이 어떤 관계에 있는지, 그리고 화면에 보이지 않는 객체들에는 어떠어떠한 것들이 있는지 1~2번에 걸쳐서 얘기해 보도록 할게요.
그리고 그 다음 번에는 객체지향에 관한 얘기를 조금 이어서 해 볼게요 :-)
그럼 모두 다음에 보아요~^^ 


by yagom

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

RSS Feed 받기 


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

Posted by yagom

댓글을 달아 주세요

  1. 무한도전 2012.01.11 09:10  댓글주소  수정/삭제  댓글쓰기

    설명 정말 쉽고 재밌게 잘 해주셨네요. 잊어버릴만한 내용들도 다시 떠오르고, 모르는 부분도 이해되구요. 잘 봤습니다. 감사해요~!!

  2. 옥탑방원순이S 2012.03.03 09:48  댓글주소  수정/삭제  댓글쓰기

    한번에 정리된 자료들로 보니 훨씬 이해가 쉽습니다. ^_^ 다음 강의로 더 정진!!!

  3. 나이마흔에앱만들기 2012.04.23 03:17  댓글주소  수정/삭제  댓글쓰기

    엊그제 시작했는데, 객체 붕어빵, 클래스 붕어빵틀에서 확 와닿는데요. 부지런히 배울께요. 배워서 남주셔서 감사합니다.

  4. 오싹이 2012.04.25 07:57  댓글주소  수정/삭제  댓글쓰기

     와~~~ 언제 이렇게 다 준비하셨나요!!!
    너무 고생이 많았겠습니다....
    너무 감사 드립니다.
    아이폰 개발 공부하려고 여기저기 찾다가 여기왔는데... 너무 정리가 잘 되어 있네요....
    열심히 공부하겠습니다.
    의욕이 생깁니다....

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

      도움이 되신다니 저도 기분이 좋습니다~^^
      시간이 되신다면 추천도 꽝꽝 박아주세요 ㅎㅎㅎ
      자주 놀러오세요~^^

  5. vip0331 2012.05.14 15:19  댓글주소  수정/삭제  댓글쓰기

    이렇게 보니 막 정리되는 기분이네요.
    많은양 만드시느라 수고하셨습니다.
    감사합니다. ㅎㅎ

  6. Favicon of https://rakubaru.tistory.com BlogIcon 산책고냥이 2012.06.26 09:54 신고  댓글주소  수정/삭제  댓글쓰기

    깔꼼하고 보기 쉽게 설명해주셔서 머리에 쏙쏙 들어와요!!

  7. Lewis6 2012.10.25 17:01  댓글주소  수정/삭제  댓글쓰기

    진심 감사드립니다~~!

    입문자를 배려한 강좌 정말 감동이네요 ㅎㅎ

  8. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.03 19:43  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다! :)

  9. 딴또 2013.03.06 07:38  댓글주소  수정/삭제  댓글쓰기

    번거롭고 힘든 작업을 정말 멋지게 하셨습니다. 감사합니다.

  10. 찰리 2013.12.30 15:25  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다. 잘 봤습니다.

오늘의 주제

1. Xcode 둘러보기


다섯 번째 시간입니다.
지난번에는  iTunes Connect에 연락처, 은행, 세금정보들을 등록해 보았습니다~
오늘은 개발에 쓰게될 Xcode를 본격적으로 살짝 열어 봅시다..ㅎㅎ
자 이제 본론으로 고고 ^^


# Xcode안녕??
지난 번에 아무 생각없이 그냥 말도안되는 앱 하나 만들어 보았습니다.
이제는 기초를 슬슬 쌓아 보아야 겠지요?
하지만, 체력만 좋고 전술만 좋다고 전쟁에서 이기진 않죠?
무기 다룰줄도 알아야 합니다..ㅎ
우리가 앞으로 매일매일 보아야 할 Xcode라는 녀석을 한 번 뜯어보도록 하죠.
Xcode실행!!
실행 못하시는 분은 없으리라 믿고..ㅋㅋ

지난 번에 지나가면서 보여드렸던 화면입니다.
Xcode화면구성을 간략히 보여주고 있는데요, 제가 부연설명을 쬐끔 하겠습니다..^^




각자 버튼들을 누르면 화면이 어떻게 변하고 어떤 동작을 하는지 스크린샷은 찍지 않았습니다.
감히 아뢰온데, 여러분들께서 직접 눌러보셨으면 합니다.

<1> 종료, 최소화, 확대
MS Windows와는 반대죠? 빨간놈이 종료, 노란놈이 최소화, 초록색놈이 확대입니다. 눌러보세요~

<2> 실행, 정지
어플리케이션 또는 테스트 단위.. 등등을 실행할 수 있는 버튼과 중지 하는 버튼입니다.
지난 번에 실행 한 번 눌러보셨죠?ㅎ
꾸욱 누르고 있으면 또 다른 녀석들도 나타납니다.. 그 녀석들은 추후에 설명하도록 해요~

<3> Scheme 선택
쉽게말해서, 이 앱을 어디에서 실행할까 설정해 주는 역할을 합니다. 시뮬레이터, 기기 등을 선택할 수 있습니다.

<4> Breakpoints
우리는 차후에 Debug라는 것을 할 때가 올겁니다. 디버그... 즉 벌레시키들을 잡아야 한다.. 버그를 없앤다 뭐 그런거죠 ㅋㅋ 여튼 그 디버그를 할때, 프로그램에서 의심가는 부분 등을 체크해 놓고 유심히 볼때 쓰는 그런 기능입니다. <13>의 Breakpoint gutter로 Breakpoint를 설정 해 줄 수 있고, 지금 이 버튼으로 Breakpoint들을 활성/비활성화 시킬 수 있습니다.

<5> 프로젝트명, 파일명
현재 작업중인 프로젝트와 파일명을 보여줍니다.

<6> 작업내역 확인창
아.. 위에 적은 것들은 제가 임의로 이름 붙인거예요.. 정식 명칭은... 궁금하면 찾아보세요..ㅋㅋ
빌드나 실행 중, 혹은 후에 결과들을 보여줍니다.

<7> 최대화
OSX Lion을 설치하신 분들이라면 보이는 최대화 버튼입니다.

<8> Editor Mode 버튼
화면 하단에 코드가 나오는 에디터 부분의 보기형식을 바꾸는 버튼들입니다.
궁금하시죠? 한 번 눌러보세요~ㅎㅎ 다 눌러보세요~
첫 번째는 단일 기본 화면. (Standard editor Mode)
두 번째는 두개의 에디터창이 생기는 모드. (Assistance editor Mode)
세 번째는 버전 에디터 모드. (Version editor Mode)
버전 에디터가 뭔지는 다음에 설명하도록 할게요~ 한 번에 너무 많은 것을 알면 머리가 뽀개집니다..ㅋㅋㅋ 궁금하시면 검색창에 버전컨트롤, 또는 Repository 등을 치면 많은 정보가 나올거예요.. 일단은 궁금증을 덮어봅시다 ㅋㅋ

<9> View 버튼
전체적인 화면을 크게보면 네 화면으로 나뉘는데요,
첫 번째 버튼으로 나왔다 사라졌다 하는 <11>영역. 네비게이터입니다.
즉, 소스파일이나 검색, 에러 결과창 등등 많은 것들을 우리에게 안내하고 보여주죠.
두 번째 버튼으로 나왔다 사라졌다 하는 <17>영역. 디버그영역입니다.
아까 말씀드렸듯이 버그 때려잡을때 쓰게되는 창입니다.
세 번째 버튼으로 나왔다 사라졌다 하는 <15>,<16>영역. 유틸리티입니다.
정말 유용하고 좋은 기능들을 가지고 있죠. 자세한 설명은 아래에서..

<10> Organizer
Organizer창을 띄우는 버튼입니다.
Organizer에서는 디바이스 관리, Repository관리 등등을 할 수 있구요, 우리에게 가장 필요하고 중요하고 개발 내내 친구가 될 Documentation을 볼 수 있는 창입니다.
개발 문서는 정말 너무너무 중요합니다. 추후에 설명해 드릴게요~

<11> Navigator
Project Navigator, Symbol Navigator, Search Navigator, Issue Navigator, Debug Navigator, Breakpoint Navigator, Log Navigator 등으로 이루어져 있습니다.
말 그대로 안내자 입니다. 현재 작업중인 프로젝트에 관련한 대부분의 내용을 이곳에서 훑어 볼 수 있습니다. 한 번씩 쭈욱 눌러보고 돌아보세요~ 아무런 문제 생기지 않습니다..ㅎㅎ

<12> Jump Bars
프로젝트 내부의 여러 곳들을 점프 점프 하면서 다닐 수 있는 막대기 입니다..ㅋㅋ 한 번 눌러서 여기저기 점프하고 놀러다녀 보세요~

<13> Breakpoint gutter
아까 위에서 말씀드린대로 Breakpoint를 지정할 수 있는 막대 공간입니다.
한번 콕 찍어 눌러보세요. 그럼 퍼런놈이 생깁니다. 이것이 Breakpoint인데요 동시에 <4>영역 Breakpoints도 활성화 될거예요. 그러면 또 Breakpoints도 눌러서 비활성화도 시켜보고 놀아보세요. 그러고 다 놀만큼 놀아보셨으면 Breakpoint들 다 제거해 주세요 ㅋㅋㅋ 제거하는 방법은 스스로 연구해 보시길!! 여러가지 있으니까요..^^
참고로 네비게이션영역에선 프로젝트의 모든 것을 훑어 볼 수 있다고 말씀드렸죠?ㅎ

<14> Editor area
말그대로 에디터 영역입니다. 우리가 소스코드를 작성, 수정하는 곳이죠. xib파일을 누르면 물론 IB 화면이 나옵니다. 이 말이 무엇이냐구요? 저번에 해 봤잖아요~

<15> Inspector pane
인스펙터 판입니다. Inspector하면 한국어로 검열자, 감시관, 감독관 등등의 뜻이있죠? 여기선 관리감독이 가장 맞는 표현이 아닐까 싶은데요, 이녀석은 에디터 영역에 선택된 것들의 속성, 정보 등등 모든 것들을 알고 있구요, 내가 선택한 Object또는 코드내용에 대한 속성과 도움말 등등 많은 것을 알려줍니다. 한 번 프로젝트의 모든 파일들을 한 번씩 클릭해 가며 어떤 내용들을 담고있는지 확인해 보세요~ 

<16> Library pane
말그대로 라이브러리 판입니다. 
File Template Library, Code Snippet Library, Objects Library, Media Library 등이 있습니다. 이곳에도 정말 많은 정보들이 있습니다.
파일 샘플, 코드 샘플, 오브젝트들, 미디어 라이브러리..
그 중 우리가 제일 많이 보게 될 라이브러리는 오브젝트 라이브러리구요, 그 다음으로는 간간히 코드 샘플도 보게 될거예요. 코딩 초보라면 코드 샘플도 많이 많이 봐두시면 좋아요~
비단 Objective-C뿐만 아니라 C/C++샘플 코드들도 있거든요^^

<17> Debug area
말그대로 디버그 할 때 쓰는 영역입니다.
지금 화면 모드가 두개로 나뉘어진 모드인데요.
왼쪽에 보이는 것이 변수들이 나올 창이구요, 오른쪽에 보이는 것이 콘솔창입니다.
디버깅 할때 왼쪽 창에는 변수들과 그 메모리 주소 등이 나오고, 오른쪽에서는 콘솔에 로그들이 찍혀 나오겠죠? 지금 잘 몰라도 차츰 배워가면 되니 걱정마세요~


오늘은 여기까지..^^
지금 있는 설명들은 최대한 간략하게 정리 해 본거예요~
어디 하나 쓸모없는 것 없이 기능들을 알차게 잘 만들어 놓았으니 이것저것 만져보며 익숙해 지시길 바랍니다. 어떤 버튼이 어떤 기능을 하는지도 파악해 두시면 좋구요..^^
또한, 제가 가르쳐 드리지는 않았지만 각 기능에는 대부분 단축키가 있죠? 한 번 알아보세요~
첫 습관과 첫 기초가 중요합니다. 빨리 무언가 해보고 싶더라도, 꼭 한번 Xcode를 쥐잡들이 뜯어보세요 ㅎ
자, 그럼 다음에 뵙겠습니다~


by yagom

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

RSS Feed 받기


 

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

Posted by yagom

댓글을 달아 주세요

  1. 옥탑방원순이S 2012.03.03 09:43  댓글주소  수정/삭제  댓글쓰기

    이렇게 멋드러지게 잘 설명해주시다니 ^_^
    시중에 파는 책보다 훨씬 낫네요!!
    책에서는 대부분 xcode3 버전으로 된 것들이 많아서
    많이 헷갈렷거든요 >.<
    열심히 배우고 멋진 앱 만들기 도~전!!!

  2. 더벅머리 2012.05.09 17:56  댓글주소  수정/삭제  댓글쓰기

    기초와 기본이 중요하다!!! 새겨듣겠습니다!! 저도 의욕만 앞서 기초와 기본을 제쳐둔 것이 아닌가 돌아보게 되네요. xcode란 프로그램을 일단 잘 알아야 코딩도 할 수 있는 법!! 오늘부터 좀 더 그 녀석이랑 친해져볼께요!~!

  3. 초보kay 2012.07.23 17:23  댓글주소  수정/삭제  댓글쓰기

    많은걸 배우고 갑니다. 감사합니다.

  4. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.02 22:48  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다. 잘 배우고 갑니다. :)

  5. 딴또 2013.03.06 07:15  댓글주소  수정/삭제  댓글쓰기

    정말 너무 감사합니다. 열심히 공부하겠습니다.

  6. 차나한잔 2013.03.19 19:01  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다. 너무 잘 보고 있습니다. 추천 100만번 꾸욱 누릅니다~ ^^

  7. 조언이필요한자 2014.02.20 10:34  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 질문이 있어서요 ㅠㅠ

    프로젝트명을 변경하려고 하는데요

    인터넷 찾아서 View - > Utilities - > File Inspector 클릭후

    변경이름을 치고 리턴을 쳤습니다

    그리고 Rename 으로도 해보고 Don't Rename 을 클릭 하여 프로젝트 명이 변경된것으로 보였는데요

    이제 실행을 시키면 Apple LLVM Compiler 5.0 error 라면서

    Command /Applications/xcode 5/Xcode 5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1

    이 에러가 나는데 해결 방법좀 알려주실수 있을까요??ㅜ

    읽어주셔서 감사합니다.

    좋은하루되십시오~

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

      안녕하세요!

      일단 프로젝트 명 변경 방법부터 잘못되긴 했는데...

      음... 우선 클린 후 빌드해 보시구요...

      뭐가 잘못되었는지 딱히 잘 모르겠어요..ㅠ

오늘의 주제

1. iTunes Connect에 계좌정보 입력하기


네 번째 시간입니다.
지난번에는 iOS Developer Program 등록 마무리와 개발을 위한 인증서 및 프로비저닝 파일 설치를 했구요~
이번에는 iTunes Connect에 대해 조금 알아봅니다~
자 이제 본론으로 고고 ^^


# iTunesConnect에 계좌정보 입력하기
지난 번에 마지막으로 도착한 의문의 이메일이 있었습니다.
참지 못하고 눌러보신 분들도 계시겠습니다..^^
그 메일이 왜 왔는지 한 번 살펴보도록 할게요~
기쁜 마음으로 iTunes Connect를 클릭해 볼까요?? 후훗..

물론 직접 http://itunesconnect.apple.com/ 으로 진격하셔도 됩니다~! 고고씽~


로그인을 해달라고 하네요~

기쁜 마음으로 로그인~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile26.uf@1946BD3C4EB0FCDA093DC3.png%7Cwidth="500"_##]
또.. 약관에 동의 하라네요~ 뭐 해야지요~
동의~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile23.uf@1746BD3C4EB0FCDA0A786C.png%7Cwidth=%22500%22%20height=%22330%22%20alt=%22%22%20filename=%223.png%22%20filemime=%22image/jpeg%22%7C_##]
자.. 이제 연락처, 세금, 뱅킹 정보를 입력하는 화면이 나옵니다.
All이라고 써있는 줄의 Request버튼을 눌러줍니다.

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@1946BD3C4EB0FCDB0B63A7.png%7Cwidth=%22500%22%20height=%22401%22%20alt=%22%22%20filename=%224.png%22%20filemime=%22image/jpeg%22%7C_##]
물론 또 약관이 나오겠지요?
동의해주시구요~


동의 했으니 당연히 고마워 해야죠~
Done버튼 클릭~
 


일단 연락처 정보 먼저 입력해 봅시다. Contact Info의 Set Up버튼을 클릭~


현재 나의 연락처 정보가 입력이 되어있지 않으므로, Add New Contact 클릭~


요런 창이 올라오면 이름, 성, 이메일주소, 직위, 전화번호를 차례로 적어줍니다. 팩스번호는 적지 않아도 무관합니다.
직위에는 개인개발자 또는 1인기업이라면 President라고 적어줍시다.
나 혼자니까 내가 짱이잖아요 ㅋㅋㅋ
만약 회사라면 적당한 직위를 적어주면 되겠습니다.


관리자, 회계, 기술, 법률, 프로모션 담당자가 전부 저군요...ㅋㅋㅋ 전부 세팅해 주고 Done버튼을 눌러줍니다.


자, 이번에는 은행계좌 정보를 입력해 봅시다.
Bank Info 의 Set Up버튼을 눌러줍니다~


미리 저장되어 있는 계좌 정보가 없으므로 Add Bank Account버튼을 눌러줍니다~


은행계좌가 저는 한국꺼 밖에 없으므로.. 한국을 선택해 줍니다.
Korea, Republic of
아... 우리나라는 민주공화국인데... 맞나요? 흐음...
민주 공화국이었나...?
지금 민주공화국이라고 왜 생각이 안들까요...
아! 사설 죄송합니다 ㅋㅋ
젠장 대한민국은 민주공화국인데.. 젠장


여튼 이제 은행 코드를 입력하라고 나오는데요, 우리가 은행코드를 어찌 알겠습니까.
Lookup your Bank를 클릭!


저는 이름으로 검색해 보았습니다.
영어로 검색하셔야 합니다~
자신의 은행정보를 클릭하고 Next를 눌러줍시다.


은행이 맞는지 확인하고 다음 클릭해 줍니다.


계좌번호를 입력하구요, 이름, 그리과 화폐단위는 저는 KRW즉, 한화를 선택했구요, 전화번호를 입력했습니다.
그러나 여기서 주의할 것은 Account Holder Name. 즉, 계좌주 이름이 정확하지 않으면 입금되지 않는다는 내용이 주의사항으로 나와있습니다.
저는 자신의 은행의 고객센터에 전화하여 꼭 영문명을 확인하시길 추천드립니다.
저도 혹시나 해서 전화해보니 아예 영문명이 등록이 되어있지 않아 전화상으로 영문명을 등록했습니다.
카드나 여권 등에 적힌 것과는 달리 은행에 등록되는 영문명은 또 다르니 꼭 확인하시길 바랍니다.


내용이 맞는지 확인하고 저장을 눌러줍니다.
내용이 맞지 않으면 추후에 수입이 들어오지 않을 수 있으니 잘 확인하시길 바랍니다.


자신의 은행정보를 선택하고 저장을 눌러줍시다.


자 이제 Tax Info의 Set Up 버튼을 눌러줍니다. 이건 스샷을 못찍었네요..^^
그럼 아래와 같은 화면이 나옵니다.
우린 호주인도 아니고 캐나다인도 아니고.. U.S. Tax Forms는 모두에게 필요하다고 하니 그거 작성해 줍시다.
U.S Tax Forms의 Set Up버튼 클릭!


미국 시민권자이거나 거주자냐고 묻네요. 아니니까 No.


미국에서 사업중이냐고 묻네요. 아니니까 No.


아래 칸들을 잘 작성해 주시고 확인 버튼 클릭.


다시 한 번 확인하라고 하네요. 앞으로 웹상으로 수정이 불가능하다고 경고하네요. 다시 한 번 확실한지 확인하고 제출합니다.


이번에는 iAd Network에 정보를 등록합니다.
iAd는 애플이 제공하는 모바일 광고 플랫폼입니다.
언제 쓸줄은 모르지만, 뭐 쓰던 안쓰던 나중에 언제 쓸지도 모르고, 지금 시간 얼마 안걸리니까 요것도 작성해 줍시다.
작성방법은 아까와 마찬가지이지만, 이미 정보를 다 등록해 놓았으므로 선택하고 제출만 눌러주면 됩니다. 
방법은 동일하기 때문에 따로 안찍었습니다.


자, 이렇게 하여 모든 정보를 다 입력하였습니다.
추후에 확인이 완료되면 Status가 Processing이 아니라 유효기간이 나오게 됩니다. 


이렇게요~


자, 드디어 등록이 끝나고 iTunes Connect 홈 화면으로 왔습니다~
iTunes Connect에서는 내가 등록한 어플들을 관리하고, 수입과 다운로드 회수 체크 등 여러가지를 할 수 있습니다.
한 번 쭈욱 둘러보세요
어플을 하나 완성하기 전까지는 들어올일이 거의 없지만, 하나 완성하고 나면 자주 들어와볼 그런 곳입니다..ㅎㅎ



오늘은... 아쉽지만 여기까지~
이제 다음 부터는 본격적으로 어플 만들기에 필요한 것들을 차근차근 알아가 볼게요 ㅎㅎ
그럼 다음에 또 만나요~ :-) 

by yagom

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

RSS Feed 받기

Posted by yagom

댓글을 달아 주세요

  1. Favicon of http://talkit.tistory.com BlogIcon 가야태자 2012.06.06 22:08  댓글주소  수정/삭제  댓글쓰기

    음 오늘은 저도 이만 자야겠습니다. ^^;;

    내일 부터는 본격적으로 XCode를 통해서 공부를 해보겠습니다.

    앗 내일은 안되고 주말에 공부할 수도 있구요 ^^;;

  2. Favicon of http://hatnim.tistory.com BlogIcon 햇 님 2012.07.26 17:15  댓글주소  수정/삭제  댓글쓰기

    요즘 한창 iOS 앱 개발을 하는 도중인데 Lion 버젼으로 정리가 잘되어있어서 추천 꾹꾹 눌렀습니다.

    항시 개발은 준비과정에서 반이상은 먹고 들어가는거 같네요!

    구글링과 애플에서 제공하는 샘플코드로 머리 빡빡 굴리던게 뻥 뚫린기분입니다! ^-^

  3. poku 2012.09.04 10:23  댓글주소  수정/삭제  댓글쓰기

    만든 어플을 기기에 등록하는거만 하려면 이건 안해도 되죠..?

  4. 2012.10.30 21:31  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  5. Favicon of http://trapping.egloos.com/ BlogIcon TrappinG 2013.07.02 21:00  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다. 덕분에 수월하게 등록할 수 있었네요.

    다시 한번 감사의 말씀 드립니다.

  6. 김성욱 2017.03.25 14:07  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다

  7. Ted 2017.09.20 04:42  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다.~ 혹시

    Tax Information 등록하실 때, EIN 발급받으셔서 등록하셨나요?

    W-8BEN 폼에 어떻게 작성해야하는지 잘 모르겠네요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2017.09.20 22:48 신고  댓글주소  수정/삭제

      안녕하세요 Ted님,

      그 부분에 대해선 저도 자세히 모르겠습니다^^;

      요즘 등록할때는 어떻게 나오는지 잘 모르겠네요^^;; 도움이 되지 못해 죄송합니다!

오늘의 주제

1. iOS Developer Program에 등록하기

2. Xcode를 실행하여 첫 Application 만들어 보기 



두 번째 시간입니다.
지난 번에는 개발을 위한 준비와 ADC 등록, Xcode 설치 등 개발을 위한 기초준비를 해 보았습니다.
이번에는 iOS Developer Program 에 등록하고, Xcode를 한 번 실행해 볼까 합니다~
자 이제 본론으로 고고 ^^


# iOS Developer Program 등록하기 
iOS Application을 개발 기기에서 테스트하고 App Store에 배포하기 위해서는 iOS Developer Program 에 등록을 해야 합니다.
하지만 이는 연 회비 $99입니다.
자, 당장은 이것에 가입할 필요는 없습니다. 다만, 어플리케이션 배포 최소 한 달 전에 등록하실 것을 권해드립니다.
그럼 시작해 봅시다~
다시 ADC로 이동합니다.

http://developer.apple.com/

자, 이제 좀 익숙해 지셔야 합니다 ㅎㅎ
iOS Dev Center로 이동합니다.
[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile5.uf@141240484EA26A4E316DB0.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_2.png%22%20filemime=%22image/jpeg%22%7C_##]
로그인 해주시구요~
 

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile9.uf@181240484EA26A563CD9F8.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_3.png%22%20filemime=%22image/jpeg%22%7C_##]

아이디 비밀번호 입력하시고 Sign In 클릭!
[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile9.uf@131240484EA26A5F47E873.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_4.png%22%20filemime=%22image/jpeg%22%7C_##]Join the iOS Developer Program 클릭!

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile4.uf@141240484EA26A6049FE1B.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_5.png%22%20filemime=%22image/jpeg%22%7C_##]Enroll Now를 클릭해 줍니다.

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@131240484EA26A614A6B14.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_6.png%22%20filemime=%22image/jpeg%22%7C_##]자, 쭉쭉 계속~ Continue~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile29.uf@151240484EA26A624B88D5.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_7.png%22%20filemime=%22image/jpeg%22%7C_##]
우리는 이미 ADC에 가입되어 있으니 Existing Apple Developer 이고, 이미 등록된 개발자이므로 위에 라디오버튼에 체크 해 주시고 Continue~ 

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@161240484EA26A624C0FFB.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_8.png%22%20filemime=%22image/jpeg%22%7C_##]우리는 개인 개발자 입니다.
Individual클릭!
(만약 기업용 ID를 생성하시려면 Company를 클릭하세요~) 

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile22.uf@181240484EA26A634DB07B.png%7Cwidth=%22480%22%20height=%22381%22%20alt=%22%22%20filename=%222_9.png%22%20filemime=%22image/jpeg%22%7C_##]
로그인 해주세요~



자 이제 본격적인 등록절차입니다~
이름과 주소 등이 정확하게 입력되어있는지 확인해 주세요.
특히 이름과 성 등은 자신이 지불할 카드 앞면에 기재된 영문명과 일치하게 작성하셔야 합니다. 
다 확인하셨으면 Continue~ 


우리는 iOS Developer Program에 등록합니다.
선택해 주시고 Continue~
 


정보가 모두 정확히 작성되었는지 확인합니다.
Continue~ 


라이센스에 동의 합니다. I Agree~
 


개발자 프로그램은 상품 형식으로 지불을 하게 됩니다. 개발자 프로그램 상품을 장바구니에 담습니다. Add to cart~
 


카트에 이쁜 상자가 담겨있습니다. 저넘이 뭐길래 도대체 $99나..ㅋㅋ
일단 결제하기로 마음먹은 이상 과감하게 쭉쭉 진행합시다!
지금 결제 클릭!
 


다시 한 번 로그인 해 줍니다.


배송 연락처와 주소를 입력한 후 계속을 누릅니다.
사실 크게 중요한 부분은 아니지만 너무 대충 쓰지는 마세요~
이왕 쓰는거 한자 한자 정성스럽게 입력해 봅시다 :-)
 


이제 드디어 걸제정보를 입력하는 시간입니다.
국민카드, BC카드, 롯데카드, 삼성카드, 신한카드로 결제가 가능하네요.
자신이 소지한 카드와 할부개월수를 선택해 준 후 계속~
 


약관에 동의를 해 주시고 또 계속~
 


오른쪽에 결제 진행을 눌러줍니다~


결제 창이 떡하니 뜹니다.
또 약관에 동의 해 주시고... 


결제 정보를 입력해 주시고 입력 클릭!
 


결제가 완료된 화면입니다.
화면 위쪽에 보시면
'고객님의 주문을 처리 중이며 곧 확인 이메일이 발송됩니다.' 라고 나오네요.
새 창을 열어 이메일을 확인 해 봅시다.
 


네, 메일이 와 있네요.
 


스토어 주문내역 주문확인 창입니다.
배송이 '이메일로 24시간 이내'라고 써있네요. (아마 제 생각에는 영업일 기준 24시간 인듯 합니다. 주말엔 일하지 않는듯...)
네, 아무리 $99를 결제했다고 해도 도도한 애플은 바로 떡하니 개발자 프로그램에 등록해 주지 않습니다.
내 정보가 신용이 가는 정보인지, 개발자로 등록을 해주고 이 사람이 개발한 어플을 자신들의 앱스토어에 등재해도 될 만큼 신용이 있는지 등을 파악하고 등록해 주는 것 같습니다.
그. 래. 서. 누차 말씀드리듯이 내 정보는 정확하고 깔끔하게 입력해 주시는 것이 좋습니다.


iOS Dev Center 화면입니다. 자신의 아이디로 로그인 해 보면 나의 등록 현황이 나옵니다.
24시간 내에 주문 확인 메일과 등록 메일이 온다고 하네요. 24시간 안쪽에 메일을 받는다..
언제 올지 모르잖아요~ 그래서 그 기다림의 시간 동안 우리는 Xcode를 켜 봅시다.
드디어 켭니다!
Xcode 어떻게 실행하냐구요?
이런... 
힌트! 
/Developer/Applications
 


Xcode 첫 실행화면입니다.
네 개의 메뉴가 나오는군요.

1) Create a new Xcode project
   - 새로운 Xcode 프로젝트를 생성합니다.
   - 프로젝트는 하나의 어플리케이션을 만들기 위한 모든 것들의 묶음 이라고 생각하시면 됩니다. 하나의 어플리케이션을 만들기 위해서는 하나 또는 그 이상의 프로젝트의 묶음이 필요한데요, 기초적이고 간단한 어플리케이션은 하나의 프로젝트 안에서 모든 것들이 이루어 진다고 생각하시면 됩니다. 즉, 하나의 어플리케이션을 만들기 위한 큰 묶음이라고 생각하세요.
예를 들어, 우리가 하나의 책을 쓴다고 생각할 때 그 책 한권을 프로젝트라고 생각하시면 됩니다. 프로젝트(책)에는 책 표지부터 시작해서 목차, 내용, 저자 정보, 서문, 본문 등등 책의 모든 내용이 들어있을 것입니다. 그것이 프로젝트 입니다. 

2) Connect to a repository
    - 전문 개발자, 협업 개발자가 아니라면 지금 당장 이해하지 못할 부분이 많다는 판단이 들어 네이버 백과사전에게 설명을 넘기도록 하겠습니다. Repository(네이버 백과사전)

3) Learn about using Xcode
    - 말 그대로 Xcode사용법을 기술해 놓은 문서입니다. 영어 되시고 시간 되시면 쭉 정도해 보시길 권해드립니다. 제가 여기서 설명하지 못하는 많은 정보들이 담겨 있을테니까요^^

4) Go to Apple's developer portal
    - ADC 웹사이트로 이동합니다. 



자. 이제 메뉴에 대한 설명은 대충 끝났구요, 미친척 하고 Create a new Xcode project를 과감히 눌러 줘 봅시다.
여러가지 프로젝트 템플릿이 있습니다.
가장 기본적인 템플릿은 역시나 Empty Application이겠죠?
아주 기본적인 틀만 제공을 하고 개발자가 원하는 것들을 조금씩 추가해 나가는 형식입니다.
하지만 우리는 Single View Application을 선택하고 Next~



이제 프로젝트 옵션들을 선택할 수 있는 창이 나옵니다.

1) Product Name
저는 Product Name 을 MyFirstApp으로 지정해 주었습니다.
Product Name은 말 그대로 만들어질 어플리케이션 이름을 말하는데요, 추후에 앱스토어에 등록할 때나 어플리케이션 아이콘 아래에 나오는 이름은 변경 할 수 있으니 Product Name에 그리 큰 의미를 두지는 않으셔도 됩니다. 영어로만 작성하셔야 하며, 첫 글자는 대문자로 띄어쓰기 없이 생성하시기를 강력히 권고합니다.

2) Company Identifier
말그대로 회사 ID인데요, 일단 뭐 자신의 별명을 적어 봅시다.

3) Bundle Identifier
이 어플리케이션만의 고유식별 ID입니다. 자동으로 생성되어 입력되어집니다.

4) Class Prefix
클래스 접두어 입니다. 일단 기본적으로 XYZ라고 되어있는데, 그대로 놔둡니다.

5) Device Family
iPhone, iPad, Universal 세가지가 있는데, iPhone을 선택하면 iPod, iPhone, iPad 모두에서 동작 할 수 있구요, iPad버전은 iPad에서만, Universal도 모든 기기에서 동작할 수 있습니다.
iPhone과 Universal의 차이점이라면, iPad에서의 동작 방식의 차이에 있습니다.
iPhone 버전 어플리케이션을 iPad에서 동작시키면 화면을 확대해서 사용할 순 있지만 iPad전용 어플리케이션이 아니기 때문에 iPad전용 기능들을 사용할 수 없고 화질 또한 낮아지게 되겠지요.
Universal은 하나의 프로젝트에서 iPhone과 iPad 코드를 모두 관리하게 되며 앱스토어에서도 아이콘 하단에 + 표기가 되며, iPhone버전과 iPad버전 어플리케이션이 함께 나오게 됩니다.

일단 우리는 iPhone으로 선택해 주고 Next를 클릭!

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile29.uf@196C24414EA2797D25DD10.png%7Cwidth=%22480%22%20height=%22330%22%20alt=%22%22%20filename=%222_31.png%22%20filemime=%22image/jpeg%22%7C_##]


이제 드디어 어디에 저장할 것이냐고 묻네요.
저처럼 목록 층계 방식으로 나오지 않으면  상단의 보기 옵션 아이콘들 중 자신이 편한 것으로 변경해 줍니다.
일단 저는 데스크탑(바탕화면)에 새 폴더를 만들어 보겠습니다.
 



withYagom이라는 폴더를 생성하고 그곳에 프로젝트를 저장해 보도록 하겠습니다.


프로젝트가 생성되었네요! 드디어 첫 화면입니다!
현재 나의 프로젝트가 선택되어 있고, 거기서 Summery탭에 있네요.
즉 이 프로젝트의 정보를 요약하고 있는 화면입니다.
화면구성이 저와 같지 않다면 우측 상단에 View 아이콘들을 클릭하여 화면 구성을 바꿔줄 수 있습니다.
또 뭐 이것저것 만져 보고 눌러보세요~ 절대 컴퓨터 폭발하지 않습니다. :)
이 화면에서의 많은 설명들은 다음으로 미뤄봅시다.
지금까지 한 것만으로도 머리아프잖아요^^

참, Xcode 사용 도중 갑자기 뜬금없이 창이 하나 뜨면서 암호를 입력하라고 나올 수 있습니다. 개발 문서와 라이브러리를 설치하기 위해 암호를 묻는 것입니다. (대부분의 맥 응용프로그램을 설치할 때에는 암호를 묻습니다.). 아마도 두 번을 묻게 될텐데요. 무시하지 마시고 암호 입력하여 문서와 라이브러리를 설치하도록 하세요^^

 



이것은 애플에서 제공한 Xcode화면 구성 설명 그림입니다. 뭐 그냥 한 번 봐두세요. 다음에 제가 설명 해 드릴게요~^^


자 그럼 좌측 Project Navigator에서 ViewController.xib라는 파일을 클릭해 봅시다. 위와 같은 그림이 나오는데요, 거기서 또 중간쯔음 View를 클릭해 줍니다. 그러면 오른쪽에 속성들이 주욱 나오는 화면을 보게 되실거예요~
만약 오른쪽 창같이 속성 창이 나오지 않으면 우측상단에 View라고 써있는 것 아래에 보이는 아이콘들 중에 네 번째 녀석을 클릭해 줘 봅시다.
그 후, 배경색을 바꿔볼게요. 속성 중에 Background에서 색상 옆의 화살표를 눌러봅니다.
 


아래 처럼 색상을 설정 할 수 있는 창이 뜨는데, 저는 검정색을 선택해 보았습니다.
다른 색을 골라보고 싶으시면 Other...누르시면 다른 색상 선택도 가능합니다~


자. 그런다음 Object들을 끌어와 봅시다.
우측 하단의 창에 보면 이상한 애들과 함께 설명들이 있습니다. 화면으로 마구 끌어잡아 와 봅시다.
 


화면에 올라오지 않는 애들은 그냥 두세요~ 안올라오는 애들이예요 ㅎㅎ
내 어플리케이션 화면 위로 그냥 무작위로 올려 봅시다.
 


그 후에 상단의 Scheme선택에서 iPhone 5.0 Simulator를 선택해 주고 좌측의 Run아이콘을 눌러줍니다. 혹은 커맨드 + R 키로 실행 해 볼 수도 있습니다.


짜잔!! 컴파일과 빌드가 끝난 후에 아이폰 시뮬레이터가 눈앞에 등장합니다!!
컴파일과 빌드가 뭐냐구요!? 너무 많이 알려고 하지 마세요... 다음 기회에^^

일단 여기까지 해서 아주 말도 안되는 초간단 앱 하나 만들어 보았습니다~

어떠세요? 점점 흥미로워 지나요?

다음 시간에도 저와 함께 해주실거죠?^^
 

다음에 뵙도록 해요!

by yagom

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

RSS Feed 받기
 

 



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

댓글을 달아 주세요

  1. Favicon of https://rakubaru.tistory.com BlogIcon 산책고냥이 2012.05.08 04:05 신고  댓글주소  수정/삭제  댓글쓰기

    마음먹은 김에 개발자등록도 마쳤습니다!!!
    앞으로 고고! 하겠습니다!

  2. vip0331 2012.05.14 14:47  댓글주소  수정/삭제  댓글쓰기

    너무 잘보고 갑니다.
    바로 세번째 글까지 보러 갑니다.
    감사합니다.

  3. Favicon of http://talkit.tistory.com BlogIcon 가야태자 2012.06.06 22:05  댓글주소  수정/삭제  댓글쓰기

    오늘은 네번째 강의 까지 보고 잘 생각입니다. ^^;;

  4. 자몽주스 2012.06.15 21:30  댓글주소  수정/삭제  댓글쓰기

    제가 필요한게 여기다 모였네요 감사합니다 차근차근 보겠습니다. 이걸 보고 따라 하다보면 제가 목표했던 것이 보일거 같습니다. 아이폰 어플개발하려고 책만3권샀는데 도통 무슨내용인지 하나도 모르겠네요...제가 기초가 없어서 그럴수도 있겠지만 이건 아직 황무지.... 개발하시는분은 많은데 배우는데는 아직 황무지 같습니다. 한줄기 빛과 생수한통을 발견한 느낌임니다.
    감사합니다.

  5. R 2014.05.10 18:39  댓글주소  수정/삭제  댓글쓰기

    아 ~ 정말 이렇게 쉽고 깔끔하게 설명된 블로그.. 몇 없는듯 해요~~
    자주자주 들어와서 배우겠습니다~
    감사해요~

  6. vezita 2015.07.29 12:15  댓글주소  수정/삭제  댓글쓰기

    야곰님 제가 최근에 스위프트 공부를 시작했는데 검색을 하다가 오게 되었습니다.
    위 글은 2011년 자료인데, 최신버전의 스위프트로 다시 써보시는건 어떨까요?
    야곰님이 쉬운 말로 차근차근 설명해주셔서 저처럼 초보자들이 보면 잘 이해할 수 있을 것 같습니다.
    그럼...^^;

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

      안녕하세요 베지타님!
      방문해 주셔서 고맙습니다 :) 당분간 Swift 위주의 포스팅을 하기는 좀 어려울 것 같아요 ㅠ_ㅠ 요즘 개인적인 사정이 복잡해서 ㅠㅠㅠ Swift 언어는 Playground라는 툴을 사용해서 익히기가 비교적 쉬운 언어입니다. 웹상에 많은 튜토리얼들이 있으니 한 번씩 따라해 보시는 것도 좋을 것 같아요 :) 당장 도움을 드리지 못해 정말 죄송스러운 마음뿐입니다 ㅠ_ㅠ
      저는 어떤 컨텐츠를 가지고 다시 돌아올지는 모르겠지만 2015년 안에는 다시 돌아올 계획입니다.
      관심과 덧글 정말 고맙습니다! 기회가 된다면 다음 컨텐츠에 반영토록 하겠습니다.

오늘의 주제

1. 개발에 앞서 준비하기

반갑습니다. 처음 뵙겠습니다.
저는 야곰이라고 합니다!
이렇게 저의 블로그를 찾아주시니 반갑기 그지없습니다.
iOS개발 준비를 하고 계신 분들을 위하여 허접하지만 작은 블로그를 하나 열었습니다.
그럼 바쁘신 분들을 위하여 서론 생략하고 본론으로 고고 ^^


# 개발 장비 준비하기
iOS개발을 위한 장비는 최소한의 조건이 딱 하나 있습니다.
Mac시스템일 것!
즉, Mac운영체제를 사용하는 시스템을 필요로 합니다.
공식적으로는 애플에서 판매하는 MacBook, MacBook Air, MacBook Pro, iMac, Mac mini 등등 다양한 제품이 있습니다.
각자 자신의 취향이나 사용 스타일에 따라 구매하시면 되겠습니다.
가격고 사양 등의 정보는 http://store.apple.com/kr 에 방문해 보시면 자세히 알 수 있습니다.
물론 중고제품을 구매하셔도 큰 상관은 없습니다.

또한, 개발 중에는 내장 iOS 시뮬레이터로 테스트 및 실행을 해 볼 수 있지만, 개발 후 배포 전에는 기기로 꼭 테스트를 해 보아야 하므로 자신이 개발 목표로 삼는 타겟 기기를 하나쯤은 구비를 해 놓으시는 편이 좋습니다. 당연한 이야기지만 시뮬레이터로는 가속도 센서 등 실제 기기에 들어있는 기능이 동작하지 않는 경우도 있습니다.

자, 이렇게 개발을 위한 기기가 완벽히 준비되었다면, 본격적으로 출발해 봅시다!


# 개발자 등록
iOS어플리케이션을 개발하려면 일단 ADC(Apple Developer Connection)에 등록이 되어야 합니다.
자, ADC로 가 봅시다!
http://developer.apple.com
자... 일단 자신있게 들어오긴 했는데, 죄다 영어라 이거 난감..=_=
하,지,만!
익숙해 지셔야 해요~ 앞으로 모든 애플문서는 영어로 만나게 되실테니까요~
오늘은 제가 자세히 안내해 드릴테니 걱정 마시고 스크롤만 내리면서 따라오시면 됩니다!!

자, ADC 홈페이지 입니다. 추후에 변경될 수도 있지만 현재 모습니다.
앞으로 그림을 보면서 제가 표시해 놓은 네모를 클릭하며 따라오세요~
일단 iOS Dev Center로 갑니다!


도착!
그럼 이제 등록절차를 시작해야겠죠?
Register를 클릭!


Get Start!!

우리는 새로운 아이디를 만들어 봅시다. Create an Apple ID에 체크하고 Continue~

개인정보 입력을 시작합니다.
자신의 이메일 주소가 아이디로 쓰이게 됩니다.

보통 포털 사이트 가입절차와 크게 다를것이 없습니다.
각각 필드를 ‘모두’ 채워주시고 Continue~

 


어떤 플랫폼에서 개발하고 어떤 관심사를 가지고 있는지 묻네요.
iOS를 체크해 주시고, 관심가는 곳에 대한 설문에 대답해 주시고 또 Continue~

약관에 동의를 하시고 Continue~  

메일로 인증코드를 보냈다고 나오네요~
메일을 확인하러 가 봅니다~


요로코롬 메일이 도착해 있네요.
인증코드를 입력해주고 또 Continue~

이로써 ADC에 iOS개발자 등록이 완료되었습니다.
이렇게 무료로 가입한 개발자들은 시뮬레이터는 무료로 사용하여 개발할 수 있지만, 내가 소지하고 있는 테스트 기기를 사용하려면 유료결제를 해야 합니다.
1년에 $99 라는 약간의 압박이 있긴 하지만, 앱을 만들어서 수익을 내면 $99 못받겠습니까 ㅎㅎ 그런 용기를 가지고 $99 까이꺼 결제해 봅시다.
하, 지, 만. 일단 참아봅시다. 잠깐만 기다리세요 ㅎㅎ 제가 다음에 알려드리겠습니다.

# Xcode 설치
자, 개발자 등록도 끝났겠다, 시작해 볼까요?
어? 그런데 뭐로 어떻게 시작해요?
네... ㅎㅎ 그래서 한 번 설치해 봅시다.
Mac OS 및 iOS 개발 툴 Xcode를 설치해 봅니다.
아래 스크린 캡쳐 이미지들은 OSX Lion 기준으로 작성되었기 때문에 다른 OS버전 ( Snow Leopard ) 사용자 분들은 약간 상이 할 수 있습니다. 하지만 기본적으로 비슷하니 걱정하지 않으셔도 되요^^
자, 그럼 설치해 볼까요?
일단, 그 전에!

 

왼쪽 위에 사과모양 메뉴를 클릭해 보시면 요런 메뉴가 나타납니다. 거기서 소프트웨어 업데이트... 라는 버튼을 클릭해 봅시다.
자신의 운영체제가 SnowLeopard라면 최신버전일 때 App Store이용이 가능하기 때문입니다^^

 

 

윈도우 업데이트와 비슷한 개념이라고 보시면 되겠습니다.

저는 최신 소프트웨어라고 나오네요. 만약 업데이트 항목이 나온다면 일단 먼저 모두 업데이트 하고 돌아와 주세요^~^

자 그럼 이제 진짜로 한 번 해봅시다.ㅋ
Finder에서
/응용 프로그램
또는
/Application
으로 이동해 봅니다.

Finder가 도대체 뭐냐구요??
윈도우의 탐색기와 같은 기능을 하는 맥 기본 어플리케이션입니다^^
아래 아이콘이 쭈욱 있는 Dock에서 사람 둘이 쏙닥거리고 있는 모양이 있는데, 그놈이 Finder입니다.
실행시켜 봅시다.

그런데.. /응용프로그램. 이게 대체 뭐냐구요?
윈도우즈에서는 경로 표시를 흔히 C:\Application 등으로 표현을 하지요. 하지만 매킨토시에서는 맨 윗 경로가 C:\가 아니라, / 로 표현이 됩니다. Root라고 표현해요.
그래서 Finder를 열어서 루트폴더를 찾아갑니다.
어떻게 가는지 정 모르겠으면 ‘커맨드키 + ↑ 방향키’를 연타해주세요 ㅎㅎ 그러면 어느새 루트로 와 있을거예요.

자 그럼 응용 프로그램 폴더 찾으셨죠?
그럼 그곳으로 이동해서


요 녀석을 찾아서 가차없이 더블클릭을 해 주세요!
더블클릭이 뭐냐구요?
........ㅋㅋㅋ 너무하다구요? 알겠습니다.

자 그럼 이제 아래와 같은 화면이 출현합니다.

  

 네, 앱스토어입니다.  

 

 스크롤을 아래로 쭉 내려보세요.
혹시 국가설정이 미국으로 되어있으면 클릭하여 대한민국으로 변경해 줍시다.

 


대한민국 스토어로 변경이 되었으면 이제 한글이 나옵니다...ㅎ

위쪽의 검색창에 Xcode라고 입력해 줍니다.

 


결과화면이 나오면 “무료”라고 떠있는 회색버튼을 눌러줍니다. 위와같이 녹색버튼으로 변경되면 “App설치”를 눌러줍시다.
그러면 로그인을 하라는 창이 뜹니다.
아까 만들어둔 개발자 아이디를 또박또박 입력해 주세용.
그러면 아래와같은 경고창을 만나게 되실텐데요.  

확인을 눌러주면 계정 정보 화면으로 넘어갑니다.
한글로 상세히 설명해줄테니 잘 따라가시면 됩니다.
참고로 마지막에 카드번호 설정하고 나면 $1 결제되었다고 문자오실텐데, 걱정하지 마세요. 가상결제고, 카드가 작동하는지 확인만 하는 절차이고 절대로 절대로 1달러 안나갑니다.
앱스토어에 무료라고 해놓고 1달러 왜 결제되나요? 여기까진 이해하겠는데, 욕해놓고 화내고 무조건 개발자 욕하는 이딴 댓글 저는 개인적으로 정말 짜증납니다..ㅠㅠ  

자 다운로드가 시작되면 이런 아이콘을 보게 되실거예요. (OSX Lion 기준).
(Snow Leopard 사용자는 아래 Dock에 생기실 거예요)

 

완료되면 이렇게 뜹니다.
자 가차없이 클릭해줍니다.  


다른 설치프로그램들과 별반 다를 바 없습니다. 저는 이미 설치되어 있기 때문에 업데이트라고 나오는데요, 처음 설치하실때도 그냥 계속 쭉쭉 진행해 주시면 됩니다.

 

 


이렇게 해서 설치까지 마무리가 되면 아래 화면처럼 Xcode창이 뜹니다.

위 화면이 Xcode 첫 화면입니다.

휴~ 여기까지 따라오시느라 수고 많으셨어요~
저도 힘들어 죽겠네요 =ㅅ=
여기까지 따라 오셨으면 기지개 한 번 쭉 펴주시고, 허리 한 번 쫙 펴주시고!!
나쁜자세는 개발자들의 최고 적입니다..ㅎㅎ
공복에 코딩도 적입니다.
전... 지금 공복에 작성중이지만 ㅠㅠㅋ

자, 그럼 오늘은 여기까지 하구요. 다음 번에 뵈어요~ :-)


다음 번에는...
1.Xcode 뜯어보기
2.$99 결제 도전!

 

RSS Feed 받기




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

Posted by yagom

댓글을 달아 주세요

  1. 정졍 2011.12.16 02:29  댓글주소  수정/삭제  댓글쓰기

    감사합니다

  2. Favicon of https://rakubaru.tistory.com BlogIcon 산책고냥이 2012.05.08 03:39 신고  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다!
    하나하나 차근차근 공부해서 어플을 개발하려고 합니다.
    종종 찾아오겠습니다!

  3. 더벅머리 2012.05.09 17:45  댓글주소  수정/삭제  댓글쓰기

    >_<으아니!! 이렇게 친절한 분이!!! 좋은 정보 쉽고 재미있게 공유하시는 것 같아요. 전 기획자인데 이번에 Objective-C 개발에 직접 발로 뛰게 되어서 혼자 이래저래 막공부 중이었거든요. 그러다가 마침내!! 오늘 야곰님의 블로그를 발견하고 희망의 빛이 내리쬠을 느낍니다!! 앞으로 자주 들러서 열심히 공부할께요!! >ㅂ</ 잘 부탁드립니다~~

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

      네~ 더벅머리님 반갑습니다^^*
      기획자랑 개발자랑 자주 싸우죠...ㅎ
      그래서 다른 분야 분들도 여기서 조금이나마 이해했으면 하는 바람도 있었는데, 딱 맞는 걸까요?ㅎ
      자주자주 놀러오세요~
      댓글도 왕창~ㅎㅎ

  4. Favicon of http://talkit.tistory.com BlogIcon 가야태자 2012.06.06 22:03  댓글주소  수정/삭제  댓글쓰기

    네이브앱에 한번 도전해 보려고 합니다.

    강좌 잘 경청 하겠습니다.

    감사합니다.

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

      찾아주셔서 정말 고맙습니다^^*
      저도 하이브리드 쪽이나 폰갭 같은 것 이용해서 만들어 보아야 하는데 아직 못해보고 있네요 ㅎ
      블로그 보니 내공이 상상하신 것 같은데 많은 질타와 도움 부탁드립니다^^
      자주 들러주세요 ㅎ

  5. Favicon of http://aircook.tistory.com/ BlogIcon Francis 2012.07.17 11:26  댓글주소  수정/삭제  댓글쓰기

    1년만에 다시 아이폰 개발 공부하니 기억이 잘 안나네요..xcode4도 많이 바뀐거 같고.. 정성들여 작성하신 글.. 다시 공부한다 생각하고 열심히 보겠습니다.

  6. 초보kay 2012.07.23 16:44  댓글주소  수정/삭제  댓글쓰기

    아이폰에 완전 초보라 처음부터 잘 보겠습니다.
    친절한 설명 감사드립니다.

  7. Nanashi 2012.11.22 20:47  댓글주소  수정/삭제  댓글쓰기

    오 멋지시네요. 정주행중입니다 ㅎㅎㅎ

  8. toddler 2012.12.11 12:01  댓글주소  수정/삭제  댓글쓰기

    아이맥 구입후 무엇을할까 고심하던중, 오랫동안 손놓고 있던 프로그래밍을 해보기로 결정했습니다. 자세한 설명감사합니다. 열심히 보겠습니다. 다시한번 감사드립니다.

  9. 차나한잔 2013.03.19 16:35  댓글주소  수정/삭제  댓글쓰기

    맥은 전혀 모르는데 갑자기 아이폰 앱개발 하게 되어 쫄아있었는데, 알기쉽고 상세하게 설명한 글 너무 감사합니다. ㅠ.ㅠ 인터넷 귀져봤는데 이만한 정보가 없네요. 정말 감사합니다. 저뿐만 아니라 많은 분들이 도움 받으실 듯 합니다. 글 한 줄 안남길 수 가 없네요. ^^

  10. Favicon of http://02log.com BlogIcon 땡이 2014.01.21 15:07  댓글주소  수정/삭제  댓글쓰기

    많은 양의 콘텐츠를 올리셨네요. 천천히 함 읽어보려고 합니다~~ ^^

  11. 정주행 시작 2016.11.29 18:33  댓글주소  수정/삭제  댓글쓰기

    2016.11.29 정주행을 시작하였습니다.
    매우 느릿느릿 하지만
    잘 부탁드리겠습니다.

    티스토리 블로그는 아니지만 개인적으로 가끔 끄적이는 블로그에 퍼가도 되는지 여쭙고 싶습니다.

    출처는 당연히 표기하겠습니다.

  12. 내일날씨맑음 2016.12.01 10:40  댓글주소  수정/삭제  댓글쓰기

    <정주행 시작>
    앞으로 요 이름으로 할게요. 티스토리 가입 권한이 없어서 ^^;
    스위프트만 하고 회사에 입사했는데, 스위프트를 사용할 일이 없어졌습니다.
    오래된 자료이지만 중요한 부분이 많아서 좋네요.
    종종 찾아뵐게요~