한 말씀 드리고 싶다는 생각에 적어보게 되었습니다.
다음 링크는 스택오버플 선생님께서 친절히 알려주신 글입니다.
결론부터 말씀드리자면, 답은 네 맞습니다!
그럼 이 글은 왜 쓰는건가요?
보통 프로그램을 개발할 때 다음과 같은 사항을 고려할겁니다.
- stability 안정성
- agile 신속성
- maintain 유지보수
고려할 사항들이 참 많을 것 같은데 그냥 위 3개만 두고 이야기 해 보도록 합니다.
* 이 글을 적으면서 저도 관련 지식이 충분하지 않는 것을 알기 때문에 조심스럽지만 할 말은 해보려 한다는 관점에서 봐 주시면 감사하겠습니다.
다음 심플한 프로그램을 작업한다고 가정해보겠습니다
윈도우 응용 프로그램을 하나 작성해서 개 사진을 올리면 개를 표시하고 고양이 사진을 올리면 고양이라고 표시
1. 코드 안정성
프로그램이 시작 할 때부터 종료시까지 메모리 누수가 하나도 없이 동작하면서 작업 도중 느려지거나 멈춤현상 없이 종료시까지 원할히 작업을 수행 후 종료가 되면 사용한 모든 자원을 반납하는 것(하나의 예로 캠 레코딩을 하던 중이라면 종료 즉시 캠 관련 리소스를 즉각 반납)
위 글도 지저분해서 한 마디로 써보려고 합니다.
프로그램 시작부터 끝까지 안 멈추고 잘 동작하고 문제없이 종료
• c++ 입장에서..
그러면 c++로 작업을 한다면… 윈도우는 UI가 있는 응용프로그램이 다수이기에, UI 응용프로그램을 작성하면서 아마도 매우 많은 곳에서 mfc를 사용하고 있을 겁니다..
mfc언급도 길어질 것 같아서 죄송하게도 패스를 하겠습니다.
오픈소스를 사용해서 링크를 걸어 응용 프로그램을 작성하기까지 가정하였을 때 적게는 1개 많게는 열가지 정도로 라이브러리들을 하나하나 링크를 걸어줘야 합니다. 시간이 걸릴 수 밖에 없습니다.
안정성 부분에서 이제 본론으로 들어가서 내가 사용한 모든 라이브러리를 규칙에 맞게 로드, 초기화 후 코드를 사용하고 종료 시 규칙에 맞게 프로세스를 종료하고 자원을 반납합니다. 당연한 말을 왜 쓰나? 하지만 모든 코드 작업 시 반드시! 지켜줘야 하고 단 하나의 실수도 용납되지 않습니다.
(사람의 실수를 안하기 어렵고 당연히 마이너한 실수는 프로그램의 동작에 영향을 주기 미비하지만 이 경우 위에 언급한 것 처럼 깔끔한 자원 반환이 이뤄지지 않을 수 있습니다)
•c#의 입장에서
- 패키지 관리자로 따끈하고 최신 딥러닝 모듈을 받습니다.
- 필요한 UI를 설계하고 코드 작업을 수행합니다.
마찬가지로 안정성 부분을 이야기하자면.. 최신 개발환경을 사용한다고 가정하였을 때, 악의적인 코드를 넣지 않는 이상 프로그램이 위에서 언급한 메모리 반환 문제는 발생하지 않는다고 보면 될 것입니다(메모리 관리 언어니까요) 개발자는 프로그램 동작 중 속도와 관련된 응답성만 고려해보면 좋을 것 같습니다. 일반적으론 그것만 봐도 충분하니까요
2. 신속성 - 고객 요청 대응
신속성이라고 쓰니까 너무 모호하네요 고객의 요청에 대한 대응이라고 적어보겠습니다.
고객이 어느날 화면에 버튼을 누르면 하트를 그려주세요 라는 요청을 했다고 가정해보겠습니다.
•c++ 입장에서
요구 분석 과정은 공통적인 과정이니 생략을 하고 ui에 하트를 그려야 하니 필요한 것은 ui에 실질적으로 표시를 할 그리는 코드를 작성해야 하고 그리고 하트를 그리는 수식이 필요하겠네요
• c# 입장에서
- drawheart 메소드를 호출합니다.
* 신속성 측면에서 말하고자 하는 것은 단순 작업에 대해 얼마나 많은 작업량이 들어가는가 입니다.
단순 작업에도 c++ 작업이 c# 작업보다 손이 많이 깁니다.
3. 유지보수
그러면 이제 20년 이상 된 오래된 소프트웨어 회사가 있다고 가정해보겠습니다. 20년 이상 유지해온 회사이니 자부심도 크겠고 기술력도 있어(?) 보입니다.
그러는 중에 수 많은 개발자들이 물 흐르듯(?) 지나갑니다… 대부분 그렇겠죠? 기술력 있는 소프트웨어 제품은 신규 입사한 개발자가 보기에는 먼 산을 바라보게 할 가능성이 높습니다. 결론은 유지보수 난이도가 매우 높습니다. (c++)
반면 c#의 경우엔 어떨까요? 위 2번과 같은 경우처럼 복잡성이 떨어지니 c++보다는 유지보수 난이도가 훨신 낫겠죠
• 마지막으로
이 글은 사실 개발자가 아닌 운영진 중에 막연히 c++이 c#보다 빠르니까 c++으로 프로그램을 개발해야 한다 혹은 막연히 c++가 낫다고 하시는 분들에 대해 한번 생각해봐 달라는 취지로 적어보려 했지만… 맨 위에 스택오버플 선생님도 그렇듯 매우 복잡한 문제라 쓰다보니 글이 지저분 해 보입니다.
최소한 윈도우 환경에서 운영하는 프로그램인데 c++를 고집하신다면, 심지어 mfc라면.. 이제는 왜 고집을 하는지에 대해 논리적으로 생각해봐야 할 시점이 아닌가 합니다.
21