블로그 이미지
레인레테
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 30      
2012/09/14 09:30 RL.C omputer

애자일에는 이터레이션이라는 것이 있는데, 고객에게 1-2주 사이로 계속 피드백을 주면서 결과물을 수정해나아가는 방법이다.

보통은 이걸 수행하기 위해서는 '아직 덜 만들어진 것을 보여줄 수 있는 용기' 만 있으면 된다고들 하는데, 오늘 가만히 생각해보니 그것도 아닌것 같다.


물론 저 용기도 있어야 하겠지만.. 

그것보다 더 중요한 것은 유연한 구조와 설계가 아닌가 싶기도 하다.

프로그램이라는게 .. 유연하게 설계되지 않으면 (고객이 보기에는) 별 거 아닌 수정사항인데도 프로그램의 전반적인 구조를 다 뜯어 고쳐야 하는 경우도 왕왕 발생하기 때문이다.



그런데 반면 이 유연한 설계라는 것이 굉장히 어렵다.

유연한 설계를 한다는 것 차제가 거의 100% 경험에 의존하는 것이기도 하거니와 설계 자체가 너무 어렵다는 것에 기인한다.


왜 그럴까?


개발을 할 때 제약이 많다는 것은 개발자들에게 굉장한 이득을 준다. 

여기서 제약이라는 것은 개발 환경의 열악함.. 이런 것을 말하는 것이 아니라, 최종사용자가 사용하는 데 있어서 제약을 주는 것을 뜻한다.

즉 이 경우에는 제약이라기보다는 규칙에 가깝다.

유저가 지켜야 하는 규칙이 많을수록 프로그램 개발은 쉬워지는 것이다. 


예를 들어 전화번호를 입력할때 무조건 010-1111-2222 이런 식으로 입력해야 한다고 하면,

01011112222 라고 입력하면 프로그램이 오류가 나오거나 경고를 띄우게 된다.


이런 일련의 규칙들은 개발의 편의성을 더해주고 빠른 개발이 되도록 한다.



반면에 유연하다는 것은 , 반대로 말하면 정말 많은 경우의 수를 생각해야 한다는 것이다.


고객은 전화번호를 010-1111-2222 라고 입력할 수도 있고, 01011112222라고 입력할 수도 있으며, 010-11112222도 가능하고 0 1 0 - 1 1 1 1 - 2 2 2 2 라고 입력도 가능하다. 심지어는  공일공 일일일일일

이이이이 라고 치는 사람도 있을 수 있다.




이런 경우의 수를 모두 고려하게 되면, 프로그램 하나를 사용할 때 하나의 컨텍스트당 몇백개 이상의 시나리오가 나올 수도 있다.


쓰는 사람이 어떻게 쓸 지는 아무도 모르는 것이다!

이런거 다 고려해서 만들려고 하면.. 일단 머리를 쥐어뜯고 시작하는 것은 물론이거니와 그 쥐어뜯은 머리로 나온 결과가 여전히 중요한 무언가를 놓치기도 하게 된다.

100% 유연한 설계 자체가 불가능하다는거다.



즉, 애자일 이터레이션이 성공하려면

1. 아직 덜 만든 프로그램을 보여줄 수 있는 용기가 필요하다.

2. 생각할 수 있는 시나리오에서 가장 유연한 프로그램 설계가 필요하다.



천만 다행이도 고객에게 아직 덜 만들어진 프로그램을 보여주면 고객은 피드백을 줄 테고, 그건 그 나름대로 고객 맞춤형 유연 설계가 탄생할 가능성이 높아진다.

오히려 이쪽이 더 잇점이 아닐까 싶기도 하고.. 






덧. 1.

(* 위에 예로 든 전화번호 케이스는 사실 쉽게 처리 가능하지만, 그냥 예는 예로써 받아들이자. 복잡한 것은 머리에도 안들어오고 와닿지도 않을테니) 


덧 2.

보통의 고객들은 다 만들어질때까지는 보여줘도 아무말 안하고 있다가 다 만들어지고 난 다음에도 아무말을 안하고 정작 쓰다가 불편하거나 마음에 안들면 그 때 되서야 기본 설계를 흔드는 변경을 당연시하게 요구한다. 

