블로그 이미지
레인레테
연락처 : rainlethe@rainlethe.com 영혼을 잃어버리다.

calendar

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
2011/02/13 08:00 RL.P rogramming/Scratch
















에서 이어져욥 !

오늘 우리가 하려는 것은 이런겁니다.

박쥐가 날개를 퍼덕거리면서 오른쪽으로 1초마다 날아가기!


신기하죠? :)


자. 이제 시작해 보죠.

이제는 스크레치가 시작 프로그램 위쪽에 올라올 때도 됐죠?

다시한번 켜 봅시다.

그리고 지난번에 4. 박쥐가 움직여요! 에서 했던 프로젝트를 한번 불러와 봅시다.


파일에서 프로젝트 가져오기를 선택해요.


그러면 우리가 지난번에 했던 프로젝트가 목록에 있을꺼에요.

아마도 더 많은 프로젝트가 생기면, 더욱 많은 목록에 글이 생기겠죠?

이 연재가 끝나고 나면 스크롤이 생겨있을 꺼에요 ^^


지난번에 저장했던 대로 BAT프로젝트를 한번 불러와 봅니다.

BAT를 누르고 확인 버튼을 누르시면 되요 :)

자아 지난번에 했던 프로젝트가 불러와졌습니다.

어라? 근데 뭔가 이상하네요?

스크레치의 트레이드 마크! 고양이가 그대로 있어요!

이건 뭥미..라고 생각하지 마시고 일단 삭제해 주세요.

나중에 이런 기능도 쓸모가 있을 테니까요 :)


삭제하는 방법은 이제 아시죠?

오른쪽 하단의 회색창에서 고양이 우클릭 후 삭제!

과감하게 너는 탈락이야!



이번에는 회색 박쥐를 클릭하고, 스크립트 탭 옆에 있는 모양 탭을 클릭해 볼께요.

그리고 '가져오기' 버튼을 누릅니다.

짜잔.

새로운 스프라이트 가져오기에서 봤던거랑 똑같은 화면이 나왔죠?

이번엔 날개를 아래로 내리고 있는 박쥐를 가져와 봅니다.

클릭하고 확인!

이제는 다 아실 꺼에요 ㅎㅎ

회색만 가져오면 섭섭하니까

검은색도 똑같이

모양-> 가져오기 해서 날개를 아래로 펴고있는 박쥐를 가져와 보죠!


두둥, 확인을 누르게 되면


요렇게, 검은색 박쥐의 모양이 두개가 되었어요!

새로 가져온 박쥐의 모양을 클릭해보면


모냥도 바뀌는군요. 호오라.



엇, 그럼 이쯤에서 뭔가 이상한게

똑같이 가져오는 건데, 스프라이트 가져오기는 뭐고 모양 가져오기는 뭘까요?

스프라이트라는건 ,

무대에 배치되어 있는 '개체'를 뜻해요.

그게 사람이 됐든 동물이 됐든 뭐가 됐든 간에요.

그러니까 연극무대에 올라간 배우라고 생각하시면 쉬울꺼 같아요.

디렉터나 플래시를 써보시는 분은 아시겠지만

타임라인 위에 각 Object를 배치해서 움직이게 하잖아요?

그거랑 똑같은 거에요 ^^

'모양'은 무대에 배치되어 있는 개체가 어떤 모양을 할 수 있는가를 뜻하고요.


출처 : 본인 그림판 신공.

이렇게요 ^^;;

스프라이트 하나는 저 파란색 인간이고,

모양은 삿대질 하나, 무릎꿇고 있는거 하나.. 라고 생각하시면 쉽겠네요 ^^

그리고 '스크립트'는 보시다시피 저 배우의 동작을 결정하는 거죠

자 그럼 이 스크립트 파트로 다시 돌아와서

회색의 박쥐를 우측 아래에서 클릭해 보면

우리가 기존에 만들었던 스크립트가 그대로 남아있네요.!


그런데 가만히 보니까 너무 지저분한 거에요.

똑같은걸 열개나 써놓다니! 단정한 내 성격으로써는 정의의 이름으로  용서할 수 없다!

라고 해서 지워버리기로 결심을 합니다.

먼저 녹색깃발 클릭되었을 때 .. 아래부분의 10만큼 움직이기를

오른쪽 클릭을 한 상태로 다른곳으로 질질 끌고와 봅니다.


