Study - Programming/C#2008. 11. 16. 14:46

※이 글은 본인의 지극히 얄팍한 지식과 경험을 통해서 생각한 주관적인 글입니다. 이 포스팅의 기술적인 내용은 본인의 지식에서 나온 것이라 실제와 다를 가능성도 있습니다. 이에 대한 수정과 비판은 환영이나 비난은 자제해 주시면 감사하겠습니다.


  내가 처음 프로그래밍이란 것을 접한건 초등학교 3학년때 Visual Basic 5.0을 통해서였다. 일반적으로 프로그래밍을 배울 때는 C같은 언어를 통해서 변수,루프,함수 같은 기본 문법을 배우고 거기서 세세한 사항 및 기술 등을 배우고 다른 언어로 넘어가던지 윈도우 프로그래밍 같은걸 배우던지 할텐데, 난 바로 윈도우 프로그래밍부터 시작하다 보니 기본적인 문법 같은것도 대충 대충배우고 그랬었다.(C를 조금 하긴 했었지만 그때도 포인터나 구조체같은건 신경도 안썼다. 결정적으로 그런 개념들에 대한 중요성을 인식하지 못했었다. 독학이다 보니.) 실제로 함수 등의 문법 사항을 이해하기 시작한건 본격적으로 C를 공부하기 시작한 대학 1학년때 미친듯이 프로그래밍 공부 할 때였다.
  아무튼 이런식으로 약간 역순(말은 이렇지만 역순이라고는 생각하지 않는다. 대세가 위의 방식이지 내 방식이 정석이 아니다 뭐다 그런건 없다는 것이 본인의 생각이다.)으로 배우다 보니 편리한 RAD방식에서 딱딱한 콘솔 기반의 프로그래밍 그리고 거기서 윈도우 프로그래밍으로 넘어갈 때는 정말 힘들었었다. 그리고 좀더 편리한 방식이 없나 종종 생각하기도 했다. VB의 편리함은 충분히 좋은 장점이지만 그에 비해 언어적 약점이 많이 아쉬웠다. 그리고 C나 C++, JAVA같은 언어는 강력한 언어적 지원과 갈수록 좋은 개발환경을 제공해 주었지만 역시 VB의 편리함과 비교해서는 아쉬운 점이 많았다.
  그러다 접한 것이 C#이다. C#은 위 두가지의 장단점을 잘 조합한 좋은 언어라고 생각한다. 엄청나게 강력한 언어적 기능 그리고 윈폼을 활용한 강력한 개발 환경. 분명 기존 언어들과 비교해서 한발자국 나가긴 나간 언어이다. 예전에 RAD툴 관련 글들을 보면서 현재는 VB 등의 RAD툴이 강력한 생산성에도 불구하고 부실한 언어적 기능 때문에 빛을 못받고 있지만 갈수록 RAD툴은 대세가 될 것이라는 글을 많이 봤다. C#은 이 말이 실현되고 있음을 보여 주는 한가지 예라고 할 수 있다. 
  그러나 이 C#도 치명적인 약점이 있다. 바로 .NET Framework라는 것. 조그마한 프로그램을 만들었는데도 20MB 가까이 되는 .NET Framework 을 설치해야 한다는 것과 이것이 현재 닷넷의 큰 약점 중의 하나라는 것은 잘 알려진 사실이다.  .NET Framework위에서 돌아가는 방식은 분명 장점도 있겠지만 현재는 이 배보다 배꼽이 큰 문제가 심각할 수밖에 없다. Windows XP가 보급되기 전에 이 .NET Framework가 좀더 기반을 다지고 Windows XP에 .NET Framework가 함께 나왔다면 어떻게 되었을지 모르겠지만 현재로서는 아무리 Windows Vista에 이것을 넣고 Windows Update에 추가하고 하더라도 충분히 보급되기까지는 상당한 시간이 걸릴 것이다.
  그리고 Microsoft에서 만들다 보니 강력한 기능에도 불구하고 .NET Framework가 Windows기반에서만 돌아갈 수 있는 불상사(?)가 발생하여 JAVA와 비교해 아직은 부족하다.(Mono가 있지만 이것이 완전한 .NET Framwork라고 할 수 있을까?)
  이런 C#의 약점을 가지고 있지 않은 다른 언어는 없을까? 최근에 2009버전이 나온 Delphi가 있겠다. 어떠한 프레임워크 위에서 돌아가지 않으면서도 엄청나게 편리한 개발 환경과 최근 2009버전에서도 나타나는 강력한 언어적 기능 그리고 C,C++같은 어느 특정한 곳에서 독점하지 않는 것이 아니라 한 기업에서 독자적으로 밀고 있는 방식이라 그 발전 가능성과 발전 속도도 상당히 높다고 할 수 있다. 그러나 이 Delphi도 왠지 모를 비인기(상대적인 이야기이다.)와 처음 접하는 개발자는 좀 거북할 수 있는 문법 그리고 Windows개발쪽에서만 나타나는 강력함에서 완전하다고는 이야기 할 수 없다.
  아직까지는 RAD툴이 개발 방식의 대세라고는 이야기 할 수 없겠다. 그러나 언젠가는 이런 방식이 주류가 될 것이라고 난 믿는다. 완전하지는 않지만 분명 변화는 일고 있다. 강력한 언어 위의 강력한 개발 환경. 그런 변화가 언제쯤이면 일어날까 기대하며 이 글을 마친다.
