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

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

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

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

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

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

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



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

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

by yagom

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

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

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

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

RSS Feed 받기   

 


Posted by yagom

댓글을 달아 주세요

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

    좋은정보감사합니다^^

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

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


오늘의 주제

1. NSDictionary, NSMutableDictionary
2. NSArray, NSMutableArray



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

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

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

# NSArray

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

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

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

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

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

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

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

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

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

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


# NSDictionary

딕셔너리란???

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

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

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

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

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

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

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

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

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

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

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

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



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

# 실습해보기 

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


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


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

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

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

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

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

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

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


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

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


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

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


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


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

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


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

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

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

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

감기때매 헤롱헤롱 @_@

by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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

Posted by yagom

댓글을 달아 주세요

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    비밀댓글입니다

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

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

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

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

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

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

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

    비밀댓글입니다

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

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

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

    비밀댓글입니다

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

      T_T 죄송합니다...ㅠ

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

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

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

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

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

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

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

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

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

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

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

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

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

    질문은 끝이 없네요...

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

    수고하시구요~~~~

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

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

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

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

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

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


오늘의 주제


1. 실수 표현 방법


네 번째 시간입니다.

이번에는 사실 그다지 중요하지 않은 포스팅입니다.
그냥 해보는 깨알같은 팁!?ㅋㅋㅋ
서론 필요 없고 실습 시작입니다~!

# 실수 표현 방법

일단 새로운 프로젝트를 만들고 아래와 같은 코드를 입력하여 봅니다.


결과 출력 화면입니다.



간단하게 코드를 설명하자면...

일단 printf안에 %%라고 표현 한것은 로그에 %가 찍히게 하기 위함입니다...
뭐~ 그냥 그렇다구요 ㅎㅎ

%lf는 double형 실수를 표현하기 위한 출력 형식 지정자라는 것은 알고 계시죠?ㅎㅎ
그냥 %lf하면 컴파일러나 프로세서마다 다르겠지만 3532.0483940000... 이런식으로 대책없이 나오는 것이 보통입니다. 
그래서 좀 더 깔끔하게 출력을 하고 싶으신 분들이 있으실 겁니다.

%.3lf 라고 해주면 소수점 3자리 까지만 출력하라는 의미입니다.

마찬가지로 %.9lf해주면 소수점 9자리까지 출력하라는 의미입니다. 당연히 자리수가 없으면 나머지 자리에 0을 채워넣고 출력해주죠.

%10.3lf의 뜻은 총 10개의 칸에 표현하되 소수점은 3자리만 표현하라는 의미입니다. 물론 점(.)도 한 칸을 차지합니다. 다시 쉽게 설명하면 정수자리 6개와 소수자리 3개를 표현 할 때 이런식으로 작성하여 줍니다.

하지만 %3.3lf와 같이 부족한 칸 안에 표현하라고 하면 무시하고 그냥 원래대로 표기해 버립니다.

%10lf 하게되면 총 10개의 칸에 수를 표현하라는 의미입니다. 하지만 입력되어있는 숫자가 정수자리 4자리 + 점 1자리 + 소수자리 6자리 = 총 11자리 이기 때문에 10칸을 초과하죠? 그래서 그냥 무시하고 출력해 버립니다. 

하지만 %15lf하면 총 11자리 중에 4칸이 남기 때문에 좌측에 공백을 4칸 남기고 출력을 해 줍니다.

%-15lf 하면  총 15칸을 쓰지만 좌측정렬을 하라는 의미입니다.

%+15lf는 의미가 없습니다... 이상한 출력이 되지요?ㅎ 기본적으로 우측 정렬로 되어있기 때문에 의미 없는 표현이 되겠습니다..^^

별 의미 없어보이지만, 나름 팁이라고 생각하고 한 번 쯤 봐두시는 것도 나쁘지 않으실거예요^^

참, double형 뿐만 아니라 float형에서도 lf만 f로 바꿔서 해보시면 됩니다.ㅎ

이상 깨알같은 팁 포스팅이었습니다~!

다음에 뵈어요^^

by yagom

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

RSS Feed 받기  


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

Posted by yagom

댓글을 달아 주세요

  1. Sio 2012.07.11 15:08  댓글주소  수정/삭제  댓글쓰기

    실수 표현할때 많이 버벅였는데 도움이 됬습니다~~~*^^*
    잘보고갑니다~!

  2. chosamong 2012.08.24 20:40  댓글주소  수정/삭제  댓글쓰기

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

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

    캄사. 꾸우벅


오늘의 주제