분리되는 모습 보이시나요?

일단 녹색깃발 클릭되었을 때와 아래의 행동들을 분리한 후에

과감하게 우클릭하셔서 삭제! 합시다.

이걸 굳이 분리해서 삭제하는 이유는,

그냥 붙어있는 상태에서 삭제하면

'녹색깃발 클릭할때' 까지 한번에 지워져 버리거든요 ^^;;

다시 드래그하기 귀찮기도 하거니와

이렇게 짧은게 아니라 훨씬 긴거일 경우에는 부분적으로 삭제할 일이 있을테니까

그때를 대비해서 미리미리 배워놓아요 :)


삭제를 하다니.. 아아..나의 노고가..라고 생각할 수도 있지만

더 쉬운 방법으로 가는거니까 이해해 주세요

그리고 지난 강좌에 배웠던 방법 그대~로.

반복10회 사이에
10만큼 이동하기
1초 기다리기
를 넣자구요.

어라라, 그런데 이게 뭔가요?

사진에 못보던 보라색이  생겼어요.

넵, 이것이 바로 오늘의 비밀. '모양 제어하기'입니다.

1초 기다리기 밑에 모양 bat1-a로 바꾸기..라는게 생겼죠?

뜬금없이 bat1-a이 뭐야? 라는 생각이 드신다면

다시 '모양'탭을 눌러주세요.


보이시나요?

회색 박쥐가 날개를 편 모습이 bat1-a

그리고 날개를 접은 모습이 bat1-b 라는거!

이 이름은 바꿀수도 있지만,

 아까 그냥 내버려뒀기 때문에 그냥 자동으로 붙는 이름이 되었네요.


자아 그럼 아까 작성한 스크립트는 무슨 뜻이 될까요?

10만큼 이동하기 -> 1초 기다리기 -> 모양 bat1-a로 바꾸기

가 되겠군요.

부푼 기대를 안고 실행해 봅니다.

... 아까랑 아무차이가 없잖아! 라고 화를 내시는 분

잠깐 진정하시고 왜그런지 좀 살펴볼께요.

bat1-a 그림은 말 그대로 회색박쥐가 날개를 펼친거죠.

그런데 스크립트 그 어디에도 회색박쥐가 날개를 접은 모양으로 바꾸라는 말이 없는 거에요!

그래서 아래와 같이 한번 더 작성해 봤어요.


클릭되면
반복 10회
10만큼 움직이기
1초 기다리기
모양 bat1-b로 바꾸기 (박쥐가 날개를 접겠죠?)
10만큼 움직이기
1초 기다리기
모양 bat1-a로 바꾸기 (박쥐가 날개를 펴겠죠?)

참고로 모양 바꾸기에서 안으로 움푹 들어가있는 상자는

'이 스프라이트의 모양'중에서 선택할 수 있는 모양 목록이 나와요.

지금같은 경우 bat1-a, bat1-b 두개가 나오는군요.

직접 클릭해보세요 ^^


그러고 나서 오른쪽의 파란색 깃발을 눌러서 실행을 해봅니다.

박쥐가 파닥파닥 움직여요. !


어라.어라. 어라?

그런데 왜이러지? 회색 박쥐가 검은색 박쥐보다 두배나 더 많이 가네요!


에잇. 생각해보니 그도 그럴것이

한번 반복할때마다 박쥐가 10 * 2 = 20씩 움직였네요!

그래서 위와같이 반복을 5번만 하도록 고칩니다.

'반복 10회' 안에 있는 글자를 반복 5회로 키보드로 치시면 되욥.

자 이제 실행하시면 정상적으로 돌아오죠?

좋네요 ^,.^

이번엔 까만색 박쥐를 처리할 차례죠?

우측 하단의 까만색 박쥐를 클릭해 보면

지난번에 했었던 스크립트가 고대로 남아있네요!

이번에 까만 박쥐는 또 회색박쥐랑은 다른 방법으로 해볼께요.

제가 이번에 선택한 방법은,

니가 다음에 바꿀 모양은 이거야! 라고 지정해주는 방법입니다.


왼쪽의 분류 중에서 주황색인 '변수' 클릭해 볼까요?

 아래쪽에 '변수만들기'라는 거 보이시죠?

클릭~하세요!


가운데에 요론게 나옵니당.
박스에 batshape라고 친건 제가 대충 쳐 넣은거구요.