Posted by 머리

댓글을 달아 주세요

  1. 자바쉑키

    머리아픈거중 하나가 메모리 사용이져..c(windows api) 랑 C# 으로 같은기능하는 트레이 애플리케이션 하나 짜봤는데요..
    c# 으로 하면 메모리가 어엄청 나갑니다.
    c 로하면 private WS 1.5 메가, 전체 6메가 정도 나오는데요
    c# 으로 돌리면 private WS 6메가, 전체 28메가 나옵니다 -_- 트레이에서 키보드 후킹하는 간단한건데 말이죠..

    2008.11.16 15:51 [ ADDR : EDIT/ DEL : REPLY ]
    • 안타깝죠.
      분명 언어자체는 맘에 드는데...

      기분좋게(?) 만들고 나서도 막상 써먹으려고 하면 막막해지더라고요 저도

      저같은 경우는 재밌는 프로그램 만들어서 친구한테 보내 줬는데 친구가 닷넷 프레임워크라는놈을 몰라서 애먹은 적도 있어요

      2008.11.17 18:16 신고 [ ADDR : EDIT/ DEL ]
  2. 미래는??? 글쎄... 리버스 엔지니어링이 대세겠지???
    리버스 엔지니어링이라 함은... 개발 방향이 거꾸로 되는거...ㅋㅋㅋ 코딩해서 만드는게 아니라... 쭉쭉 끌어서 그림 그리듯하면 컴에서 코드를 만들어 주는거...ㅋㅋㅋㅋㅋㅋ 물론 뭐 당장은 기대할 수 없지...ㅋㅋㅋㅋ

    2008.11.17 03:07 [ ADDR : EDIT/ DEL : REPLY ]
    • 워워~ 상상이 잘 안가네요
      단어는 들어봤는데 그런 방식이였군요

      와~ 이루어진다면 대단하겠어요 ㅎㅎ

      2008.11.17 18:13 신고 [ ADDR : EDIT/ DEL ]
  3. 알 수 없는 사용자

    아주 잠깐 Visual Basic을 만지다 잊어버리고 다시 뒤를 돌아보니 세상은 많이 발전해버렸네요 ㅠ;
    전공자는 아니라 잠깐 보았던 것인데.. 쩜하나하나 고치다 컴퓨터 시작 10년만에 컴퓨터를 버릴뻔도 했었죠 ;;
    이번에 MS에서 Dream Spark라고 무료로 학생에게 개발소프트웨어를 주는 프로그램이 시작되었는데- Visual Studio 도 무료던데.. 후우 한번 기억과 추억을 되살릴 수 있을까 고민중입니다ㅋ
    학생이시라면 프로그램 다운도 받고 내 블로그에 DreamSpark Seal을 달아 같은 Seal을 단 분들의 작업 포스팅이나 소식도 받아볼 수 있답니다,
    또 It 블로그, FireFox, Linux, Windows 등등! 많은 Seal들이 소통을 기다리고 있습니다 ^-^
    혹시 관심있으실까 하여 살짝 트랙백 놓고 갈게요 ㅎ

    2008.11.17 18:30 [ ADDR : EDIT/ DEL : REPLY ]
    • ^^
      MS에서 학생들에게 개발툴들을 무료로 준다는 소식은 들었어요
      그게 이름이 Dream Spark라는건 덕분에 알았네요 ㅎ 소식 감사합니다.

      한번 해보고 싶지만 제가 아직 군인 신분이라 제한이 많네요ㅠㅠ

      트랙백 감사합니다. 잘 읽었습니다.(댓글도 제가 더 빨랐네요~)

      제대 후에 이런 기회가 오게 되면 꼭 지원해 봐야 겠네요

      2008.11.17 19:17 신고 [ ADDR : EDIT/ DEL ]
  4. 알 수 없는 사용자

    우와 업무 마치고 퇴근한 사이에 블로그 스킨도 바뀌었군요 ㅎ
    오늘 날이 너무 춥더라구요 ㅠㅠ.. 아이고 군인신분이라고 하시니 더 추울 거 같아 걱정이 급 되네요 ;
    따뜻하게, 건강 조심하세요 !

    2008.11.17 23:41 [ ADDR : EDIT/ DEL : REPLY ]
    • 안그래도.. 오늘 갑자기 추워졌더라고요 ㅠㅠ

      아침에 영하 9도.. 깜짝 놀랐습니다 ㅎ

      눈만 안오면 좋겠습니다 ^^

      2008.11.18 19:14 신고 [ ADDR : EDIT/ DEL ]