그러니까 애자일 이터레이션을 너무 믿지 말자.

고객님께서 그렇게 해 달라고 하셨잖아요.. 라고 말해봤자 소용없다는거 .. 잘 알지 않는가?


마치 웰던으로 구워달라고 해 놓고는 막상 먹어보니 너무 익었다며 다시 레어로 돌려달라는 느낌이랄까..


덧 3.

그나저나 우리나라는 1-2주 사이에 웹사이트 하나를 찍어내는데

정말 초고속 이터레이션이 아닌가 싶기도 하고...

그 후 피드백을 받아서 또 1-2주 내에 완전히 바꾸는 걸 보니 

초능력자 세상인 것도 같고 ...



2012.09.14. By RL.C


저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2011/03/09 18:14 RL.C omputer


소스를 읽어보신 분은 아시겠지만 (있을까?) 설명글에서 c#에서의 LinkLabel 클래스를 사용합니다. 이 LinkLabel이라는게 뭐냐면 그냥 Text 중간에 링크를 걸어주는 기능인데요. MS에서 대체 무슨 생각으로 만든건지 사용법이 정말 복잡합니다. 이를 해결하기 위해서 ToolStripLabel 이라는 클래스가 닷넷 프레임워크 2.0에서 새로 들어왔는데.. 어처구니없게도 여전히 복잡합니다.

사실 기능은 굉장히 간단한 클래스거든요. 그냥 텍스트를 쓰거나 링크를 걸어주는건데 , 간단하게 생각해보면 링크라는 것은 본문 + 갈 곳의 URL 이고 이 두개만 인자로 받으면 됩니다. 그런데 LinkLabel 클래스는 링크를 걸때
this.linkLabel1.Links.Add(24, 9, "www.microsoft.com");
this.linkLabel1.Links.Add(42, 3, "www.msn.com");

출처 : MSDN

이런식으로 걸더군요.
(24,9, "www.microsoft.com") 세개의 인수가 뭐냐면 기존 LinkLabel의 Text 의 시작값, 길이, 그리고 이제서야 링크 주소입니다. 뭔가 복잡하죠? 그냥 본문 + 링크만 받으면 그만인걸요.

그래서 DE File Numberer를 만들때 이걸 간단하게 감싼 클래스를 만들었습니다. 소스는 아래와 같습니다.

더보기


워낙 간단한 소스라 굳이 소스 분석은 필요없을듯 하고, LinkLabelWrap 클래스는 공개된 메소드가 AddText, AddLink, GetLinkLabel  이 세개밖에 없습니다.  메서드 이름에서 짐작하시겠지만 AddText는 그냥 Text를 붙일때, AddLink는 링크를 붙일때, GetLinkLabel은 문자열을 다 만들어낸 다음에 컨트롤로 불러올 때 입니다.

제가 필요한 기능만 만들어낸 거라서 LinkLabel을 통으로 감싼건 아닙니다. 필요한 분은 기능을 추가해 주시고 알려주시면 감사하겠습니다. ^_^

혹시라도 예제가 필요하시면 DE File Numberer 소스코드를 다운받으셔서 보셔도 됩니다.

소스코드의 라이센스는 프로그램의 라이센스와 동일하게
저작권 표시 : YES
상업적 이용 : NO
컨텐츠 변경 : YES
동일한 설정 : YES

입니다.


2011.03.09. By RL.C

저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
TAG c#, LinkLabel
2010/03/07 20:00 RL.C omputer
상당히 개인적인 내용을 블로그에다가 쓸 경우

검색엔진에서 안찾았으면 하는 내용이 있죠.

그럴때는

스킨편집에 들어가셔서

<head></head> 사이에

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW, NOARCHIVE">

라고 적어주시면 됩니다.

뜻은,

봇. 그러니까 검색엔진에서 내 블로그의 컨텐츠를 검색하는 봇에게

'인덱스(검색 정렬) 하지말기, 링크를 확인해서 긁어가는 것 하지말기, 저장하지 말기'