아래에 '모든 스프라이트에 대해' 그리고 '이 스프라이트에 대해'는

까만 박쥐에서만 쓰는거냐 아니면 모두 다 같이 쓰는거냐 ..에요.


아차. 제가 변수에 대해서 말씀을 안드렸군요?!

변수는요. 프로그래밍을 할때요.

각 스프라이트의 상태나 값같은걸 저장할 수 있는 걸 말해요.

변(할 수 있는)수 라는 뜻이고요.

수라고 적혀있기는 하지만, 사실은 문자든 뭐든 다 들어갈 수 있어요.


변할 수 있는 수라는게 지금은 잘 이해가 안가실 테니

아래 예제를 따라하면서 배워볼께요 ^^


자 확인 누르셨나요?


뭔가 오렌지색으로 이것저것 나오는군요.


일단 내버려두시고, 다시 노란색의 제어로 돌아와 주세요.

밑에 쭈욱 보다 보면


이런 블럭이 보이실 꺼에요.

제어문인데요.

이걸 1초 기다리기 밑에다가 한번 붙여넣어 볼께요.


슥삭 하고 붙으면서, 반복 안에 들어갔죠?

성공한 겁니다. ^^

그런데 가만히 보니까

만약 <> 라면 블럭 안에는 육각형이 들어가 있어요.

그럼 끼워넣을 수 있는 육각형을 찾아봐야겠군! 이라는 느낌이 오시나요? ^^

육각형은 초록색의 '연산' 안에 있습니다. ^^


연산탭으로 들어오셨다면

이렇게 생긴 블럭을 찾으세요.

그리고 '만약 <> 라면' 안에 끼워 넣으세요!!

철커덩 붙었나요?

그럼 지금 블럭 모양이

요롷게 생겼죠?

자 드디어 우리의 변수가 활약할 차례가 왔군요.

다시 변수탭에 가셔서 아까 만든 batshape를 초록색 블럭 왼쪽에 끼워넣으세요.


그리고 합체했으면 이제 모양을 바꾸어봐야겠죠?


이제는 익숙하신 모양 바꾸기를 끼워넣읍시다.

만약..안에 모양 bat2-b로 바꾸는걸 끼워넣고,

아니면..안에 모양 bat2-a로 바꾸는걸 끼워넣자구요.

그리고 실행을 해 봅시다!


... 하아 왜인지 모양이 계속 bat2-b군요..

왜일까요?

처음에 초록색 깃발이 클릭이 되면,

batshape라는 변수값이 0입니다.

그리고 아까 끼워넣었던 '만약'...에서

batshape값이 0이면 모양을 bat2-b로 바꿔라! 라고 명령했었죠?

컴퓨터는 충실하게 명을 따른 죄밖에 없네요 ㅠㅠ


그러면 어떻게 해야 할까요?

간단하죠.

batshape값을 바꿔주면 됩니다.!

지금 보이는 모양이 박쥐가 날개를 접고 있는 모양이라면

다음 할 차례는 박쥐가 날개를 펴고 있는 모양이야! 라는 뜻으로

batshape에다가 '넌 이제부터 1이야'라고 해줍니다.

반대로 지금 박쥐가 날개를 펴고 있다면

다음 할 차례는 박쥐가 날개를 접고 있는 모양이야! 라는 뜻으로

batshape에다가 '넌 이제부터 0이야'라고 해주면 되고요.

가만히 보니까 batshape는 프로그램이 진행되는 동안 0도 됐다가 1도 됐다가 하네요?

아항. 변하는구나.

그래서 변수구나..하는거에요 ㅎㅎ

어려우신가요? ^^;;



결국 최종적으로는 위와 같은 모양이 되는데요.

오늘 한게 조금 어려울 수도 있으니까, 몇번 생각해보시고 따라해 보세요 ^^

2011.02.13. By RL.PS

저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2011/02/11 15:30 RL.P rogramming/Scratch


















에서 이어집니다.

오늘은 요런걸 만들어 볼껍니다.


요렇게 박쥐 두마리가 있구요.


빨간색으로 테두리쳐진 녹색 깃발을 누르면

박쥐가 조금씩 조금씩 이동해서 화면 가운데로 가는걸 만들어 볼꺼에요.




처음 스크레치를 켜면


오른쪽에 항상 고양이가 버티고 있죠?