Study- MSC/Computer2008. 10. 24. 19:48
  이번 포스팅에서는 동적할당을 객체의 생성쪽으로 확장해 보고자 한다. 먼저 말해두지만 이 포스팅은 포인터나 객체, 클래스를 설명하기 위한 포스팅이 아니다. 어디까지나 이런 사항에 대한 기본적인 지식은 알고 있다고 가정하고 진행하겠다. 우선 C++에서 Example이라는 클래스가 있고, 그것에 대한 객체를 생성해 보자.

Example ex;

  자. ex라는 객체가 생성되었다. 아마 특별한 문제 없이 제대로 돌아갈 것이다. 그리고 파괴도 잘 될 것이다. 하지만 이런 방식의 객체 생성은 권하고 싶지 않다. 대신 이런 객체의 생성을 권한다.

Example* pEx = new Example();

  위 방식은  Example라는 클래스 형식으로 메모리 공간에 할당을 한 후 그 주소를 pEx 포인터 변수에 넣어서 사용하게 하는 방식이다. 앞선 포스팅에서, 메모리의 어딘가에(HEAP) 공간을 할당한다고 했는데 위 방식도 바로 이런 방식이다. 이렇게 해 놓으면 이어서 이렇게도 가능하다

Example *pEx = new Example();
pEx = new Example();

  잘 이해가 가지 않을것이다. 무슨 이야기냐면 한 객체를 메모리에 생성하여 한 포인터에 주소를 기억시켰는데, 그 포인터를 재사용하여 또다른 객체를 또 생성하여 그 주소를 넣을 수 있다는 이야기이다. 물론 위 코드는 첫 객체의 해제에서 문제가 발생하지만 이런식으로 좀 더 코드에 유연성을 줄 수 있다. 그렇지 않으면 Example ex1,ex2; 등의 방식으로 객체를 생성해야 하는 문제가 발생한다.
  앞서 말한 유연성 외에도 이런 방식의 동적 할당을 통한 객체 생성은 맨 처음 말한 동적할당의 장점을 최대한 살릴 수가 있게 된다. 객체는 일반 변수보다 여기 저기서 사용될 가능성이 많다. 무슨 말이냐면 지역 변수 이상의 용도로 사용될 가능성이 많다는 이야기이다. 만약에 게임을 만들때 적을 표현하는 클래스가 있고 그 객체를 생성한다고 하면 상황에 따라 계속해서 적을 만들어 내야 하므로 동적 할당이 필요 할 수 밖에 없다.(int형으로 적을 표현할수는 없지 않은가?)
  이제까지는 객체를 동적할당 할 때 포인터를 이용하였다. 그 이유는 C++은 기본적으로 Call by Value 방식이기 때문이기 때문인데 이는 변수 및 객체의 사용을 한정적인 위치에서만 사용할 수 밖에 없게 만든다. 이 틀을 극복하기 위해서 메모리상의 주소로 읽기 위한 포인터가 사용되는데, 여기서 한단계 더 나가서 레퍼런스라는 개념이 나온다. 적어도 여기서는 Call by Reference와 Call by Address의 개념을 다르게 두자. Call by Address는 결론적으로는 포인터의 값을 이용한 Call by Value로 볼 수 있다. 엄밀하게 말하면 Call by Reference와는 다르다.(물론 내부적으로 이놈도 포인터를 쓰긴 쓴다.)
  말이 샜는데, C++ 이후의 객체 지향 언어는 기본 참조 방식을 Call by Value가 아니라 Call by Reference를 채택한 경우가 많다. JAVA가 그렇고, C#이 그러며, 심지어 Visual Basic도 Call by Reference가 기본이다.
  무슨 말이냐면 만약에

Example ex;

라는 코드가 있으면 C++에서는 ex가 객체 그 자체이지만 JAVA나 C#등에서는 저것은 그냥 참조를 위한 레퍼런스에 불과하지 객체 자체는 아니다. 즉 아무것도 못한다. 레퍼런스는 포인터처럼 메모리 상의 어떤 것을 가리켜야 그 의미가 있다. 즉

