티스토리 툴바


초보가 쓰는 초보의 objective C - 2-1. OOP 소개


오랫만에 찾아뵙네요 :) 허접(?)한 강의 보아주셔서 감사하고 있습니다.

이번에도 동영상으로 하려다가, 동영상으로 하니 말이 정리가 좀 안되는 경향이 있어서, 그리고 이번에 이야기할 OOP내용은 사실 동영상보다는 글이 더 좋다고 생각되어 글로 남겨볼까합니다.

지난번과 마찬가지로 기본적인 내용입니다. 하지만 이번강의에서는 OOP내용을 설명하면서 Objective C 의 문법 몇가지를 이야기 할 것이므로 OOP에 친숙하신 분이라도 objective C를 처음 접하시는 분이시라면 한번 읽어보시길 권장합니다.

1. OOP
C++ 나 Java를 하시는분은 너무나도 잘 알고있는 부분이라 생각하지만 일단은 처음접하는 분을 기준으로 이야기하겠습니다.



지난시간에 첫강의에서 hello world 프로그램을 만들어보았습니다. C 에서도 만들어보았구요, objective C에서도 만들어보았는데요. C언어와 objective C의 차이가 무엇을까요? printf 와 NSLog 의 차이처럼 쓸수 있는 풍부한 kit들의 차이일뿐일까요? 사실 사용할수 있는 함수나 그러한 kit들은 C가 더 많을껍니다. 더 많은 기술들이 있을것이구요. (C가 가장 대중적으로 사용되기 때문이지요. 여기에는 한가지 어패가 있을 수 있지만 실제 그렇다고 볼수도 있지 않겠습니까?! :) 그렇다면 차이가 무엇일까요? 바로 OOP입니다.

OOP는 Object Oriented programming의 약자입니다. 번역하자면 객체지향 프로그래밍 이지요. 설명을 시작하게전에 이번강의에서는 새로운 용어들이 많이 나올것입니다. 실제로 Standford University에서 제공하는 iPhone programming 강의에서도 OOP 용어 라고 해서 강의가 따로있을정도입니다. 그러니 그냥 부담없이 받아들이시면 되겠습니다.

객체지향 프로그래밍은 프로그램제작을 아주 간결하게 만들어주는 하나의 방법입니다. 프로그래밍 뿐만아니라 프로그램에 대한 유지보수도 매우 쉽게 만들어주는 일종의 프로그래밍 스타일이라고 생각하시면 될것 같습니다. 우리가 이야기하고 있는 Objective C는 이름에서도 느껴지듯 이러한 OOP를 기반으로 정교하게(?) 설계되어진 언어이고 우리는 이것으로 재미있게(?!) 프로그래밍을 할수 있을꺼라 믿습니다(제발!)

자 그런데 아직 제가 OOP가 뭔지는 한마디도 하지 않았습니다. 아마 이 개념에 대해 잘 모르시는분은 뭔가 좋은것 같긴 한데 무슨말인지 모르겠다 하실것인데요. OOP 개념에 대해 정리해놓은 정말 훌륭한 문서가 있어 그 설명으로 대신하고자 합니다. 제가 사랑하는(?!) (왜냐면 과제할때 정말 훌륭한 도움이 되었던 사이트입니다. ) JOINC WIKI 의 OOP설명을 대신합니다.

OOP를 아시는분은 넘어가셔도 좋습니다만, 그게 아니라면 반드시 한번 읽고넘어가시길 권합니다. 글이 약간 오래되어 잘 안읽힐수도 있는데, 여튼 꼭 한번 읽어보세요 :)

출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/SoftWare_engineering/OOP

OOP 설명


저도 덕분에 다시한번 읽었는데요,,, 처음 프로그래밍을 시작하시는분께는 좀 버겁지 않나 생각되는 글이긴 합니다만 한번 알아둘 필요는 있습니다.

그래서 짧게 간추리자면 OOP 의 특징을 가지는 언어는 다음의 특징을 주로 가집니다.
1. Abstraction(Indirection)
2. Encapsulation
3. Polymorphism

저도 살짝 가물가물하긴 한데, 아마 맞을겁니다 :) 다른건 지금 특별이 이야기하지 않겠구요, 지금 이야기하고자하는건 Abstraction(Indirection)에 대한 이야기입니다.

Abstraction, 예전에 제가 존경하는 교수님중 한분이신 강순주교수님의 OS 수업을 들을때 가장 기억에 남는 용어중 하나입니다. 한글로하자만 "추상화" 이지요.

개인적으로 정말 재미있게 들은 수업중에 하나인데요, 교수님께서 OS에서 가장 중요한것은 바로 추상화! 라고 하시며 Active 하게 수업하셨거든요, 물론 과제도 매우 Active해서 학생과 조교 모두 밤좀 샜었습니다. Anyway, 추상화는 현대 프로그래밍에 있어서 정말 중요한것중에 하나입니다.

지난번에 printf 와 NSLog를 설명하면서 이런이야기를 한적이 있습니다. 우리는 단지 저녀석들만 써주면 된다고, 그 아래서 이게 어떻게 컴퓨터가 알아듣고 원하는 위치에 어떠한 방식으로 hello world를 찍어내는지는 우리가 전혀 알필요 없다고 말입니다. 그냥 컴파일러가 알아서 해서 OS에서 정확하게 일처리를 해준다고 이야기 했습니다. 바로 이것이 추상화(Abstraction) 입니다.

