제가 생각하기에는... Win32보다는 VCL을 좀 더 심도있게 공부해보시는 게 좋지 않을까 싶습니다. Win32 자체는 단순한 함수의 집합이며 심도있는 기술이라기보다는 필요할 때 갖다 쓸 수 있는 테크닉에 가깝지만, VCL은 잘 활용하면 전체 구조의 완성도를 많이 높일 수 있는 "프레임워크"입니다.
게다가 Win32는 현재 그 자체를 직접 만든 MS가 스스로 사장시키겠다고 벼르고 있는 것을 현업 개발자들과 개발업체들이 거부하고 버티고 있는 상황이라, 앞으로 한 5년쯤 후엔 어떻게 될 지 모르는 위험성이 있습니다. 기존 개발자들은 꽤 몇년씩 전에 익혀서 오랫동안 Win32를 잘 써왔고 본전은 웬만큼 뽑았다고 할 수도 있습니다만, 지금 새로 공부하시는 데 Win32에 많은 시간을 투자하는 것은 좀 그렇지 않을까요.
반면 VCL은 특정 플랫폼에 의존하는 기술이 아닙니다. 다시 말해, 윈도우에서만 사용할 수 있는 것이 아니고, 당장 닷넷 버전인 VCL.NET이 있고, 리눅스 버전이라고 할 수 있는 CLX도 있습니다. (CLX를 이용하는 카일릭스는 지금은 버전업이 중지되어 있지만 언제든 리눅스 개발 시장이 살아나면 코드기어에서 다시 출시할 의사를 가지고 있죠)
다시 말해, VCL 자체는 윈도우가 죽든 살든, 윈도우 대신 리눅스가 뜨든 그렇지 않든, 닷넷 시대가 오든 안오든 관계없이 언제든 유용한 기술입니다. 게다가 Win32에 비해 델파이나 C++빌더 개발자가 공부한 그대로 현업에서 써먹을 수 있는 활용도도 더 높습니다. (VCL보다 Win32 API를 중시하는 개발자들중 상당수가, VCL에 더 쓰기 편한 같은 기능이 있는데도 그걸 알지 못하고 VCL이 Win32보다 기능이 부족하다고만 생각하는 경우도 많습니다)
VCL을 공부하는 편이 더 나은 또 한가지 이유는, 그냥 단순 함수들의 집합일 뿐인 Win32 API와는 달리, VCL은 완전한 프레임워크로 그 내부가 상호 유기적으로 잘 짜여져 있다는 것입니다. 아시다시피 Win32 자체는 C++도 아닌 C 언어를 위해 만든 것이기 때문에 클래스 개념조차 없고, 오직 함수, 함수 뿐입니다. 그래서 Win32에 치중해서 공부하다보면 아무래도 OOP적인 사고방식에서 벗어나기 쉬울 수 있습니다. VCL에도 클래스화되지 않은 일부 전역 함수들이 적지 않습니다만, 현실적으로 클래스가 아닌 편이 더 나은 경우일 뿐이고 클래스화, OOP화되어 있는 코드가 압도적으로 더 많습니다. 그래서 VCL 프레임워크에 익숙해지면 익숙해질 수록 OOP에도 같이 익숙해질 수 있다는 보너스도 있습니다.
저 자신이 고급에 해당하는지 아닌지 자신은 없습니다만, 적어도 제가 확실히 아는 것은, 중급을 넘어 고급으로 가려면, 아키텍처 혹은 프레임워크에 익숙해야 한다는 것은 기본 전제라는 것입니다. (저는 저만의 아키텍처로 저만의 프레임워크를 만들어서 작업합니다만 그게 고급 개발자의 전제일지 아닐지는 모르겠습니다) 물론 OOP도 아닌 프로시주얼한 코딩에만 익숙한 개발자가 중급이나 고급으로 갈 수 없다는 것은 아닙니다만(예를 들어 장비쪽의 임베드되는 개발을 하는 분들께는 아직 OOP가 시기상조일 수 있으니까요) 많은 분야에서는 그렇습니다.
특히 흔히 SI라고 부르는 업무 개발에 있어서는 아키텍처와 프레임워크는 너무나 중요합니다. 같은 델파이/C++빌더 개발이라고 해도, 90년대식의 CS 개발, 예를 들면 어떻게든 결과물만 나오면 된다는 식으로 계속 가다가는 모든 델파이/C++빌더 개발자는 몇년의 경력을 쌓았든지 단순 코더밖에 안될 겁니다. 업무 개발 분야의 강자인 자바와의 경쟁은 꿈도 못꿀 거구요.
머리가 아파서 간단히 몇 줄만 쓰려고 맘먹었는데, 너무 장황해지고 삼천포로 빠지기까지 했네요. (누가 저 삼천포에서 좀 건져줘요~) 어쨌든.. '초보' 님께서 고민하는 내용은 거의 절대 다수 개발자들이 공통적으로 고민하는 내용이고, 저 자신도 끊임없이 개념을 의심하고 다시 재정립하고 하면서 여기까지 왔습니다.
자, 정리하는 겸 해서 한가지 예를 들어 보겠습니다. 바로 그저께인가 여기 델파이 Q/A 게시판에 올라온 질문에 대해 제가 답변을 간단히 쓴 것으로 스트림에 대한 것이 있습니다. 스트림 그 자체는 별 대단한 것도 아니고 VCL의 소스를 봐도 그렇게 어려운 코드도 아닙니다만, 같은 업무 개발이라고 해도 스트림을 활용할 줄 아는 개발자와 못하는 개발자 사이의 차이는 꽤 큽니다. 많은 경우에 스트림을 사용하는 편이 코드도 단순해지고 성능면에서나 유지보수도 더 쉽습니다. 하지만 많은 델파이/C++빌더 초급, 중급 개발자들이 스트림을 제대로 활용하지 못하는 것을 종종 봐왔습니다.
또, 특정 디렉토리 아래의 파일을 찾아내려고 할 때 Win32의 FindFirstFile을 쓸 수도 있고 VCL의 FindFirst를 쓸 수도 있습니다. VCL의 FindFirst는 사실 내부적으로 Win32의 FindFirstFile을 호출하기 때문에 기능면에서나 성능 면에서나 차이가 없습니다. 하지만 VCL의 FindFirst를 사용하면 닷넷이나 리눅스로 바로 포팅이 되는 코드가 되고, Win32의 FindFirstFile을 쓰면 포팅이 어려운 코드가 됩니다.
Win32에만 있고 VCL에는 없는 기능은 드뭅니다. 저번에도 예를 들어서, 프로세스들에 대한 세부 정보를 알려주는 Win32 함수들은 VCL에 해당 기능이 부족하긴 하다고 한 적이 있습니다. 하지만 다시 말하지만, 드뭅니다. 그래서 제가 추천하고 싶은 방향은, 무작정 Win32 API에는 뭐든 다 있을 거니까 일단 무조건 Win32를 열심히 파고 들어가보다는, VCL을 먼저 충분히 익히고 정말 드물게 나타나는 일부에 대해서만 Win32 정보를 알면 된다는 겁니다. Win32와 VCL에 비슷한 기능이 있을 경우, 거의 대부분 VCL의 구현이 더 쉽고 사용하기도 편하며 문제 발생 가능성도 적습니다. (게다가 다른 플랫폼 포팅까지 쉽고 말이죠!)
초보 님이 쓰신 글 :
: 여러 고수분들께 궁금한점이 있어서.. 게시판에 글을 올립니다.
: 저는 VB와 델파이를 이용해서 DB관리류의 프로그램만 제작해봤습니다.
: 사실 프로그래머라고 하지만 copy&paste형식의 노가다 프로그램이 다라고 할만큼.. 기술적인 난이도는 없었던것같습니다.. DB설계나 튜닝에 고급기술이 있는거도 아니고... 그러다가 문득 고민을 해보게 되었습니다.. 여기서 한단계
: 더발전해가기위해서는 어떻게 공부를 해야하나..
: 이리저리 고민을 해봤는데 멀티쓰레드같은 winapi의 깊은 곳을 파야하는 생각이 드는데.. win32api책에 나오는 멀티쓰레드 개념같은것이 실제 델파이에서는 클래스와 시켜나서.. 같은 개념인지.. 아니면 사용법이 틀린건지 그런거도 헷깔리고.. 대부분의 예제들이 MFC기준으로 나오는데.. 어떻게 델파이나 C++빌더에서 적용을 시켜야하는지.. 그런거도 모르겠구요.. 저같은 고민을 밟아보신분들 없나요?-0-;
|