Example ex = new Example();

  와 같이 객체를 생성하고 그것을 참조하여야 한다.
  말이 많았다. 정작 하고 싶은 말은 '동적할당은 메모리 어딘가에 공간을 할당하고 포인터를 이용하여 그것을 참조한다, 그리고 이는 객체에서도 마찬가지이며 좀더 나아가 레퍼런스는 참조 없이는 아무런 의미가 없다'였는데 이것을 표현하기 위해 쓸데없는 말이 너무 많았던 것 같다.
  아무쪼록 이 글을 읽고 뭔가 '아!'하고 깨달음(?)을 얻는 프로그래머 지망생이 있으면 좋겠다. 그렇게 기원하면서 이상 3회에 걸친 포스팅을 마치고자 한다.
Posted by 머리

댓글을 달아 주세요

  1. 알 수 없는 사용자

    >_<.

    2008.10.24 20:14 [ ADDR : EDIT/ DEL : REPLY ]

나의 이야기/Note2007. 11. 10. 01:01
  지금 내가 공부 하고 있는 언어들을 한번 세어 보면

1. C
2. C++
3. JAVA
4. C#
5. VB.NET
6. Delphi

  여기에 세부 분야까지 넣어 보면
1. API
2. MFC
3. TCP/IP

  뭐 이정도. 문제는 이런 것들을 그냥 배워 보고 싶다는 생각에 건드려만 본다는 것이다. C/C++이야 항상 만지고 있는 거니 예외라 치고, 델파이는 거의 안하니 제외 해도 너무 하려고 하는게 많다. 특히 C#이랑 JAVA는 의욕에 비해 하는게 너무 없는듯하다.

  지금 생각은 이렇다. 한 두가지 정도만 집중할것이냐 조금만 더 힘낼 것이냐. 솔직히 말해서 조금 버겁긴 하지만 그렇다고 못하겠는건 아니다. 그냥 진도가 너무 안나가는 것에 대한 불안감?

  그래도 대학 와서 내가 이쪽 분야 그동안 공부했던것과 비교해 본다면 결코 무리라는 생각은 안든다. 다만 걱정되는건 어린 시절 근 10년간 VB를 파 오면서 너무 공부하기에는 어렸었다는 것도 있었겠지만 여러가지를 많이 해보고 싶어서 이것 저것 해보다가 어중간하게 얕고 넓게(?) 익히게 되어서 그게 반복되지 않을까 신경쓰인다.

  1월 안에는 윈어플 큰거 하나 짜놓고 가긴 가야 하는데.. 제일 승산 있는게 무엇일까? 제일 승산있는건 MFC나 C#쪽인데.. 아무래도 최근에 새로 배우는 언어는 C#이 제일 무난하게 나가고 있어 조금만 더 하면 윈폼 시작할것이니. 아니면 지금 텀 프로젝트한다고 공부중인 MFC도 요즘들어 뭔가 감이 잡혀가기 시작해서 조금만 더 노력하면 속도가 붙을 것 같은데..

  이렇게 해봐야 겠다. JAVA로는 뭐 만드는건 잠시 미루되 꾸준히 공부는 하고 MFC는 텀에 충실하되 실력이 늘 수 있게, 그리고 C#으로는 뭘 만들도록 주로 공부해 봐야지. 이렇게 실천할수 있으면 얼마나 좋아.
Posted by 머리

댓글을 달아 주세요

DC 프갤에 올리기 위해 적어 본 글.

여기 올라오는 수많은 질문들의 대부분은 C이야기겠지만 가끔가다 VB도 보이더군. 특히 전과한 학생이거나 1학년 꼬꼬마들이 VB많이 묻더라.

  C같은건 그냥 소스 파일 대충 드래그해서 C & P 해주면 되겠지만, VB는 그렇게 했다가는 죽도 밥도 안된다. 소스파일만 달랑 보고서는 프로그램의 구조를 제대로 파악하기가 어렵기 때문이다. 여기 말고도 다른데 VB 관련 질문을 올리고 싶으면 이렇게 해라.

1. VB프로젝트의 구조.
  아시다시피 VB는 RAD툴이다. 이놈이 뭐하는 놈인지는 다 알겠지? 일단 VB프로젝트를(표준 EXE 기준) 하나 만들면 기본적으로 두 개의 파일이 생성된다. vbp라는 확장자를 가진 프로젝트 파일과 frm이라는 파일을 가진 폼 파일.

2. 각 파일의 용도 및 구조.
  프로젝트는 뭐하는 놈인지 알거다. 중요한 것은 frm파일이다. C의 소스 파일 확장자명이 .c라면 VB에서는 폼 파일 소스코드의 확장자명이 .frm이라는 것.
  그런데 이놈의 구조는 C와는 조금 다르다. 폼이라는 놈이 달랑 작성자가 입력한 코드만 가지고 있는게 아니라 폼에 추가된 컨트롤이나 기타 요소들의 프로퍼티들이 다 저장되어 있어서 눈에 보이는 것보다 훨씬 많은 정보들을 담고 있다.