1. 코드에 주석쓰기

두 번째 시간입니다.

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


# 주석

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

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

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

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

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


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


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


 결과 화면입니다~!

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


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


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


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


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

참 쉽죠잉!?

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

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

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

뿅!


by yagom

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

RSS Feed 받기  


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

댓글을 달아 주세요

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

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


오늘의 주제


1. Hello, World 콘솔에 찍어보기


첫 번째 시간입니다.

안녕하세요! 야곰입니다.ㅎㅎ
iOS 개발 포스팅을 하다보니 조금 더 상세히 알고 싶거나, 기초를 좀 더 다지고 싶으신 분들이 있을 것 같아 이렇게 Objective-C 언어도 포스팅을 시작합니다.
사실 C 또는 C++만 잘 알고 있어도 iOS개발에 큰 무리는 없습니다.
물론 다른 언어를 써 보신분들도 마찬가지 일거구요.
절차지향적인 언어를 쓰던 분들은 헷갈리는 부분들이 있을텐데, 그것은 iOS 포스팅 중간중간 설명을 넣구요~
뭐, 여하튼!
절차지향 언어인 C언어를 하니 객체지향 언어인 Objective-C를 한 번 해볼까 합니다.
물론 C++, C#, JAVA 등등 많은 언어들이 있지만!
여기는 iOS 개발부터 시작한 블로그니깐욬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
별다른 이유 없구요~ 한 번 해봅니다.
혹여나 필요한 다른 언어 있으시면 댓글 남겨주세요^^
잡소리 그만두고 이제 시작하도록 하겠습니다 ㅎㅎㅎ


# Hello, World !!
자, Objective-C 컴파일을 위하여 Xcode를 설치해 주세요~
 Xcode 설치 방법은 제 블로그 포스팅을 참고하시면 됩니다.

iOS개발하기 #1. 개발준비(1)  에서 '# Xcode설치' 를 참고하시면 되겠습니다^^


Xcode를 설치한 후 첫 실행화면입니다. 
Create a new Xcode project 를 선택해 줍니다.


여러 템플릿 중에 Mac OS X 템플릿 중 Application탭의 Command Line Tool을 선택하고 Next


Product Name을 MyFirstC로 지정해 주었습니다. 여러분들이 원하는 프로젝트명을 넣어주세요..^^
프로젝트는 하나의 프로그램이 완성되기 위한 단위라고 생각하시면 되겠습니다.
Type은 Foundation으로 지정해 줍니다.
Next를 누르시고 저장을 위한 위치를 지정해 주세요.

자, 프로젝트가 생성이 되었습니다.
대책없이 그냥 실행시켜 봅시다 ㅋㅋㅋ
화면 좌측 상단에 보시면 Run버튼이 있는데 클릭해 봅시다. 또는 단축키 커맨드+R입니다.


실행 결과 입니다.
뭔가 뿅 튀어나올 줄 알았는데 별거 없죠..?ㅋㅋㅋ
예.. 좀 시시하긴 합니다 ㅋㅋㅋ
화면 하단에 새로 올라온 창이 있는데, 디버그 영역입니다. 거기서 로그가 쫙 찍혀 나오는 곳이 디버그 콘솔입니다. 디버그 콘솔을 보면 뭐라뭐라 막 써있는데, 거기서 잠깐 보니 Hello, World! 라고 찍혀있는게 보입니다 ㅋㅋ
와우~
콘솔은... 음... 뭐 도스창, 아니면 터미널 등등 뭐 다 같은 개념으로 보시면 될거예요~
아! 디버그창이 제것과 같이 생기지 않았다면 화면 확대해서 잘 보세요 ㅋㅋ
제 디버그 콘솔 오른쪽 위에 보면 보기 옵션 버튼들이 있습니다.
두 개의 창이 나오는 가운데 녀석을 선택해 주세요~


근데 콘솔에서 우리는 Hello, World!만 보고 싶은데 시스템과 프로젝트 로그까지 찍혀나오니 어지럽지요?ㅎㅎ
그래서 우리가 보고싶은것만 보도록 합시다.
디버그 콘솔 왼쪽 위쪽에 All Output을 Target Output으로 변경해 줍니다.


그러고 나면 원하는 Hello, World!만 보여요 ㅎㅎㅎ


Xcode화면 좌측 파일 네비게션 영역에서 main.c파일을 클릭해 봅니다.