하앜. 매일 봤더니 지겨워질라고 하는거에요.!

이렇게 하고 싶은 심정!

그래서 좀 딴거 없나 하고 두리번거리기 시작합니다.



아래에 보니까 회색바탕에 고양이가 보이는군요.

우클릭을 해 보면 요런 화면이 나타납니다.

과감하게 삭제 버튼에 마우스를 가져대시고 왼쪽 클릭하세요. (1)

고양이가 무대에서 지워져 버렸어요!  (2)

그럼 이제 딴걸 좀 추가하기 위해서 (3) 을 눌러봅시다.

(3) 위에 마우스를 올려보면 '새로운 스프라이트 파일 선택하기'라고 나와요 :)


파일 선택 화면이 나타나요.

스크래치는 기본적으로 그림을 몇개 제공하는데요.

일단 Animals 폴더에는 말그대로 짐승들

Fantasy 폴더에는 마녀라던가 하는 빤따지 세계에서 나올법한 것들!

... 등 여러개가 있으니까 하나씩 눌러보면서 확인해 보아요.

Animals 폴더를 눌러봅시다.



박쥐가 나왔네요!

그뿐만 아니라 뭐 벌이나 버팔로 이런것도 잔뜩 있으니까 스크롤바를 내리면서 확인해 보세요.

단 지겨운 고양이도 있으니까 주의! ^^;;

일단은 제일 첫번째에 있는 회색박쥐를 선택해 볼까요?




그리고 다시 새로운 스프라이트 파일 선택하기 를 눌러서

이번엔 까만 박쥐를 소환해 봅시다.


아까 선택했던 회색 박쥐하고 같이 무대에 두둥 하고 나왔군요.

자아 이제 주연들은 다 준비가 되었구요.

처음 목표 기억하시나요?

박쥐가 찔끔찔끔 오른쪽으로 움직여야 하죠!

오른쪽 하단의 회색 박쥐를 클릭하면 하얀색 빛이 가운데로 모일꺼에요.


그러면 가운데에 있는 '스크립트' 에 대고



먼저 '제어'를 누르세요.

그럼 아래 이것저것 블록이 나오죠?

녹색깃발 클릭되었을때를 왼쪽 클릭한 채로 가운데에 가져다가 둡니다.



이번에는 '동작'으로 가서 10만큼 움직이기를 가져다가 놓아 보아요.

[RL.P rogramming/Scratch] - 3. 뭐든 해보는게 장땡! 무턱대고 만져보자.

강좌 기억나시나요?

블록은 블록끼리 합체할 수 있다는거!

노란색의 블록 아래로 '10만큼 움직이기'를 노란색 블록 아래로 합체시킵시다!

그리고 다시 '제어' 로 가서 1초 기다리기..도 10만큼 움직이기 아래에 합체!


여태까지 끌어다놓은 블록의 뜻은

'녹색깃발이 클릭되었을때 10만큼 움직이고 1초 기다려'라는 뜻이에요.

우리는 회색 박쥐를 선택하고 이렇게 만들었으니까

회색박쥐야. 녹색깃발이 클릭되면 10만큼 움직이고 1초 기다려! 되겠습니다.

근데 가만히 생각해 보니까 고작 10만큼 움직이는건 너무 소심한 거에요!

다시 동작탭에 가서 10만큼 움직이는 블록을 끌어다 놓고,
제어탭에 가서 1초 쉬기 끌어다놓기를 반복합니다.


... 아 귀찮아.

그래서 이걸 복사하는 방법이 없나 생각해 봤어요.


다행히 있네요.

오른쪽에 있는 블록을 선택하고 오른쪽 클릭을 하면 복사 메뉴가 있지 뭔가요!

복사해서 아래쪽에 다시 붙일까요?


이걸 열두번 하고 나니까 이렇게 기다란 명령이 되었어요!


요기까지 오느라 수고하셨습니다.

자 이제 그만 하산! 하려고 보니까

이게 회색박쥐만 움직이고 검은색 박쥐가 안움직이네요 OTL

그래서 이번엔 검은색 박쥐를 선택하고


다시 똑같은 스크립트를 끌어다 두려고 하니까..이것참 이렇게 귀찮을 데가 없죠..


머리를 굴려봅니다.

역시 가만히 생각해 보면 답이 나오죠.

우리가 한 일은,