사용자 삽입 이미지

  첫 번째 그림을 보자. 그림을 보면 위에는 폼 파일이고 밑에는 소스 코드이다. 별거 없다. 그런데 frm파일은 저기 코드만 가지고 있는게 아니라 훨씬 많이 가지고 있다. 한번 frm파일을 찾아서 한글같은 워드프로세서로 열어보자.

사용자 삽입 이미지

  글씨가 작아서 잘 안보이겠지만 맨 밑을 보면 우리가 친 소스코드가 보이지만 그 위에 많은 코드들이 더 있다. 내용을 보면 폼에 관한 정보들이다. 저게 바로 소스코드의 원문이다.

3. 무엇이 문제인가?
  문제는 냅다 폼 아무데나 더블클릭해서 전부 복사해서 붙여 넣는다는거다. VB는 컨트롤 이벤트를 중심으로 코드가 돌아가기 때문에 폼에 관한 정보 없이 그런 코드만 보면 알아보기가 정말 어렵다. 예를 들어
Private Sub cmdStart_Click()
txtShow.Text = "Hello,World!"
End Sub
  이렇게 해놨다고 치자. 저렇게 해놓으면 cmdStart가 커맨드 버튼인지 텍스트 박스인지 알리가 없고 txtShow가 레이블인지 버튼인지 폼인지 알리가 없다. 그나마 내가 이름 txt나 cmd로 해놔서 알 수 있는거지.
  그리고 당장 폼이 어떻게 생겼는지도 모르고 몇 개의 컨트롤이 필요한지 어디다 해야 그려 넣어야 하는지도 모르기 때문에 답변하기가 상당히 곤란하다.

4. 그럼 어떻게 해야 하는가?
  폼의 스크린샷 가지고는 부족하다. 컨트롤의 이름 등을 제대로 파악하기 어려우니까.
  읽는 사람 입장에서 가장 편한 방법은 프로젝트를 압축해서 올리는 거지만 너무 성의가 없다. 최소한 컨트롤의 스펙 정도는 알려 주자. 그리고 올리더라도 frm파일을 올려주면 보기 정말 편하다. 그렇다고 frm파일 원문을 통째로 C & P하면 아예 답변 받을 생각 하지 말기 바란다.
  그리고, 프로그래밍을 할때 제발 컨트롤이름도 신경써서 해 주자. 변수이름은 신경쓰면서 컨트롤 이름은 왜 죄다 form1, command1. text1, 이런건데? txtShow,cmdStart,cmbView 이런거면 얼마나 보기 좋아.
 

이상이다. 그냥 공강시간에 시간이 좀 많이 남아서 써봤다. 제일 좋은 방법은 혼자 해결하고 이런데 질문 올리지 않는 것이지만, 혹시라도 DC아닌 다른데 질문하게 되면 이정도는 최소한으로 지켜 주자.
Posted by 머리

댓글을 달아 주세요

  1. ㅋㅋㅋㅋ 대채 우리의 2차 비베수업은 언제?ㅋㅋㅋㅋ

    2007.10.18 21:11 [ ADDR : EDIT/ DEL : REPLY ]

인터넷 돌아다니는데 누가 VB관련 질문을 했길래 그냥 심심해서 1분만에 짜 본거 대충 문자열 자르는 거 구현하는 것이다.

진짜 VB오랫만에 하는구나.. 맨날 C만 하다가 VB하니 어색하다.. 왠지 씁쓸. 훨씬 VB를 오래 했는데..

다음은 소스.

Option Explicit


Sub main()
Dim b_input As String
Dim arry(10) As Integer
Dim cnt As Integer
Dim i As Integer


cnt = 0
b_input = InputBox("입력해봐", "입력")

If b_input <> "" Then
    For i = 1 To Len(b_input)
        If "," <> Mid(b_input, i, 1) Then
            arry(cnt) = Val(Mid(b_input, i, 1))
            cnt = cnt + 1
        End If
    Next i
Else
    MsgBox "제대로 입력해"
End If

For i = 0 To cnt - 1
    Debug.Print "arry(" & i & ") = " & arry(i)
Next i
End Sub

이거 쓰면서 자꾸만 C하던 습관이 나와서 고생했다.
예를 들어
if a = 1 then 이렇게 해야하는걸 if(a==1){}하려 했다건가
for i = 1 to 10 하려는걸 for(i = 1 ; i <= 10 ; i++)하려 하던가
끝에 세미콜론(;)을 붙이려 하려 했다던가..


웃긴건 C를 할때는 역으로 된 상황을 자주 겪는다.

그리고 또 하나 신기한거. VC++의 코드를 그대로 복사해서 딴데 붙여 넣으면 들여쓰기가 제대로 안되어서 나오는데 VB는 제대로 되는구나. 편하다.

Posted by 머리