간단히 예를 들어 설명해보겠습니다. 얼마전에 제가 사기를 당해 사기친 인간의 계좌를 정지시켜버렸는데요, 은행에서 제가 한 일은 은행에 가서 서류에 사인을 한것이지요. 자 그럼 그 은행원은 무엇을 했을까요? 그 서류를 가지고 해당은행에 연락을 하구요, 그 해당은행은 사기관련 담당자에게 연결을 해주었을겁니다. 담당자는 전산부서에 사시꾼의 계좌정지요청을 했을것이구요, 전산담당자는 경찰쪽에 사기여부를 확인후 (이때도 전화를 걸거나 해당 사이트에 조회를 했겠지요) 해당계좌에 대해 영구정지를 시켰겠지요.

전 저 과정을 알필요가 없습니다. 사실 제 추측이기도 하구요, 그냥 제가 한일은 서류에 사인하고 기다리고있었습니다. 나머지에 대해선 알필요도 없고 그 결과, 사기꾼의 계좌가 정지되었다는것만 알만 되는것이지요. 바로 이게 추상화란겁니다. 내가 명령을 내리면 그 아래서는 여러가지 뭘 하더라도 어쨋든 원하는 결과가 나오는것이지요. 이것을 약간 다른 느낌으로는 Indirection (간접접근)이라고도 합니다.



이제부터는 추상화보다는 인다이렉션에 초점을 맞추어 이야기하고자 합니다.
한가지 예를 더 들어보지요. (그냥 제 예시일뿐입니다, 실제와는 다를 수 있습니다)우리의 아이폰이 슬프게도 고장이 났다고 칩시다. 그러면 우리는 애플에 전화를 걸겠지요. 그러면 애플에서는 KT로 전화하라고 할껍니다. KT로 전화하면 예쁜목소리의 상담원을 수차례만에 만나서 KT 아이폰 부서로 연결을 해주겠지요. 그럼 담당부서에서는 해당 AS 기사에게로 연결해줄것이고 기사는 아이폰 수리 절차를 알려줄겁니다. 그럼 우리는 그 절차대로 해서 수리를 받게되겠지요.
오마이갓. 엄청 짜증나는 상황입니다. 이것이 바로 인다이렉션입니다. 직접적인게 아니라 간접적으로 일처리를 한다는거죠. 이 예에서 인다이렉션의 장단점이 모두 나타납니다.

장점은, 단순하다는겁니다. (걷보기에요) 애플은 단순히 KT에 일을 떠넘기면 됩니다! KT내부에서도 중심부에서 담당 부서로 일을 떠넘기면 단순해지는 문제이지요! KT에서도 만약 아이폰 4G가 새로 나온다면 아이폰 4G 담당부서를 새로 만들어주기만 하면 KT에 전화해서 그쪽으로 넘기면 되지요! 유지보수도 편리하고 좋다는겁니다. 만약 이게 이렇게 안되있다면 KT는 소비자에게 전 담당원 전화라인을 모두 알려주어야겠지요, 아마 수천개의 전화번호리스트를 소비자에게 주어야겠지요. KT입장에서는 끔찍하지요. (소비자는,, 좋을지도 모르겠습니다만. ㅎㅎ)

단점은, 소비자 입장에서 한번 생각해봅시다. AS 기사와 통화하기위해 도대체 몇번을 통화한거죠? 애플, KT상담원, 담당부서직원, 담당기사, 4번나왔습니다. 자 이때쯤되면 한번쯤 버럭할겁니다. (것도 정말 연결하기 힘들겠지요? 사실 KT는 경험안해봐서 모르는데 SKT는 그랬더랍니다..............) 짜증나지요. 시간도 엄청걸렸구요. 이것은 프로그래밍에서도 그대로 적용됩니다. 바로 퍼포먼스가 떨어집니다. 저렇게 여러번을 거치니 당연히 같은 기능을 하더라도 느려질수밖에 없습니다. 사실 이것이 바로 임베디드 시스템을 위한 프로그래밍에서 C를 사용하고, OS를 만들때 (심지어 Mac OS X도 C로 작성되었습니다) C를 사용하는 이유이기도 합니다. 그나마 다행인건 컴퓨터는 짜증은 내지 않습니다. 이짓을 수천번 수만번 시켜도 다행이 그렇게 고장을 자주일으키지는 않지요. 물론 메모리관리를 잘못하면 배째라 죽어버리겠지만,, 괜찮습니다. 우리는 일단 편한게 먼저니까요 :)

감사히도 iPhone OS를 위해서는 우리는 조금 더 편한 OOP 기반으로 설계된 Objective C를 사용해야만 합니다. 이로서 우리는 프로그래밍 라인수를 상당량 줄일 수 있고 (실제 컴파일될때는 말이 다르지만요... 컴퓨터는 길게 받아들일겁니다.)  편하게 유지보수 및 신기능추가(업데이트)를 시킬 수 있다는겁니다.

자 이정도 이해했으면 OOP는 괜찮을 것 같습니다. 그럼 이 OOP를 이용한 프로그래밍을 시작해보겠습니다. 개괄소개가 너무 길어져서, 잠시 자르고 다음페이지에서 인다이렉션을 활용한 예제를 풀어보겠습니다.



저작자 표시

설정

트랙백

댓글