라는 의미입니다. :)

티스토리나 텍스트큐브의 경우

스킨 편집을 하실 수 있는데요.

티스토리 같은 경우에는

스킨설정 -> HTML/CSS 편집 에서 하시면 되고

텍큐닷컴같은 경우

꾸미기 -> 스킨편집 에서 하시면 됩니다.


그냥 갑자기 생각나서 적어둬요 :)

2010.03.07. By RL.C
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2009/08/03 07:05 RL.C omputer
0. 들어가면서.
다써본것은 아님. 그냥 정보 긁어모으는 중.
써본 분들은 댓글이나 트랙백 남겨주시면 감사하겠습니다.

1. OS
1.1 Ubuntu Linux
전세계에서 가장 잘나가는 무료 리눅스 배포판.
개인적인 설치나 사용 경험은 RL.Linux에 있으니 참고. 계속 업데이트 예정.

1.2. Open Solaris
Safety하기로 유명한 Solaris의 오픈소스 버전.
썬에서 만들었는데 오라클로 넘어갔음. 오라클이 유지보수중.

1.3. 다이나리눅스
한국 배포판. Wine을 비롯, 한국의 실정에 맞게 최적화시킨 배포판.

2. 자기 컴퓨터에 불법 프로그램 깔려있나 체크해보기.
한국 소프트웨어 저작권 협회 에서 SW자가진단 기능 체크.
단 라이센스 유무는 확인 안해줌.


3. 오피스.
오픈오피스.
MicroSoft의 오피스 세트 - 워드, 엑셀, 파워포인트, 액세스를 대체하는 무료 프로그램.
사용법도 거의 동일하고, MS오피스 2003과 호환되므로 사용에 이상 없을 것으로 판단됨.
각각의 이름은 Writer(워드), calc(엑셀),  Impress(파워포인트) , Base(액세스)
이 외에 Draw(그림,순서도 편집), Math(공학수식계산기) 도 포함.

4. 그림뷰어
알씨가 가장 유명하고 개인 사용자에게는 무료이지만, 기업사용자에게는 라이센스 필요.
기업에도 무료인 프로그램은 다씨, ZViewer, ShockView(이지미 편집가능) 등이 있음.
ShockView는 공식 홈페이지를 못찾아서 검색 링크만 걸어둠.


5. 캡쳐.
Snag-It같은 경우 동영상캡쳐까지 가능하나, 쉐어웨어임.
무료 프로그램으로는 오픈캡쳐, 칼무리패스트스톤(외산) 등이 있음

6. 그래픽.
6.1. 비트맵.
Photoshop을 대체할 프로그램으로 가장 유명한 것은 GIMP.
의외로 가벼우며 기능이 플러그인으로 붙는 형태라서 확장성도 높은 편.
꽤나 오래된 오픈소스 프로젝트라서 안정적임.
포토샵에서 할 수 있는 거 다 할 수 있음.
이 외에도
이미지 타입변환, 크롭, 만들기, 수정 모두 가능한 ImageMagicK 도 있음.


6.2. 벡터
워낙 유명한 일러스트레이터 만큼은 아니더라도 꽤나 유용한 프로그램들.
sodipodi , skencil 등이 있음. 간단한 작업에는 충분히 쓸만함.


6.3. Flash
Flash 자체를 개발하는 툴로는 가장 유명한 것이 Flex SDK를 이용한 FlashDevelop.
간단한 설명은 이곳에 써놓았으니 참고.
이 외에 태그를 이용해서 SWF를 만드는 DrawSWF 등이 있음.
DrawSWF에 대해서는 옷장수 님이 정리해 둔 것이 있으니 참고하면 될듯.

6.4. 3D
3D MaxMaya 를 대체할 만한 3d 렌더링 프로그램. Blender