코드를 보면 NSLog(@"Hello, World!"); 이라고 작성되어 있을 텐데요~
아래 화면처럼 더 타이핑 해주고 실행해 봅시다.
아 그리고 줄마다 맨 끝에 붙는 것은 세미콜론 (;) 입니다.
우리가 글에서 쓰는 마침표라고 생각하시면 될거 같아요~
그렇다고 무조건 쓰는건 아니지만 대부분 코드안에서 줄이 끝날때 찍어주셔야 할거예요~


실행 결과 화면입니다.
별거없죠?ㅎㅎ 


  오늘은 간단히 콘솔화면에 출력하는거 하면서 놀아보았습니다 ㅎㅎ
그런데 화면에 보이는 초록색 글씨는 뭘까요?
하나도 안중요해 보여도, 무지하게 중요한 녀석중에 하나라고 할 수 있기에, 다음 번에는 그녀석에 대해 간략히 알아보도록 할게요~ 
다음번에 뵈어요^^* 

by yagom

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

RSS Feed 받기 


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

Posted by yagom

댓글을 달아 주세요

  1. 컴맹 2012.09.25 07:43  댓글주소  수정/삭제  댓글쓰기

    아~ 나머지 강의도 이렇게 쉬우면 얼마나 좋을까~~~~ㅎㅎ
    아이폰 어플만들기 위해서, XCode를 배우다보니 Object C문법을 좀더 잘알고 있어야될것같아요.ㅠㅠ
    좋은 강의 잘보고 갑니다.~~^^

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

      ㅎㅎ Objective-C를 제대로 하려면 머리 많이 아파지죠~
      그래도 정말 iOS 완벽하게 다루고 싶다면 Objective-C도 마스터 해봐야겠죠?ㅎ

  2. Favicon of http://www.facebook.com/suyongchoi7972 BlogIcon 합본취리42 2012.09.28 00:19  댓글주소  수정/삭제  댓글쓰기

    C언어만 배웠는데ㅠㅠObjective C도 될지 모르겠네요ㅠㅠ
    네이버에서 찾아가 즐찾해서 배워봅니다..ㅎㅎ
    계속 배워볼께요ㅋㄷ

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

      ㅎㅎ 제 블로그에 있는 내용들은 크게 어렵지 않으실 겁니다~
      블로그에 있는 내용들은 정말 많이 부족하기 때문에 다 보시고 더 알고싶은 내용들이 생기시면 Objective-C책을 한 권 사보시는 것도 나쁘지 않을 것 같습니다.
      즐겨찾기까지!!!
      영광입니다 ㅎㅎ 종종 들러주세요 :)

  3. ppange 2012.10.24 01:36  댓글주소  수정/삭제  댓글쓰기

    최고의 강의인것 같아요..
    왜 진작 이 사이트를 몰랐을까요..
    그동안 인터넷 강의에 허비한 돈을 생각하면 ㅠ.ㅠ
    Objective C 책 중에서 추천해 주실 만한 책이 있을까요?
    아직 책은 안사봤거든요.. ㅎㅎ

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

      안녕하세요 ppange님~!
      강의라고 하기도 부끄러운 것들이죠^^;
      찾아주시고 이렇게 덧글까지 남겨주시니 황공할 따름입니다.
      Objective-C책이 많은 편은 아니지만, 책 나름대로의 스타일이 있다보니 나에게 맞는 스타일의 책을 찾아보시는 것이 좋을 것 같습니다.
      직접 서점에 가셔서 책을 훑어보시는 것을 추천드립니다 :)
      두껍고 내용이 많다고 입문서로 좋은 것만은 아닙니다.
      처음에 쉽고 가볍게 접근 할 수 있으면서 알찬 내용을 가진 책을 골라서 시작하시고, 책마다 부족한 부분들은 어디든지 있으니 더 배우고픈 욕심이 생기면 다른 책들도 찾아보는 식으로 학습해 나가는게 좋지 않을까 싶습니다 ^^*
      큰 도움이 되어드리지 못해 죄송합니다 ㅠ

  4. 명상가 2013.01.05 14:59  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다~

    C 해보신분이면 별다른 어려움 없이 기분좋게 프로그래밍 할 수 있겠네요~

  5. 파워팰리스 2013.03.05 17:34  댓글주소  수정/삭제  댓글쓰기

    우와~! 최강 강좌입니다.
    책보다더 눈에 확들어와 너무 도움이 된 강좌였습니다.

    계속 안드로이드쪽으로 하다가 오늘부터 obj-c로 넘어왔는데요,
    자바랑은 좀 달라 모르는것이 많지만,
    하나 하나 저에게 큰 도움이 되네요 감사합니다.^_^