댓글을 달아 주세요

  1. 알 수 없는 사용자

    ㄷㄷㄷㄷㄷㄷㄷ 전 비베 아에 모르는데 ㅋㅋㅋ
    비베는 배우기쉬움??

    2007.10.12 03:21 [ ADDR : EDIT/ DEL : REPLY ]
    • 코드 한번 잘 봐보세요. 별로 어려울거 없어요 C랑 어느정도 비슷한데요 뭐

      글고 문법적인면보다는 테크닉쪽으로 익히는게 많아서(그리고 쉽고) 배우는건 별로 어렵지 않아요

      2007.10.12 10:38 신고 [ ADDR : EDIT/ DEL ]
  2. 이과애들 신기해... ... ㅋㅋ

    2007.10.12 11:34 [ ADDR : EDIT/ DEL : REPLY ]
  3. 알 수 없는 사용자

    내가봐도 신기해

    2007.10.14 06:28 [ ADDR : EDIT/ DEL : REPLY ]

오늘 드디어 델파이를 깔았다.

다른 언어 같았으면 그냥 바로 문법 조금 보고 실전 해보고 했겠지만..

도서관에 볼만한 델파이 문법서가 잘 없더라. 그나마 골랐던것도 좀 난해한 느낌이 있다고 할까? 그래서 그냥 깔자마자 아무거나 만들어봤다.

그 아무거나가 바로 Hello, World!프로그램. 뭐 프로그래밍 맨 처음할때의 필수 프로그램이라고 할까? 비주얼 베이직 맨 처음 배운다는 마음으로 이것 저것 만져 보면서 한번 간단히 만들어 보았다.

솔직히 말해서 이거 만드는데 5분 걸리더라.. 여기 저기서 VB의 어떤건 Delphi에서 어디고 이런거 비교해 본다고..

자 일단 스샷.
사용자 삽입 이미지

간단하다. 코드 자체는 매우 쉽다. 당연한 말인가.. 그냥 옛날로 돌아가보자 하는 마음에서 심심풀이삼아 해봤음.

폼을 잘 보면 단순히 에디트 박스랑 버튼 달랑 붙여놓은게 아니라 이것 저것 다듬은 것들이 좀 보일 것이다. 우선 폼의 크기도 작게 수정했고, 버튼의 캡션도 바꾸어 보았다. 그리고 텍스트 박스의 글꼴도 설정해 보았고, 폼 제목 표시줄도 바꾸어 보았다. 하는건 쉽지만 그냥 델파이의 속성창이 어떻게 생겨먹은 것인가 한번 알아보려고 만져 보았다. 

  VB의 속성창과 비교해보면 우선 VB는 기본적으로 속성창이 오른쪽에 있지만 델파이는 오른쪽에 있었고, 정렬 방식이 VB는 기능순이지만 델파이는 이름순이다. 뭐 이건 모두 바꾸는게 가능하다. 지원 기능면에서는 델파이가 훨씬 많은 것들을 지원했다. VB .NET과는 비교를 안해 보았지만, VB에서 API를 써야 하는 기능들이 델파이에서 속성 창만으로 꾸밀 수 있는 것들이 많았다.

  기본 컨트롤의 수도 델파이가 많았다. VB에서 공용컨트롤을 등록 해야 했던 것들이 기본적으로 지원 되더라.

  이렇게 이야기하면 델파이가 훨씬 강력한 것처럼 보이겠지만 그런 이야기는 아니다. 아직까지는 나는 VB가 훨씬 편하고, 그 많은 기능들도 꼭 필요한 기능같은건 아니니까. 원한다면 VB에서도 충분히 구현 가능하고.

  VB랑 델파이랑 비교해 보면서 가장 델파이에서 아쉬웠던 점은 변수 선언 방식과 한글 지원의 부족이였다. 타 언어와 비교해서 델파이는 변수 선언이 좀 까다로워 보이더라. 아직 익숙하지 않아서 그렇겠지만. 예를 들어 폼 로드 프로시저에 지역 변수를 선언하기 위해 폼을 더블클릭 하면 코드 창의 커서는 begin과 end 사이에 있다. 변수를 넣으려면 커서를 옮겨서 var을 적어 줘야 하는 불편함이 있었다. 이런 것들은 약간 불편함이 있었다.
  그리고 한글지원이 좀 많이 아쉬웠다. 한글화를 원하는건 아니지만, VB의 향수가 있어서 그런가, VB를 사용하는 느낌이면서 영문이라 좀 어색하다는 느낌이 많이 있었다. 거기다 한글 변수를 테스트 해 보았는데 역시 안되더라. 좀 아쉬웠다. 두개의 아예 다른 툴을 비교한다는 것 자체가 옳지 않은 일이지만, 아무래도 VB를 10년 넘게 사용하다 보니 이렇다.
  아무튼, 장난스럽게 델파이를 체험해 보았다. 기능 자체는 매우 강력하다는 느낌을 많이 들었다. 한번 공부해볼만한 가치는 충분히 있었다.