10 이동 -> 1초 기다리기 ->10 이동 -> 1초 기다리기 ->10 이동 -> 1초 기다리기 ->
10 이동 -> 1초 기다리기 ->10 이동 -> 1초 기다리기 ->10 이동 -> 1초 기다리기 ->
10 이동 -> 1초 기다리기 ->10 이동 -> 1초 기다리기 ->10 이동 -> 1초 기다리기 ->
10 이동 -> 1초 기다리기 ->10 이동

이였네요.

응? 가만히 보니까 똑같은게 반복되잖아?!

간추려 보면

[10 이동 -> 1초 기다리기] 가 10번 반복되는 거네요.

오오 이런게 있었군.. 이라고 생각하면서

반복시키는거 없을까? 컴퓨터는 반복의 천재라던데..

라고 스크립트 블록을 뒤적거려 봅니다.

그리고 이윽고 발견하게 되죠.

비밀은 반복 10회!


위 그림과 같이 블록을 만들어 냈습니다. 두둥.

이제 정말 다 되었어요.

녹색 깃발을 눌러보면



박쥐 두마리가 10만큼 오른쪽으로 갔다가, 1초 쉬고 또 10만큼 오른쪽으로 가는걸
열번씩 반복하는군요!


이런 나이스한 프로그램을 만든것에 감동하면서

스크레치를 그냥 끕니다.

이러면 다음에 켰을때 내가 열심히 만들어놓은 게 다 지워져버리는 불상사가 생기죠.


그래서 조 위에 있는 빨간색 테두리의 디스켓 모양을 눌러봅니다.

사실 뭐 요새는 디스켓같은건 없지만 옛날부터 저건 저장버튼이라는 뜻이니까

그냥 눌러보면 프로젝트를 저장할 위치와 이름, 그리고 정보를 써 넣을 수 있어요.

기본적인 위치는 내문서\Scratch Project 에 지정되어 있고, 물론 바꾸셔도 됩니다.


오늘도 수고하셨어요.

담에 봐요 :)


2011.02.11. By RL.PS
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2011/02/06 07:30 RL.T hink.
저는 컴퓨터 계열 전공자가 아닙니다.

개인적으로 흥미가 있어서 어릴때부터 이것저것 만들면서 크기는 했습니다만,

체계적으로 교육을 받지는 않았었죠.

그러다가 대졸 후 국비지원학원에서 처음으로 프로그래밍에 대해서

체계적인 교육이라는 것을 받았더랬습니다.

그런데 이거, 꽤나 재미있더군요.

저 혼자 놀때도 IDE는 필수 요소였습니다.

쓸데없는, 정말 아무 쓸데도 없는 대소문자 에러 같은건

IDE에서 잡아주기도 할 뿐더러(자동으로 빨간줄이 가죠)

인텔리센스라는 멋진 기능 덕에 Ctrl + Space 만 치면

이 개체가 어떤 메소드와 프로퍼티를 가지고 있는지

한눈에 파악할 수 있었죠.

그런데 이게 뭡니까.

가자마자 EditPlus를 설치하는게 아니겠습니까?

응? 도대체 뭐지? 메모라도 시킬건가? 라고 생각하고 있었는데

무려 여기에 자바 컴파일러를 연결해서는 이걸로 코딩을 하라는 겁니다.

응? 왜? 라는 생각이 계속 들었죠.

궁금한건 잘 못참아서 물어봤습니다.

'실력을 키우기 위해서' 랍니다.

손으로 일일이 반복적인 코드를 치고 있는 것과

실력향상과 어떤 상관관계가 있는지는 전혀 이해 못했지만

어차피 내가 모르는 뭔가가 있겠지..싶어 따라 했습니다.

그리고..

public static void main ...으로 시작하는 간단한 hello world 를 콘솔에 출력하기 위해서

저는 네번이나 컴파일 에러를 맛봐야 했습니다.

네번 다 대소문자가 틀렸더군요...


그렇게 며칠이 지나고,

아무리 생각해도 도대체 왜 이걸 써야 하는지 이해하지 못한 저는

다시한번 선생님께 여쭤봤습니다.


그럼 Object Property나 Method 목록은 어떻게 참고하나요?

그랬더니 '자바 API'를 참고하면 된다고 하셨습니다.

원론적으론 맞는 말입니다. 말 그대로 API고,

이걸 Reference 삼아서 프로그래밍 해야 하는게 맞죠.