7. 웹브라우져.
윈도우즈를 쓴다면 기본으로 깔려있는 IE를 쓰는 경우가 많겠지만
나처럼 리눅스 사용자는 IE를 못쓴다.
그 외에도 탭브라우징이 편하다거나, 빠르다거나, 검색이 쉽다거나 하는 장점으로
다른 웹브라우져를 쓰는 경우가 많은데,
기능은 대충 비슷하니까 아래에서 골라서 맘에드는거 쓰자.
IE다음으로 점유율이 높은 Mozilla FireFox,
엄청나게 빠른 Opera,
맥의 기본 브라우져 Safari,
구글 야심작 Crhome .. 등 여러가지 있으니 입맛대로 골라쓰면 된다.
참고로 이 글은 FireFox에서 작성중.

8. 압축 프로그램.
가장 많이 쓰이는 알집도 이스트소프트의 다른 제품과 마찬가지로
기업 사용자에게는 유료기 때문에 압박이 있는 기업을 위한 다른 제품들.
빵집 : 양병규씨를 스타로 만든 제품. 알집과 90% 이상 호환됨.
다집 : 일단 홈페이지엔 무료라고 되어있는데 '개인사용자'운운하는것이 불안하기는 함.
7-zip : 리눅스의 tar.gz 형식 말고 zip형식을 쓸때 기본 프로그램. 굉장한 성능과 알고리즘을 자랑함.

여담으로 우리회사에서는 빵집 쓰고 있는데 무척 좋음. ALZ도 풀어냄.

9. 동영상.
뭐 윈도우즈 플래폼이라면 당연히 곰플레이어일테고,
이 외에 이스트소프트의 알쇼등이 있다.
개인적으로 윈도우 머신을 피씨방 같은데서 사용해야 할때는 스타크래프트 중계가 나오는 곰플레이어 선호.
집에서 사용할때는 곰플레이어가 아얘 깔리지도 않으므로
리눅스용 플레이어를 쓴다.
totem, MPlayer , VLC, Xine 등이 있는데,
사람들이 이에 대해서 이야기해 둔 것은 KLDP의 쓰레드에 달려있으므로 참고하면 될듯.
난 그냥 귀찮아서 MPlayer 사용중.
아 물론 위의 Totem, MPlayer, VLC, Xine 등은 리눅스 뿐만 아니라 어디서도 사용 가능하므로
리눅스 전용이라는 생각은 버리자.

10. 음악편집.
믹싱등에서 강세를 보이는 GoldWave를 대체할 프로그램으로
가장 유력한 것은 audacity가 있음. 생긴것도 비슷하고, 쓰는법도 비슷함.
또 다른 것으로는 Sweep이 있음.
이 두개에 대한 참고 문서는 Suse Linux User Group의 한 타래에 있음.

11. 동영상편집
Sony Vegas 를 대체한 만한 프로그램. Virtual Dup이 있다.
이게 이상한게 위키피디아에는 윈도우즈에서만 돌아간다고 되어 있는데,
찾아본 결과 리눅스에서 돌아간다고 한다. 안써봐서 잘은 모르겠음.


12. CD굽기
네로버닝롬 유료 프로그램임.(근데 cd롬 기계사면 보통 다 네로 cd가 딸려나오지 아마..)
여하튼 이것도 불법 사용중이라면 cdburnerXP 를 사용하면 될듯.
기능 좋고, 생긴거 비슷하고, 못하는거 없음.


13. 안티바이러스.
Avast :  3개월동안 체험 사용인데, 3개월 끝나고 나면 지우고 재인스톨 신공 사용 가능. 리눅스용 따로 있음.
Spybot-S&D : 이게 바이러스랑 비슷한 이름이라 헷깔리는데, 이건 스파이웨어 지워주는 프로그램.
v3Lite : 전통의 강자 안철수 연구소의 무료 백신.
알약 : 이스트소프트의 백신 프로그램. 의외로 잘 못잡는다는 소문이 있기는 한데 사용은 가장 편리.

참고문서  : 여기 정리 안된 내용도 많으니 꼭! 참고할 것.
피씨라인 7월호, 피씨사랑 7월호.[ 오프라인 월간잡지.]
공짜 소프트웨어로 사무환경 구축하기. [단행본]
한국 수세 사용자 모임 : 윈도우에 상응하는 리눅스 프로그램. [1][2][3][4]
Draco : 우분투에서 유용한 프로그램들.