Posted by 머리

댓글을 달아 주세요

  1. VB는 때려 죽어도 델파이를 따라가지 못하는게 하나 있지... 바로 성능(Performance)!! 참고로 델파이의 성능은 혹자들의 말에 의하면 거의 C와 동급으로 취급함! 델파이로 만들어졌던 프로그램들을 생각해보렴... 알툴즈, ZipNAll, KMPlayer와 현재 이런 자막 처리하는 프로그램의 원조격인 아주 오래전의 Sasami2K라는 프로그램 까지... 저 복잡한걸 수행하면서도 그리 버벅 거리는 프로그램이 없지?;; VB는 두번 죽었다가 깨어나도 불가능한... 그러면서 VB와 비교해서 결코 떨어지지 않는 생산성은 델파이의 가장 큰 매력이지...ㅎㅎ 뭐 그 외에도 뭐 많지만 일단 여기까지...!! ㅋㅋ

    2007.09.05 00:44 [ ADDR : EDIT/ DEL : REPLY ]
    • ㅋㅋ 선배도 파스칼이랑 델파이 엄청 좋아하시네요 ㅎ

      하긴 성능면은 VB에서 아쉬운게 참 많았어요 사용하면서 ㅎ 그래서 그런 쪽은 대부분 API를 이용해서 성능차이를 끌어올리곤 했지만 그래도 좀 불안불안하죠;; 아 그러고보니 델파이도 외부 DLL 끌어와지지요? VB에서의 API사용은 사실상 외부 DLL 사용이니.. 같은원리면 델파이도 API 사용 가능할텐데요 ㅎ 와 그러면 진짜 델파이...

      VB가 약점이 많긴 많아요 느린 성능에 언어 자체도 좀 약하니까요. 그나마 툴이 거의 살려주고 있지만 그런 의미에서 VB.NET에 개인적으로 기대가 좀 커요 ㅎ CLR이란 놈땜시 더 느려지지 않을까 하는 걱정도 있지만 완전한 객체지향으로서의 VB라 +.+

      p.s 사사미까지 델파이였어요? 와 대단 ㅋㅋ

      2007.09.05 01:09 신고 [ ADDR : EDIT/ DEL ]
  2. 뭐 파스칼이랑 델파이를 싫어 하지는 않는데 그렇다고 뭐 그리 좋아 하지도...ㅋㅋㅋ 다만 파스칼과 델파이라는 언어 자체의 성능을 인정할 뿐...

    델파이로 DLL이라... 나도 안해봐서 모르겠지만 되는것으로 알고 있슴... 혹자들은 그러지... 델파이의 능력은 윈도우 상에서 실행 되는 모든 것을 만들 수 있다고!! ActiveX같은 것도 개발 되고 뭐 VC++ 못지 않게 뭐든할 수 있지...(얼마나 많은 것을 지원하는지는 단순히 Ctrl + N 눌러 봐도 보이자나...ㅋㅋㅋ)

    API를 말하는 것은 윈도우에서 제공하는 win32 API 말하는거지? ㅋㅋㅋ 뭐 여기도 놀라운게 있는데, 델파이에서는 윈도 API 사용을 위해서 따로 DLL을 불러올 필요 없어...ㅋㅋㅋ 델파이 자체에는 VCL(맞나?-_-)이라는 오브젝트 구조가 정의 되어 있어... 여기에 모든 오브젝트나 윈도 API들을 다 정의해 놓았어... 윈도우 API함수를 고대로 파스칼 형태로 바꾸어서 완벽하게 지원하고 있어...ㄷㄷㄷ 고로 따로 DLL 필요 없이 그냥 바로 win API를 사용하면 된다는... ㅎㄷㄷ VCL은 쉽게 말하면 MS의 MFC와 비슷한 거야... 필요한 클래스는 몽땅 상속구조로 정의되어 있어서 그때 그때 그냥 필요하면 바로 쓰면 돼..!! 이것도 델파이가 ㅎㄷㄷ한 이유중의 하나지..;; 무섭지 않냐? ㅋㅋㅋㅋ

    사실 MS의 .net이란 놈을 저번에 잠시 써봤는데, 델파이를 많이 배낀 느낌...ㅉㅉㅉ 항상 걔들은 남들꺼 배껴서 사는 애들이니까 -_ -;;;

    p.s ㅇㅇ 사사미는 포항공대 다니던 학샹이 델파이 사용해서 만들었다지... 실제 외국 소프트웨어 회사에는 델파이 사용을 무진장 많이 하는데 유독 한국에서만 철저히 외면 당하고 있어...(그래서 델파이 자료를 네이버에서 찾으면 별로 안나오는데 구글에서 찾으면 쏟아지지...ㅋㅋㅋ) 우리나라가 너무 MS의 돈의 힘에 끌려 다니는게 쵸큼 안습...;;;

    2007.09.05 11:31 [ ADDR : EDIT/ DEL : REPLY ]
  3. 박민수

    지나가다 씁니다. 마소의 영향으로 자연스럽게 vc++을 배우고 비베를 좋아하게 되었고 시대의 흐름에 맞게 asp 웹 프로그래머가 한때 되었답니다. 지금은 개발직은 아닙니다. 뒤늦게 취미생활겸 바둑 두듯이 델파이라는 언어를 해보고 있는데 그동안 델파이라는 언어에 관심조차 없었지만 한마디로 말하자면 왜 델파이를 지금껏 외면했을까 의문이 들정도록 강력한 도구임을 알게 해주었답니다. 비베로 dll도 만들어서 asp 와 연동도 해보고 api 끌어다 써본 경험도 있지만 사실상 mfc 는 배우기가 여간 까다로운게 아닌데 델파이를 평가하자면 vc 와 vB 그 중간쯤이라고 할까 그만큼 강력하다는 거죠 vb라도 그쪽에 전문가가 되면 최적화나 나름대로 노하우를 통해서 구현못할건 없습니다 그러나 배포문제나 성능문제에서 약간 아쉬운면도 존재하지요 하지만 감히 말합니다 델파이에서는 그 2%아쉬웠던점 모두 해결가능하다고 여겨집니다.어설프게 vc에서 생산성이나 성능문제에서 해맬바에는 델파이에서 그 문제의 해결책을 찾는것도 좋은 방법이라고 생각드네요 ^^
    아무튼 재밌는 개발도구입니다.

    2008.04.16 10:53 [ ADDR : EDIT/ DEL : REPLY ]