그런데... 요새 IDE는 당연히 이 목록들 전부 지원합니다.

심지어는 API보다 설명도 더 잘되어 있습니다.

여전히 왜이렇게 원시적인 방법을 써야 하는지 이해가 안갑니다..


프로그래밍은, 문법을 배우는 것이 아니라,

문제를 해결하는 방법을 가르치는 것입니다.

어떤 오브젝트에 어떤 프로퍼티와 메소드가 있는지 아는 것은 중요하지만,

그것의 스펠링이 중요하지는 않습니다.


결국 저는 그다음날 Eclipse를 깔았고,

다른 친구들이 여전히 대소문자의 압박에서 시달리는 동안

다른걸 테스트해 볼 수 있었죠.:(


음모론을 덧붙이자면...

이건, 아마 실력을 키우기 위해서가 아니라

에러를 계속 유발시킴으로서

작업진도를 편하게 맞추기 위한 수단이 아니었을까..까지 생각해 보지만

이건 한편 너무 앞서간 것 같기도 하고요 ^^:;


도대체 초보자는 그냥 파일 편집기로 연습해야 한다는

이런 한심한 규칙은 누가 만든 걸까요?



2011.02.06. By RL.T
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2009/06/22 16:16 RL.D aily
안녕하세요.

정중하게 IT 종사자분들께 도움을 요청합니다.

현직 프로그래머(개발자라고 쓰고 코더라고 읽는다) 인데요.

다름이 아니라

요몇달 들어서 너무 실력이 정체되어 있다는 생각이 들어서요.

뭐 지나치게 낙후된 실력이다보니(...)

더 떨어질 게 없어서 그 부분은 그다지 크게 걱정 안합니다만

분명히 올라갈 길은 헤아릴 수 없을 만큼 높이 있는데

하나도 진척되지 않는 것 같아서 ...
 
어떻게 해야 할 지 싶어서 도움을 요청합니다.


내가 이쪽에 적성이 안맞는건가..하는 생각도 들고,

전공도 아니었는데 괜히 뛰어들었나..라는 생각도 들고,

뭐 기타등등 ..그렇습니다.


뜸금없이 실력이 신처럼 되게 해 주세요..이런건 바라지도 않고요.

뭔가 제가 직업으로 삼기 전

허접하지만 즐겁게 만들었던 그시절로 돌아갈 수는 없겠지만

최소한 어떻게 하면 내자신이 스킬업하는 기분을 느낄 수 있을까 싶어서,

혹은 다시한번 뭔가를 배우는거에 대한 즐거움을 느낄까 싶어서,

다른분들은 이럴때 어떻게 하시는지

혹은 현재의 실력이 되실때까지 어떤 과정을 지나오셨는지

도움을 나누어주시면

너무 감사하겠습니다.


굳이 프로그래밍 쪽이 아니어도 좋습니다.

기획도 좋고, 디자인도 좋고, 개발도 좋고, 관리도 좋고, 

 어떤것이든 관계없으니 삶의 노하우를 나누어주실 분 혹시 계신가요??


혹 나누어주실 내용이 없으시더라도

읽어주신 것만으로 너무 감사합니다.  ^^


2009.06.22. By RL.D
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2009/06/02 12:01 RL.C omputer

발아점 : 게임 기획자가 왜 C 언어를?


IT 종사자라면 한번 생각해보세요.

특히 당신이 '기획자' 라면.

제 생각은 다음과 같습니다.

(어디까지나 프로그래머의 입장임)


1. 문법적인 부분.

대답 : '아니오'

이유 :  문법은 결과물을 내기 위한 '형식'일 뿐임. 게다가 이건 언어에 따라 천차만별임.


2. 알고리즘. 혹은 자료구조.

대답 : 알고 있는게 좋다' 

이유 :  얼마나 쉽게 구현이 가능한가 파악이 가능하다. 

특히 프로그래머들이 기초적으로 익히고 있는 알고리즘 몇개.

뭐. 정렬이라던가 하는 것부터 시작해서.. 

리스트나 이진트리같은 기본적인 자료구조같은것들..

은 알고있는게 정신건강에 이로움.

가장 큰 장점으로는

그리고 프로그래머들의 거짓말을 꿰뚫을 수 있음 (웃음) 

은 농담이고

문제푸는 능력이 생김.



3. 컴퓨터의 기본 논리

대답 : '필수' 

이유 : 최소 근간인 부울 대수는 무슨일이 있어도 알고 있는게 좋음.

안그러면 실현 불가능한걸 하게 해달라고 떼를 써서 욕먹는 경우 생김.

부울 논리는 .. 쉽다면 쉽고 어렵다면 끝도 없어서.. 뭐라 말하긴 어렵지만

쉽게 말하면 '문제를 참거짓으로 쪼개나가는 방식' 이므로

이 논리를 따라서 결론을 낼 수 있으면

컴퓨터로 구현 가능하다는 뜻이기 때문에.

여기서 말하는 기본 논리는 '컴퓨터가 판단할 수 있느냐 없느냐'의 문제이지

메모리 할당...등의 컴퓨터 구조를 이야기하는 것이 아님.

즉 '논리'는 필수지만, '구조'가 필수적인 것은 아님.

'구조'를 알면 '효율적'이 될 수는 있지만,

아무리 잘해도 프로그래머들보다 익숙하진 않을테니 이런건 전문가들에게 맞겨두고.


덤으로 이거 잘하면 말싸움에서 이길 확률 높아짐 (-,.-v)


쓴날 2시 26분 덧붙임.
기획자가 프로그래밍을 안다고 해서 상상력이 떨어지게 된다면
그사람은 이미 자질 없다고 판단됨.
프로그래밍이라는 게 , 결국 논리를 세워나가는 작업이기 때문에
논리가 서지 않는 상상력은 실현 불가능한 공상에 불과하다고 생각함.


 



2009.02.06. By RL.C

저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2009/05/08 10:45 RL.C omputer
발아점 : 써니의 生牛步行  : 정의와 선언의 차이

declare. and Define 뭐가 다를까.

내가 덧글

int a; // 선언
a = 3 // 정의
-------------------
interface b { void Action(); } // 선언

class C extend b { pulic void Action(){print "하하" };} // 정의
---------------

뭐 대충 이런건가요? (아닌가;;;)


라고 남겨두자 써니님께서

약간 혼동 하시는 듯 합니다.
위에 geektoo님의 설명을 잘 읽어 보시는 것을 권장합니다.
틈나면 제가 보충 설명을 올려두어야 겠군요.

라고 적어주셨다.

참고삼아 geektoo님의 설명을 적어두면
텍사스 전기톱 살인마 라는 녀석이 있습니다
=======================================
텍사스 전기톱 살인마

선언 :
1.가면쓰고.
2.덩치크고.
3.손에는 전기톱을 들고 있기


정의:
1.큰덩치에, 몸을 왔다갔다하며
2.외부충격에 의해 가면이 벗겨질수있으며
3.손에 든 전기톱에 시동을 걸어 마구잡이로 자르고, 썰고. 찍는다

===========================================================

이것이. 선언과 정의의 차이입니다
라고 되어 있다.
 
써니님 글 본문에 '검색'을 추천하시기에 구글에 물어봤다.

그래서 찾은 본문이

① 정의와 선언의 대상은 변수와 함수, 두 가지이다.

② 정의는 '만든다'의 의미를, 선언은 '알린다'의 의미를 지닌다.

③ 정의는 변수나 함수의 특징을 완전하게 지정해 주어야 하지만, 선언은 특성중 필요한 것만 골라서 지정하면 된다.

④ 정의는 저장장소를 메모리에 할당하지만, 선언은 변수나 함수의 특성을 컴파일러에게 알려주기만 한다. 그러므로 정의는 메모리 사용량을 증가시키지만 선언은 메모리 사용량과 전혀 관계없다.

⑤ 정의는 만드는 것이므로 프로그램 전체에 걸쳐 단 한번만 이루어지지만, 선언은 단지 알리는 것이므로 여러번 중복되어도 된다.

⑥ 정의는 선언을 겸할 수 있지만, 그 반대로 선언은 정의를 겸할 수 없다.

또, 자동변수의 경우 정의와 선언은 구별되지 않지만 외부변수나 함수의 경우에는 정의와 선언은 명확히 구별된다.

⑦ 6장에서의 '함수의 원형'은 컴파일러에게 알려주는 것이므로 선언이다.

출처 : C가 있는 홈페이지. 7. 기억부류

혹은
선언은.. 컴파일러에게 어떤 대상의 이름을 알려주는 행위입니다. 영어로는 declaration 입니다.
정의는.. 컴파일러에게 어떤 대상의 실제 내용을 알려주는 행위입니다. 영어로는 definition입니다.

선언과 정의를 구분하는 한가지 기준은 memory address binding의 유무를 기준으로 구분합니다.
즉, 어떤 대상의 이름에 대해 그에 대응하는 메모리 상의 주소가 정해진다면 그것은 정의이며, 그렇지 않고 이름만 알려준다면 그것은 선언입니다.

출처 : 행복한 내일을 위해.


다른 내용으로는
 C++에서의 객체는 정의(존재)에 대한 선언(소유)이다.

출처 : 용자C와 함께

뭐 여전히 모르겠다.

SQL에서는 보통 변수를 선언할 때

declare @counter int; -- 선언
set @counter = 1; -- 세팅. 즉 정의.
select @counter  -- 사용.


이런식으로 선언하고 정의한 후
사용한다.

즉 내가 이해하고 있는 선언과 정의와 사용의 차이는.

선언 :  @counter라는 '변수'의 타입. 즉 무언가를 담기 위한 공간의 '형식'을 '알려준다'.
정의 :  @counter라는 공간에 실제로 값을 주입한다.
사용 :  @counter라는 공간이 실제로 무엇을 가리키고 있는가에 대해서 값을 가져온다.


일단 위에 기술한 써니님께 달아둔 덧글에는 이와 같은 의도로 쓴 것인데

실제로 의도가 전달이 잘 안된 것인지. 아니면 내가 뭔가 잘못 알고 있는 것인지

누군가가 정확하게 알려줄 수 있으면 좋겠다.


써니님께서는 geektoo님의 의견에 동의하시는 걸로 봐서는

두분의 '정의와 선언에 대한 차이에 대한 견해'가 일치하는 것인데

내가 이해한 geektoo님의 댓글은

내공이 부족해서인지는 모르겠지만

정확히 뭔가 와닿지가 않는다.


어떻게 보면 선언은 Property. 즉 특성을 기술하고,
 
정의는 Method. 즉 행동을 기술하는 것 같기도 하고.

다른 측으로 보면 선언은 class. 형식을 기술하고,

정의는 Instance. 즉 실체를 기술하는 것 같기도 하고.

다른 시점으로 보면 선언은 interface, 즉 형식을 기술하고,

정의는 구체화 클래스를 기술하는 것 같기도 하고..
(내가 덧글에 써 둔 짧은 소스는 이 의미로 써둔 것이다.)



위에서 인용한 C가 있는 홈페이지 부분,

혹은 행복한 내일을 위해  부분을 봐도 헷깔리기는 마찬가지인 것이

내가 알기로는 STATIC 타입을 취하는 언어들

Dynamic  타입을 취하는 언어들은 그 바인딩 시점이 전혀 다르고,

(Dynamic 언어들은 거의 대부분 선언과 동시에 정의가 된다.)

Static 타입 언어들이라고 해도 절차형 언어함수형 언어

바인딩 시점이 전혀 다르다.

그러니까 정확히 말하면 '컴파일러가 작동하는 방식'이 전혀 다르다.

바인딩 시점이라는 것이

'언제 값이 메모리에 Allocation. 즉 적제되는가'에 대한 내용이라면

이것의 내가 생각하는 답은 '컴파일러에 따라 다르다'는 것이다.

극단적으로 말하자면,
 
RubyPython에서는 '선언'시에 데이터가 바인딩되지만,

Haskell에서는 Lazy Binding 때문에 '사용'시에 데이터가 바인딩된다.

가장 많이 사용되는 C언어 계열에서는 '정의'시에 데이터가 바인딩된다.

그러니까. 저 '메모리 적재 여부'로 정의와 선언을 구분하는 것은

말이 안된다고 생각한다.


써니님이 항상 강조하시듯이, '좀 더 기본'으로 돌아갈 필요가 있다고 생각하는데,

프로그래머들이 항상 생각하는 방식으로.

이견이 없는 '공리'를 먼저 정의해 두고 시작하고 싶은데

내가 못찾아서이겠지만

'특정 언어나 패러다임에 종속되지 않은 선언, 정의, 사용'에 대한 공리'

를 도저히 못찾겠다.


누구 좀 댓글이나 트랙백으로 도와주실 분 계신가요?

2009.05.08 By RL.C

저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
prev 1 next