덧.
a.> 실은 이것보다 훨씬 데이터는 많은데 정리하기 귀찮음.



2009.08.03. By RL.C



저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2009/08/03 05:10 RL.C omputer
개인적으로 나중에 까먹을까봐, 그리고 혹시나 만약에라도 참고 블로그가 없어질까봐 정리해 둠.

EXAM에 무척 잘 나와 있다.

그리고 컴파일 하는 방법이나 SDK 연결 방법에 대해서는

세계의끝과 플래시 원더랜드!

에 무척 잘 나와있으므로 참고해도 됨.

간단하게 요약 정리해 보자면.

1. FlashDevelop을 이용한 무료 개발 환경 구축.
2. FLEX Builder 3 /  Eclipse plugin 를 이용한 유료 개발 환경 구축($699)

개인적으로는 돈이 없었기 때문에(...)1번 선택.

그냥 이클립스에 붙는 무료 플러그인이 있나 찾아봤으나

영어가 짧기도 하고 찾기 귀찮아서 내버려둠.

Flash Develop같은 경우에는 Flex의 Syntax 체크같은것도 다 해주고

컴파일러 연결도 되기 때문에 내가 쓰는데는 불편 없다고 여겨짐.

그리고 난 IDE가 무거운거 별로 안좋아하는 편이라서 더더욱.


순서는 아래와 같다.

I. 설치법.

1. JRE(Java Run Time) 설치.

http://www.java.com/ko/download/

알아서 설치해줌.

2. Flex SDK 설치.
 http://www.adobe.com/products/flex/flexdownloads/

Flex 3.3 SDK -> Adobe Flex 3.3 SDK 항목에서 All Platforms, English | 118MB 아래의

Download Now 클릭하면 자동 다운로드.

그냥 압축파일이니까 적당한 곳에 압축 풀 것.


3. ANT(자동빌드 프레임워크) 세팅.

[내 컴퓨터] -> 오른쪽 마우스 -> [속성] -> [시스템 등록정보]-> [고급] -> [환경변수]

-> [시스템변수] -> 새로만들기

변수이름 : ANT_HOME
변수값 : 압축 푼 폴더\flex_sdk_3\ant

-> 시스템변수 : Path 선택 -> 편집 -> 변수 값(V)에 %ANT_HOME%\bin  추가. 구분자는 ;


4. Flash Player 설치.

http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&Lang=Korean/

동의 및 지금 설치하기 누르면 그냥 최신버전 다운로드 가능.

한국의 사용자들은 대부분 깔려있을 것으로 예상.


5. Flash Player Debugger Version 설치.

http://www.adobe.com/support/flashplayer/downloads.html

각 브라우져에 맞게 설치. 나는 파이어폭스 사용중이라서 for Nescape-compatible browsers 설치했음.

6. FlashDevelop 설치.

http://www.flashdevelop.org/community/viewforum.php?f=11

목록중에 가장 위에 있는 거 다운받아서 설치하면 됨.

II. 간략사용법.

1. 컴파일러 연결.

FlashDevelop은 말그대로 편집기라서 컴파일러가 없다.

따라서 아까 다운로드한 Flex SDK를 연결해 주는 작업이 필요함.

FlashDevelop에서 Tools -> Program Settings(F10) 누르면  세팅화면이 나온다.

좌측에서 AS3Context를 선택 후,

Flex SDK Location 선택. 아까 Flex SDK를 세팅한 폴더를 지정해준다.


2. Output 세팅.
Project- > Properties -> Flash Player 세팅 가능.




덧.
밤에 잠도 안오고 해서 멀티파일 업로드나 만들어볼까 하고 설치중.


2009.08.02. By RL.C





저작자 표시 비영리 동일 조건 변경 허락
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 레인레테
2009/04/29 22:27 RL.C omputer
뭐 별것은 아니지만

방문자 기록을 살펴보다 보면

의외로 mssql 2008 설치방법이나 호환성 문제로

고생하시는 분들이 많은듯 해서

아주 간략히 포스팅.


