뭐 언어마다 장단점이 있고 어떤게 더 우월하다 하고 싸움붙이는건 



엄마가 좋아 아빠가 좋아 수준의 질 낮은 행위라고는 생각하지만 일단 장단점을 알아야 나중에 사용할때 도움이 되지않겠는가? 



일단 속도면에서는 아직까지는 메모리나 포인터를 직접 관리하는 C++이 우월한 편이다. 하지만 개발 난이도는 넘사벽급으로 C# 이 쉽고 적응하기 좋다.





하지만 C++로는 가능한게 C# 단독으로는 불가능한 경우가 꽤 있는 편이다.


예전에 참가했던 Github 프로젝트에서 Flash Object위에 한글 자막을 띄워줄 수 없느냐 라는 문의가 들어왔을때 한창 MFC와 C++을 배우고 있던 시기라 그냥 DC를 얻어와서 화면상에 그려버리면 제아무리 Flash Object라고해도 그 위에 그릴 수 있지않을까 했지만 애초에 C#에서는 사용자가 DC를 직접 컨트롤 할 수 없게 되어있었다. 



뭐 C#에도 Image나 Bitmap같은 클래스가 존재해서 예전에 C++에서 하던 보편적인 작업들은 가능하지만(엄밀히 말하면 해당 클래스들 하부에는 DC를 컨트롤하는 부분들이 있을것이다) 좀 더 하드웨어를 직접적으로 컨트롤 하는 그런 작업들은 마이크로소프트에서 막아둔것이다. 


포인터도 사용은 가능하지만 Visual Studio한테 나 여기서 여기까지 이 영역 안에서만 포인터 직접 쓴다! 하고 고지를 날리면서 작업해야하고.



사실 개인적으로는 둘 중 하나만 파는게 아니고 둘 다 알아야 한다고 생각한다. 예를 들어서 C#에 있는 클래스중에 List<T>라는 클래스가 있는데 이 클래스는 간단히 말해서 동적배열이다. 하지만 C++에서 사용하는것과 달리 선언하는것과 정리하는 작업(애초에 정리가 필요없는 경우가 대부분이다)이 정말 쉽고 동적과 정적으로의 전환이 매우 간단하다. (ToList와 ToArray 한방이면....) 하지만 내부적으로는 C++에서의 동적배열과 거의 유사하기때문에 (아마 기본적인 구조는 linked list일것이다) 포인터나 Linked list를 아예 모른다면 특정 경우에서는 엄청 해맬 수 있다.



결국 C#도 기초를 보면 C++이고 OpenCV같은것들은 C#코드가 따로 있는게 아니고 C++의 라이브러리를 wrapping해서 사용하고 있는 상황이고 말이다.



여하튼 개인적으로 사용할때는 C#을 매우 엄청 많이 즐겨쓰는 편이다. 만약 프로그래밍을 배운다면 C++로 시작하는것보다는 C#으로 학습을 시작해서 기초적인 흐름을 잡고 그 이후에 C++을 배우는것도 나쁘지 않을것이라고 본다. 물론 경우에 따라 다르고 상황에 따라 다르긴 하겠지만...파이선도 쉽고 강력하다고 하지만 개인적으로는 C#쪽이 개발 결과물도 우리가 평소에 보던것과 가깝고 일단 개발환경을 구축하는 난이도가 다르다고 생각한다.




하지만 C#으로 입문해서 거기에 머물러 있는것은 좋지않다고 생각한다. 


필자는 C#으로 먼저 프로그래밍을 배우고 이후에 C++하고 MFC를 배웠는데 C++하고 MFC를 배우면서 불편함도 엄청나게 느꼈지만 아마 C++을 배우지 않았으면 지금보다 개발능력이 현저하게 떨어지는 수준이였을것이다. 지금도 개발능력이 높다고는 못하지만....일단 뭐든 배워서 남주는건 없는것같다. 특히 이 분야는 아는 만큼 보이는것도 많고 느끼는 점들도 많아지는것 같고

+ Recent posts