커맨드 버튼 하나만 만들어 놓고 붙여넣기


나머지는 알아서 주석으로 해결~~


Option Explicit
'가변 인수 테스트
'Inputbox로 수를 입력받아 그 합을 구한다.


'UBound 함수 : 배열의 마지막 번호를 넘긴다
'LBound 함수 : 배열의 첫 번호를 넘긴다.
'ex : Dim exam(2 to 4) as Integer
'Debug.print LBound(exam) 결과 : 2
'Debug.print UBound(exam) 결과 : 4

Public Function Sum(ParamArray vArgs())

    Dim i As Integer '루프 변수
    Sum = 0
   
    For i = LBound(vArgs) To UBound(vArgs) '합계 구하는 루프
   
        Sum = Sum + vArgs(i)
   
    Next i
   
End Function

Private Sub Command1_Click()
Dim Args() As Integer '인자 배열
Dim InputNumber As Integer '입력 변수
Dim Count As Integer '첫 입력인지 확인
Dim i As Integer '출력값

Count = 0



Rem 입력 받는 루프, 0이 나올때까지 루프

Do
    InputNumber = Val(InputBox("수를 입력해 주세요(0 : 입력 종료)", "입력")) '입력 받는다
   
    If InputNumber <> 0 Then '입력 받은게 0이 아니라면 배열에 수를 넣는다.
       
        If Count = 0 Then '제일 처음 입력하는 것이면
            ReDim Args(1) As Integer '일단 배열 한개 만들고
            Args(0) = InputNumber '0번째 배열에 첫 수를 넣는다.
            Count = Count + 1 '카운트 추가 -> 사실 이거는 bool형으로 해서 처음이냐 아니냐만 체크해도 되는데.. 일단 이걸로 수도 셀수 있고 하니 놔둠.
       
        Else '처음 입력이 아니면
       
            ReDim Preserve Args(UBound(Args) + 1) As Integer '데이터를 보존하면서 배열 크기 재선언
            Args(UBound(Args) - 1) = InputNumber 'VB의 배열 틍징 -> 배열 크기를 1로 하면 공간이 2개 생긴다 -_-;; -> 그래서 마지막 번호 앞의 거에다가 입력 값을 넣는다
        End If
   
    End If
   
Loop While InputNumber <> 0 '0이 입력안되는동안 계속 루프

If Count <> 0 Then
    ReDim Preserve Args(UBound(Args) - 1) As Integer '이거 지우고 한번 debug.print로 배열 첨부터 끝까지 루프 돌려보면 안다,(UBound,LBound 참조) 맨 마지막에 배열 요소 하나가 남기 때문에 공간 하나를 없앤다.
End If

'출력
For i = LBound(Args) To UBound(Args)
    Debug.Print "Args(" & i & ") : " & Args(i)
Next i

'가변 인수 테스트
Debug.Print
Debug.Print Sum(1, 2, 3, 4, 5)
End Sub

Posted by 머리

댓글을 달아 주세요