하위호환성은 100% 보장됩니다.

즉 2008에서 2005로 만들어진 데이터베이스는 100% 읽힙니다.

당연히 2005에서 2008 DataBase는 못읽습니다.



끝.

2009.05.08 By RL.C
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2009/04/24 11:34 RL.C omputer

어쩔 수 없습니다;

CSV 파일은 EUC-KR로 파일을 저장하는 반면에

c#에서 스트림을 읽어들이는 방식은 default로 UTF-8을 사용하기 때문에

두 문자의 읽는 형식이 달라져서 생기는 문제라서요.

그냥 인코딩을 맞춰주시는 수밖에;;


뭐 저는 CSV파일을 유니코드 텍스트로 변환한 다음 ,
 
구분자가 아니라 \t 구분자로 읽어들이는 방법 선택했지만

이건 뭐 상황에 따라 다를테니까요.

원본 파일을 변경할 수 없는 상황이라면 프로그램 코드를 고쳐야 할테니.

이럴때는 시간을 기록하다 요기를 참고하셔가지고

텍스트 파일 스트림의 인코딩 방식을 설정해 주심 됩니다. ^^

끝.

2009.04.24 By RL.C

저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
2009/04/23 17:36 RL.C omputer
Bool 논리로 말한다.

이게 뭐냐고?

참 혹은 거짓.

이 둘 중 하나로 말하면 된다.

프로그래머가 하는 일이라는게 뭐라고 생각하는가?

예술? 아름다운 지적활동? 창조행위?

후후훗.

실은 프로그래머는 그냥 '인간 번역기' 다..

사람이 알아들을 수 있는 말을 컴퓨터가 알아들을 수 있는 말로 바꾸는 것.

이게 프로그래머가 하는 일이다.

근데 뭐 다들 알고 있겠지만

컴퓨터가 알아들을 수 있는건 딱 두개밖에 없다.

0, 아니면 1.

이걸 부울 논리로 치환하면 참. 혹은 거짓.

아주 정확하고 반론의 여지가 없는 단 두개의 공리.

프로그래머는 일을 할 때 항상 무의식중에 저 두개의 공리로 생각한다.

그래서 프로그래머는 '명확한 기준' 이 잡혀 있지 않으면

곤란해 하는 거다.

자신이 기계가 알아들을 수 있는 말로  바꿀 수 있는 논리가 안서는 거니까.


프로그래밍의 버그라는게 대부분 어디서 튀어나오나면.

'프로그래머가 미처 논리적으로 생각하지 못해 빼먹어서

이성논리를 부울 논리로 바꾸지 못해서 생겨난 일' 이다.


뭐 쉽게 예를 들어보자면 이런거지.

string[] Foods = Restorant.GetAllFood();

string food = Foods[0];


이 경우에 Food가 반환하는 배열이 빈 배열이라면 food는 a[0]의 값을 참조하지 못해서

멋지게 런타임 에러다.

미처 Foods[0] 이 없을 경우 (false)를 생각하지 못했기 때문에 난 에러라는거다.



이런식으로 빈틈없이 준비를 하고 각종 닥칠만한 상황을 다 예견해서

프로그래머를 설득시키면 , 훗일은 간단하다.

프로그래머는 만족스러운 번역 작업에 들어가는거고.

일을 부탁한 당신은 행복해하고.~


이런일이 허구헌날 비일비재하다 보니, 별별 방법론이 다 나온다.

TDD  , DDD, Design by Contract  니 하는 것들.

그런데 별 게 다 나와도 저것들이 지향하는 바는 매한가지다.

프로그래머가 논리적인 생각을 빼먹거나 할 때 도와주는 것들.


뭐, 컴파일러 최적화니. 옵티마이징이니. 프로파일링이니 하는 건 그 후의 문제고.

결론.
프로그래머를 설득하는 방법은 의외로 간단하다.

반론의 여지 없이 앞뒤가 맞는 말을 준비해 가라. 그럼 끝.



2009.04.23 By RL.C
저작자 표시 비영리 동일 조건 변경 허락
posted by 레인레테
prev 1 2 3 next