이런 제길슨, 컴퓨터가 또 뻑갔어염.
노트북 씨로 씁니다 ㅠㅠ.. 이거 뭐, 2주에 한번씩 가주시네염.
(덕분에 2주에 한번씩 하드웨어 업그레이드 및 포멧....)(좋은
것은 아닌듯 OTL)
지금까지 ObjectiveC강의는 거의, 그냥 C강의와
겹쳤죠.(2강의만 제외하고)
그렇지만, 이제부터는 본격적으로 C강의와 다른 루트로 가게
되겠습니다.>ㅅ<
어떻게 진행을 할지 또 한주간 생각을 했는데요.
객체지향과 관련된 간단한 프로그램을 만들고, 아이폰에까지 그
프로그램을 옮긴뒤
이 강의를 종료하겠습니다.(이 강의의 목적 자체가 원래 아이폰
프로그래밍이니까요.)
(아마 JAVA강의도 완전히 같은 방식으로 진행이 되겠습니다. 같은
프로그램을 만들고, 안드로이드로 옮기고 끝)(그리고 나서 아이폰과
안드로이드를 진행하겠습니다...ㅎ)
그럼 우리가 만들 객체지향 프로그램이 무엇이냐...!
바로바로 -주차장 관리 프로그램-입니다.
지난번에 객체에 대해서 약간 설명을 했었는데, "미친넘아, 더
헷갈리잖아"하는 아는 분이 있어서
간단하게 개념을 다시 잡고 들어가도록 하겠습니다....ㅠㅠ
몇 일간 강의는 이야기 형식으로 풀이를 하겠습니다.
------------------------------------------------------------------------------------------
어느날 나씨가 저에게 와서 제안을 해요.
"내가 땅이 많은데, 할게 없다. 심심해, 주차장 관리나 하렴"
"왓?! 내가 왜 주차장을..."
"노예계약"
"넵, 근데 뭐 신청해야 하는거 아닙니까?"
"다 했음, 알아서 하심, 요 앞에 공터에 주차장 마크 붙여놨으니까,
내일부터 알아서 하려무나."
해서 주차장 관리를 시작하게 되었습니다.
그런데, 뭘 어떻게 해야 하는지, 바보같기도 하지만 똑똑한 연씨에게
가서 대화를 합니다.
"뭘 어떻게 해야 하는 걸까?"
"ㅋㄷㅋㄷ, 그냥 돈 받으면 되는거 아냐?"
다음날 주차장을 갔습니다.
차들이 들어와요.
차들이 나가요, 돈을 받아요. 근데 모두 똑같은 값을 받았더니, 와서
죽치고 앉아 있네요.
뭐, 나랑 상관이 있을까. 그냥 냅두고 있는데, 나씨가 와요.
(참고로, 제가 말하는 나씨는 여자에요. 만약 이 글을 본다면 찔끔
할듯.)
|
나씨한테 싸닥션을 맞았어요.
한번쯤 반항해 줘요.
"뭘 어떻게 해야
하는건데요?!"
"대충 정보는 적어줘야
할거아냐?!"
"아...."
그랬어요, 이제 정보를 적어
보기로 했습니다.
다시 연씨와 상의를 합니다.
"무슨 정보를 적어야 할까?"
같이 상의를 하고, 어떤
내용을 적을지 연씨랑 같이 생각을 합니다.
음음,
|
"나는 나는, 자동차 빨간색이 좋아 >ㅅ<"
"아.. 색.. 그럼 엔진종류 같은 것도 쓰는건가?"
"회사두 쓰구"
"배기량 같은 것두..?"
(실제로 이런
빠가들이 아님을 알려드립니다.)
"오, 이제 뭔가 되는 것
같아."
"ㅋㄷㅋㄷ"
다시 주차장으로 갑니다.
저기 자동차 한대가
들어옵니다.
적기 시작해요.
자동차 이름 : YF소나타
자동차 색 : 정열의 붉은색
회사 : 현대
엔진종류 : 그걸 내가
어떻게알아
배기량 : 그걸 내가 어떻게
알아
|
|
자동차가 나가길래 3000원을 받습니다.
한국 소비자를 봉으로 하는 현대라 5000원을 받을까도 고민했지만,
그건 너무 한 것같아 그만두었습니다.(...ㅡㅡ;;)
잠시후에 제가 뭘 적도 있으니 나씨가 흐뭇한 표정으로 저에게
다가옵니다.
저두 흐믓하게 그녀를 바라봅니다. 나씨는 제가 적고 있는 것을 보더니
웃습니다.
"하하하.....하!"
|
다시한번 공포의 싸닥션을
맞았어요.
"왜 때려요?!"
다시 한번 반항을 해보지만.
소용 없는 일이라는걸 항상 깨달음...
"... 빠가야, 저기 다
른 동네 주차장 구경 좀 하구와라."(아주 중요한 말입니다.)
연씨랑 손을 잡고 랄랄라 하고
다른 주차장 구경을 갑니다.
주차장 아저씨 뒷목에 맥스봉을
겨누
고 총인냥 위협하며
말했습니다..
|
"자눼는, 여기서 무엇을 하는가."
아저씨는 총인줄 알고 덜덜덜 떨면서 말해요.
"...도.. 돈 받는데"
(이런 미친일은 현실에서 일어나지 않습니다. 따라하지 마세요.)
(저번주에 출발 비디오여행인가 보는데 나온거..)
"어떤식으로..?"
"...초.. 총은 내려놓고 말하지 않겠나."
"일 진행 해보세요."
그렇게 맥스봉을 아저씨 뒷목에 하루종일 겨누고 아저씨가 뭘하는지 구경을 했습니다.
『차가 들어온다 →
차 번호와 출입시간을 적는다. →
기다린다. →
차가 나갈 때 나가는 시간을 적고 계산해서 돈을 받는다.』
아, 이제 뭘 적어야 하는지 알 것 같아요.
이렇게 적고 있는데 또 나씨가 옵니다.
또 싸닥션을 맞지 않을까 하고 긴장을 빨고 있는데 나씨가 와서 얘기합니다.
"잘 하구 있군하."
이제 왠지 안심이 되여.(전 등심이..)
"근데, 이걸 왜 다 쓰고있냐? 앞에 것만 프린트 해서 딱딱 쓰면 되는거 아냐?"
앗 이런, 나이스한 아이디어, 저는 그날 집에가서 엑셀을 키고 Ctrl+C, Ctrl+V 신공을 사용합니다.
짜자잔~! 이제 쉽게 쉽게 할 수 있을 것 같습니다...!
그리구 이 종이를 들고 랄랄라 주차장으로 다시 출근을 해서 열심히 일을 합니다.
연필을 잡고 쓰다보니 손이 아파서 낑낑거리구 있을때
나씨가 와서 얘기합니다.
"병아, 너 명색이 "프로그래머"인데, 프로그램 짜지?"
"....아.. 근데 여기 컴퓨터가 없잖아여"
"~_~ 그럼 모바일로 짜서 와서 끄적여도 되잖아."
"......ㅇ_ㅇ"
그리고 프로그램을 짜기 시작합니다.
=========================================================================================
그럼 우선 이게 프로그래밍이랑은 뭔 관련이고 뭐가 어떻다는건지... 이해가 안되실 겁니다.
프로그래밍을 함에 있어서 객체지향을 도입하게 된 이유는
현실 세계를 모방하기 위해서 입니다.
우리가 사는 이 "현실"이라는 곳은 객체와 객체가 모여서 이루어지고
객체끼리 상호작용이 일어나는 곳이죠.(그럼으로 자연을 사랑해야하는거....ㅇ_ㅇ??)
지금 위의 이야기에서는 "주차장"프로그램을 짜게 됩니다.
현실의 "주차장", 현실의 "자동차"가 있겠죠.
객체지향 로그래밍이란 간단히,
컴퓨터 상에, 프로그래머는 가상의 "주차장", 가상의 "자동차"를 만드는 겁니다.
간단하죠 ~_~...?
객체는 많은 것을 가질 수 있습니다.
위의 자동차 예를 들면, 색이라던지, 회사라던지, 바퀴모양, 엔진은 어떤 것을 쓰고 등등
하지만 프로그래밍을 함에 있어서 그 "모든 것"에 주목하지는 않습니다.
우리가 주목할 것은 "우리가 원하는 것"입니다.
그 "우리가 원하는 것"을 알기위해 많은 조사를 해야하고, ...이걸 뭐라하더라,
어쨌거나 오랜 시간을 들여 연구를 합니다.
은행관련프로그램이라면, 은행에 가서 뒹굴어야하고
학생관리프로그램이라면, 학교에서 뒹굴어야할 것입니다.
이러한 많은 조사를 통해, "우리가 원하는 것"을 추출해내야 하죠.
이 "우리가 원하는 것"을 "속성"이라구 하구요, 간단하게 객체의 변수라고도 합니다.
위의 이야기에서 보면 저 종이에 적혀있는 4가지 것들이 객체의 변수이죠.
자동차에게는 수많은 속성이 있겠지만, 우리는 주차장에서 필요한 4가지 속성만 뽑아내 보았습니다.
이제 저 종이 각각은 "객체"가 된 것이죠.
간단하게 보면 객체라고 할 수 있겠지만, 저런 종이 상태로는 "메소드"가 없죠 ~_~
그건 다음 강의에 알아보도록 하구요.
오늘은 간단히 살펴보고 끝냅시다..!
--------------------------------------------------여기까지는 JAVA강의와
같습니다.---------
(물론 아직 자바 강의가 없지마능 ㅋㅋ)
우선 프로젝트를 만들도록 합시다.
오랜만에 하는거니 조금 세세하게 알아보도록 하죠 ~_~
프로젝트의 이름은 "주차장"이미, Parking 이라구 주었습니다.
그럼 예제를 작성하겠습니다.
#import
<Foundation/Foundation.h>
int main (int argc, const char *
argv[]) {
NSAutoreleasePool
* pool = [[NSAutoreleasePool alloc] init];
// insert code here...
int number;
int in_time;
int out_time;
int money;
/////////////////////////////////
number=2734;
in_time=12;
////////////////////////////////
out_time=15;
money=(out_time-in_time)*1000;
printf("************************\n");
printf("차량번호 : %d\n",number);
printf("입차시간 : %d 시\n",in_time);
printf("출차시간 : %d 시\n",out_time);
printf("최종요금 : %d 원\n",money);
[pool drain];
return 0;
}
|
요것 입니다 ㅎㅎ
일단 원래 하던 것과 별 다를바가 없습니다.
넣으면 쑤쑤 들어가서 출력을 해줍니다.
...예제의 복사를 위해 윈도우와 공유한뒤에, Txt 파일루 저장했습니다 ~_~
===========================================================================================
그런데 프로그램을 짜고 있는데, 구씨가 와서 얘기 합니다.
"뭐하냐?"
"프로그램 짭니당"
"~_~, 2대 들어가면 어쩌려구?"
".... 뭐 그냥..."
"이렇게 하면 되는게..."
"..."
"그렇죠, 아니겠죠. 코딩이 완전 길고 짜증나구 뿌뿌스럽군요"
===========================================================================================
자, 그럼 여기서 C를 공부 하셨던 분이면 "구조체"쓰면 되는거 아님?
하실 겁니다. ~_~
넹, 그렇스므니다. 구조체를 쓰면 됩니다.
하지만 우리는 다음 강의를 위해서 일단 "클래스"를 생성하겠습니다.
상콤하게 소스에서 오른쪽버튼을 눌러서 새로 파일을 만들어 줍니다.
딱 알아서 이름이 써있네요.
Objective-C Class..!
만들어 줍니다.
NSObject에 대해서는 나중에 알아보도록하구 일단 선택해줍니다 ~_~
이름은 자동차니까 Car.m으로 주어주시구요 ~_~
확인 누르면 아래와 같이
car.m/car.h가 생성이 됩니다.
간단히 car.h에는 선언만 해두고, car.m에는 선언한걸 풀어서 설명하는 거죠 ~_~
일단 오늘의 수업은 메소드 설명 전까지 나갈 겁니다 ~_~
일단은 아래와 같이 만들어주세영.
제가 직접 만든 예제니까, 저작권 문제는 없을거에요 ㅋ...(이게
너무 무서워 ㅎㄷㄷ)
...꺼졌다.. ~_~ 어쨌거나 다 했으니... 아마두 이게
Car.h
#import<Foundation/Foundation.h>
@interface Car : NSObject {
int number;
int in_time;
int out_time;
int money;
}
-(void)
carIn:(int)n:(int)i;
-(void)
carOut:(int)o;
@end
|
Car.m
#import "Car.h"
@implementation Car
-(void) carIn :(int)n:(int)i
{
number=n;
in_time=i;
return;
}
-(void)
carOut: (int)o
{
out_time=o;
money=(out_time-in_time)*1000;
printf("************************\n");
printf("차량번호 : %d\n",number);
printf("입차시간 : %d 시\n",in_time);
printf("출차시간 : %d 시\n",out_time);
printf("최종요금 : %d 원\n",money);
return;
}
@end
|
메인입니다.
#import
<Foundation/Foundation.h>
#import
"Car.h"
int main (int argc, const char *
argv[]) {
NSAutoreleasePool
* pool = [[NSAutoreleasePool alloc] init];
// insert code here...
Car *car1=[[Car alloc]init];
[car1 carIn:2734:13];
[car1 carOut:15];
[car1 release];
[pool drain];
return 0;
}
|