모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_8519
    작성자 : ㄱㅡ
    추천 : 11
    조회수 : 1966
    IP : 118.45.***.254
    댓글 : 26개
    등록시간 : 2015/03/10 13:32:14
    http://todayhumor.com/?programmer_8519 모바일
    [펌][개발자 컬럼] C/C++ 를 학습해도 괜찮을까?
    재미난 글을 봤습니다.
     
    어디선가 요즘은 c/c++보다 자바가 빠르다는 말도 안되는 소리도 하던데....
     
    결론은 용도가 모두 다르다! 라는것
     
    아이폰이 나오면서 Object-c가 급상승하지만 요즘 하락세군요...... Object-c실컷 배웠는데...
     
    암튼 저는 아직도 자바를 싫어하는 1人...
     
    메모리는 내가 관리해야지.. 다른누군가가 관리해주는건 싫어 ㅠㅠ
     
    잡설은 여기까지 하고 재밋게 읽어주세여
     
    퍼온거니까 저한텐 머라하지 마세여 ㅋ
     
     
    배경
    Quora에서 흥미로운 질문을 보았다. C++를 배우는게 아직 가치가 있는지에 대한 질문이었다. 이러한 질문을 이제 시작하는 분들에게 가끔 받기도 한다. 횟수로 벌써 14년 넘게 C/C++ 개발 경력을 가지고 있는 나에겐 참으로 의미있는 질문이었다.

    Quora에 가보면 알겠지만 대부분 C++를 공부하는 것에 대해 긍정적인 것을 알 수 있다. 나도 C/C++의 골수팬이지만 지금은 C#, Javascript, Java에 빠져있다. 이밖에 다른 언어를 사용하는 것이 재밌고 흥미롭다. 예전에 나는 자바 개발자를 우습게 봤고 심지어는 자바라는 개발언어 자체가 경멸의 대상이었다.

    이제는 그러한 생각들이 어리석었다는 것을 안다. 이와 비슷한 주제로 "어떤 개발언어를 공부할까?"라는 글을 남기기도 했다. 이번에는 C/C++이라는 언어 자체에 대해 여러가지 생각을 정리해 보고자 한다.

    C/C++의 위기론
    C/C++은 1990년 중순 자바가 등장하고 선풍적인 인기를 끌면서 모두들 망할 것이라 생각했다. MS 또한 자바를 베껴서 C#를 만든 사실만 보더라도 그 매력이 얼마나 대단했는지 알 수 있다. 일단 자바라는 개발언어 자체가 C++에 반감을 가지고 태어난 언어였다. 그때 당시 자바 개발자들은 C++은 진정한 OO가 아니라고 주장하기도 했다.

    그 이유 중 하나는 클래스 관리가 너무 복잡했기 때문이었다. 자바는 단순히 폴더로 정리하고 import만 시켜주면 클래스에 바로 접근 할 수 있었다. 패키징도 간단했다.
    반면 C++은 그렇게 단순하지 않았다. 빠르지만 멍청한 컴파일러 덕분에 include는 세심하게 순서를 맞춰줘야만 했다. 폴더의 위치가 같을 수도 있고 다를 수도 있었기 때문에 파일 관리를 따로 잘 해줘야 했다. 다른 라이브러리와의 충돌도 빈번했기 때문에 전체 라이브러리에 대한 관리도 필수적이었다. C의 기능을 그대로 가져왔기 때문에 네이밍 폴루션에 대한 주의도 요했다. 결국 설계 시에 개발자 역량이 너무도 중요했다.

    또 자바 개발자들이 C/C++에 대해 가장 불만스러워 했던 것 중 하나는 메모리 관리 문제였다. 메모리의 생성이 스택과 힙에 따라 다르다는 사실부터 골치아팠다. "."과 "->"로 구분해서 접근하는 것도 짜증났다. (대부분의 개발언어는 "."만 사용한다.) 툭하면 잘못된 메모리 접근이라며 프로그램이 죽어버린다. 여차하면 메모리 릭이 발생하여 전체 시스템을 먹통으로 만들고 대충 개발하다간 취약점도 넘쳐나서 보안 문제도 많이 발생시킨다.

    "실수하는게 인간인데 이렇게 골치아파서야 제대로 된 비지니스 로직을 세울수나 있겠는가?"라는 것이 C/C++를 싫어하는 분들의 생각이었다. 자바는 이런 문제에 대해선 확실히 강점을 가지고 있었다. 메모리 하나만 보더라도 개발자가 관리를 하지 않는다는 사실이 너무나도 매력적이었다. 거기다 플랫폼 독립적이라는 덤까지 주니 많은 C/C++ 개발자들이 자바로 넘어가기 시작했다.

    OS 점유율 90% 이상을 잡고 있던 MS의 태도는 어떠했을까? Visual Studio.NET이 나오면서 C++ 개발자들에게 비주얼 베이직과 같은 방식으로 개발하라고 강요했다. Visual Studio 2008까지 C++ 개발자의 반 이상이, 아니 대부분이 Visual C++ 6.0를 사용하고 있었으니 MS가 C++ 개발자들을 얼마나 홀대 하고 있었는지 알만하다. 대표적인 기능이 클래스 위저드 인데 이 기능이 Visual Studio.NET 부터 사라진 것이다.

    그때 당시 2000년도쯤 MSDN 세미나도 갔었는데, C#이나 자바가 개발언어를 주도 할 것이고 C/C++은 이제 사라질 것이라 전망 했었다.
    ​현재의 C/C++의 위치
    지금의 C/C++은 어떤 위치에 있을까? 그 전문가들의 말처럼 C/C++은 망하고 있을까? TIOBE(2015년 2월)에서 발표한 내용을 살펴보자.

    오히려 자바(15.345%)가 뚜렷한 하향세를 보이고 있는 것을 알 수 있다. C(16.488%)는 꾸준히 지속되고 있고 C++(6.612%)도 한풀 꺽였지만 Objective-C(6.024%)를 꺽고 3위로 도약한 모습이다. 참고로 C#(5.738%)은 5위고 자바스크립트(3.514%)는 6위다. C/C++를 하나로 묶으면 25%에 육박하는 압도적인 점유율을 보인다.

    거기다 "The Programming Languages Beacon"의에 따르면 2013년도 소프트웨어 제품 기준으로 MS Windows, Linux, Apple MAXOS, Google Chrome OS, Apple iPhone OS, Google Android, RIM BlackBerry OS 4.x, Amazon Kindle OS, Gnome, Google Desktop Search, Microsoft Office, Adobe Systems Acrobat Reader, Evernote, Oracle Database, MySQL, IBM DB2, Microsoft SQL Server, MS Internet Explorer, Safari, Google Chrome, Java Virtual Machine 등등등이 모두 C 이나 C++로 개발되었다. 아마 현재 시점에는 조금 달라진 소프트웨어도 있겠지만 대부분은 그대로 가고 있는 것으로 안다.

    C++를 내놓은 자식처럼했던 MS도 Visual Studio 2010부터 C++ 개발자를 끌어모으기 위해 클래스 위저드 기능을 넣었다. 거기다 구글도 핵심 소프트웨어들은 모두 C/C++를 사용하고 있다. 국내의 온라인 게임서버도 대부분은 C/C++인 것으로 안다.

    C++의 강점
    지금 수백개의 개발언어가 나와있다. 현재 응용 소프트웨어를 C++로 개발하는 경우는 이제 몇 남지 않았다. 윈도우 응용은 MFC에서 C#으로 많이 개발하고 있으며, iOS는 Objective-C나 Swift로 대부분 개발할 것으로 보인다. (Objective-C++를 사용하면 C++로 많은 부분을 개발할 수 있긴 하다.) 웹앱 같은 경우에는 프론트엔드든 백엔드든 간에 C/C++로 개발하는 경우는 정말 찾기 힘들다. 주요 모듈 단위로 C/C++을 사용하기도 한다.
    불편하어렵고 리스크가 큰 C/C++은 도대체 왜 주요 소프트웨어의 개발언어로 채용될까. C/C++의 강점을 정리하면 다음과 같다.
    • 높은 성능 속도: 모두가 첫번째로 꼽는 이유다. 컴파일 시에 CPU에 해당하는 최적의 바이너리를 생산해낸다. 자바나 C#의 성능 속도가 C/C++를 거의 근접했다는 말은 사실이기도 하지만 뛰어 넘을 수는 없다. 물론, 개발자의 역량에 따라 자바나 C# 보다도 구린 결과를 내놓기도 한다. 
    • 컴퓨터 구조와의 밀접한 관계: C/C++은 컴퓨터 구조와 밀접한 관계를 가졌으며 이러한 자원을 활용한 개발이 가능하다. 즉, 하드웨어의 성능을 끌어올릴 수 있는 개발이 가능하다. 메모리를 직접 관리한다는 것이 단점일 수도 있지만 오히려 장점이 될 수도 있다는 의미다. 또한 멀티코어에 맞춰 다양한 병렬처리 기법을 직접 제어하기도 수월하다.
    • OS 개발언어: 결국 소프트웨어는 운영체제 위에서 동작한다. 그렇다면 운영체제가 개발된 언어가 가장 궁합이 잘 맞는다는 의미이기도 하다. 대부분의 운영체제는 모두 C/C++로 개발되었다.

    정리를 해놓고 보니까 모두 같은 말처럼 느껴진다. 결국 성능 속도다. 이젠 안전성 좋고 성능 좋은 boost와 같은 C/C++ 오픈소스가 지천에 널렸다. QT와 같은 UI 프레임워크를 사용하면 플랫폼 독립적인 개발도 가능하다. 이제 위험한 코드를 양산할 확률이 예전만큼 크지 않다. 그리고 어떤 코드가 위험한지는 CWE(Common Weakness Enumeration) 같은 곳을 잘 참조하면 많이 피해갈 수 있다. 이에 따라 정적/동적 분석툴들도 다양하게 배포되고 있다.

    거기다 C/C++은 아직도 진화하고 있다. 불편했던 메모리 관리 문제나 다른 언어들의 좋은 장점들을 흡수하여 발표하고 있다. 현재 C는 C11, C++은 C++ 11까지 발표된 것으로 안다. (참고로 C와 C++은  같은 워킹 그룹이 아니다. 따로 발표하고 있으며 다른 언어로 인지하는 것이 옳다.)

    C/C++ 를 통해 얻을 수 있는 능력
    C/C++은 혼자 공부하기에는 분명 어려운 개발언어다. 대부분 "포인터"에서 많이 좌절하곤 한다. 결국 메모리에 대한 개념이 너무 어렵다. 그 이유는 운영체제에 대한 기반 지식 없이 무턱대고 C/C++를 공부하려하기 때문이다. C 언어는 유닉스라는 운영체제를 최초로 탄생시킨 개발언어다. (MAC OS X와 iOS 기반이 유닉스다.) 그만큼 운영체제와 매우 밀접한 관련이 있다.
    그래서 C/C++ 입문자를 위해 다음과 같은 글도 남겼다.
     
    결국 C/C++를 제대로 공부하면 메모리 관리, 파일시스템, 네트워킹과 같은 컴퓨터 구조에 대한 깊은 이해가 가능하다. 물론 이러한 지식을 얻기까지 꾸준한 정진이 필요한 건 사실이다. 경력이 10년이 넘어도 제대로 된 지식을 쌓지 못한 개발자들도 많이 봐왔기 때문이다. 이렇게 말하는 나도 부족함을 느낀다.

    개발자가 되려면 무조건 C/C++를 공부해야 할까?
    배경에서 언급했던 이 질문을 대답해 보라면 나는 "아니오"다. 모든 개발자가 C/C++를 할 필요는 없다고 생각한다. 불과 몇년전만 하더라도 개발자가 되려면 반드시 C/C++를 공부해야 한다고 생각했다. 나 자신이 이를 통해 얻은 것이 너무도 많았기 때문이다. 그리고 C/C++를 모르면 프로그래밍에 대한 깊은 이해가 불가능하다고 생각했다.

    하지만 이제는 너무도 다양한 개발 분야가 존재한다는 사실을 깨달았다. 예를들어 오로지 프론트 앤드 개발자로 남고 싶다면 C/C++를 학습하는 것이 얼마나 도움이 될지 잘 모르겠다. 이 경우는 비지니스 로직에 세우는 능력이 더 중요하지 않을까 싶다.

    굳이 비교하자면 C/C++를 학습한다는 의미는 운전면허 1종을 따는 것과 비슷하다. 1종 면허가 있으면 2종 차량을 운전할 자격이 있다. 바로 할 수는 없겠지만 1종이 있다면 사고나지 않을 정도로 만큼 쉽게 배울 수 있다는 의미다.
    반면 2종 보통인 경우 7년 무사고면 1종 면허로 갱신이 가능하다. 즉, 7년동안 2종에 충실하면 그제서야 1종을 몰더라도 쉽게 운전할 수 있다는 의미다. (하지만 2종 오토라면 1종 시험을 다시 봐야 한다.)

    C/C++를 제대로 사용하고 있는 개발자라면 자바라는 개발언어를 배우는 것이 그렇게 어렵지 않다. 다른 언어도 마찬가지다. Objective-C나 자바스크립트같이 패러다임이 달라진 것은 조금 공부를 해야겠지만 문법이나 흐름자체에서 헤매는 경우는 거의 없다. 내 경험상 C/C++ 경력은 다른 개발언어를 이해할 때 정말 큰 도움이 된다.

    반면 자바 개발자라면 C/C++를 학습한다는 것이 만만한 일이 아닐 것이다. 2종 보통 면허를 7년 무사고로 1종으로 가는 것처럼 자바에 능통하면 C/C++를 학습하는것이 조금은 쉬워질지도 모르겠다. 하지만 아마도 모든 것이 부조리해 보이지 않을까 싶다.

    C/C++은 다른 개발언어에 비해 확실히 진입장벽이 높다. 하지만 이는 경쟁력이 있다는 의미이기도 하다. 나에게 쉬운 것은 남에게도 쉽다는 사실을 잊지 말아야 한다. 영어를 잘하는 사람을 대우해주는 이유는 모두들 수많은 시간을 투자했지만 능통하기가 어렵다는 사실을 우리는 알고 있다. 
    C/C++을 모든 개발자가 학습할 필요는 없다. 자신이 가야하는 길에 프론트 앤드 개발자처럼 지금 상황에서도 전혀 사용할 일이 없다면 정말로 필요없다고 생각한다. 다만 코어 개발자를 노리거나 경쟁력을 원한다면 C/C++도 자신의 학습 로드맵에 넣어야 하지 않을까 생각해본다.

    이 게시물을 추천한 분들의 목록입니다.
    [1] 2015/03/10 13:41:20  183.99.***.85  bboy엘리  274185
    [2] 2015/03/10 14:18:05  59.13.***.130  오렌지쥬스a  601374
    [3] 2015/03/10 14:21:10  218.236.***.161  돈로사리오  555749
    [4] 2015/03/10 16:08:31  222.109.***.99  MERGE  163312
    [5] 2015/03/10 19:03:22  121.67.***.202  mama  51369
    [6] 2015/03/10 19:46:59  223.62.***.66  게임할줄몰라  115133
    [7] 2015/03/10 23:17:14  118.41.***.83  자켄  542809
    [8] 2015/03/11 01:44:53  121.143.***.81  황금비  483546
    [9] 2015/03/11 14:02:44  175.223.***.210  이스터에그남  391278
    [10] 2015/03/11 15:49:25  117.111.***.232  쓰레드  517943
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    23458
    [KOCCA] 2024 게임콘텐츠 제작지원 이용자평가 체험단모집 장파랑 24/11/26 16:56 295 0
    23457
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/11/18 14:02 362 0
    23456
    [한국콘텐츠진흥원] 2024 게임콘텐츠 제작지원 이용자평가 이용자 모집 장파랑 24/10/28 18:24 824 0
    23455
    논문 읽는 사람들을 위한 문서 번역 서비스 rWhale 24/10/10 13:06 1109 2
    23453
    로또번호 [2] 까망사투리 24/09/19 11:10 1563 2
    23452
    AI와 함께가는 코딩 업계 [1] 펌글 우가가 24/09/02 22:19 1958 9
    23451
    Switch문 도배된 2100줄 짜리 함수 [3] 펌글 우가가 24/08/26 22:37 1847 4
    23450
    개인정보 수집 없는 이미지 리사이즈 사라밍 24/08/23 20:31 1347 0
    23449
    디자인 패턴의 템플릿 메소드 패턴 실무 적용 사례 써니썬 24/08/23 16:47 1360 1
    23448
    TMDB API Key 얻을 때 동의하게 되는 면책 및 포기 조항 우가가 24/08/18 16:07 1374 1
    23447
    펌) 아무튼 개쩌는 번역기를 국내기술로 개발완료 했다는 소식 [1] 펌글 우가가 24/08/15 17:30 1634 2
    23446
    쿠팡 가격 변동 추적 알림 서비스 피드백 요청 (제발) 창작글펌글 애오옹 24/08/10 14:30 1534 0
    23445
    넥사크로 17.1 관련 [2] 본인삭제금지 나르하나 24/08/01 12:30 1575 0
    23444
    개밯자 의자에 머리받침 없어 [1] 까망사투리 24/07/25 13:32 1905 1
    23443
    안드로이드 EditText 리스너 연동 문의드립니다. - 해결됨 [1] 창작글 상사꽃 24/07/01 17:47 1838 2
    23442
    펌) 파이어폭스 엔진이 신인 이유 [1] 펌글 우가가 24/06/30 23:25 2419 2
    23441
    예전에는 함수 하나에 대한 기능에 고민을 많이 했는데.. ssonacy 24/05/21 09:45 2213 0
    23440
    c++ 에서 DB 쿼리문처럼 사용할 방법이 있을까요? [8] 상사꽃 24/05/19 11:10 2356 0
    23439
    쉬운 배터리 알림 창작글 언젠가아자 24/05/14 10:47 2504 0
    23438
    아후 서터레스 [1] NeoGenius 24/04/02 17:52 2193 1
    23436
    로또 [3] 까망사투리 24/03/11 15:53 2840 4
    23434
    copilot 기업유료버전 intelliJ에 붙여서 쓰고있는데 지리네요 안녕월드 24/02/22 00:15 2866 0
    23433
    코딩마을 대나무숲 [6] cocoa 24/02/20 14:50 3032 5
    23432
    (질문) 프로그래머분들은 싱글PC게임 레벨제한 풀수 있죠?? [23] 본인삭제금지 할배궁디Lv2 24/02/13 13:36 3034 1
    23431
    Freemium NeoGenius 24/02/13 13:23 2491 0
    23429
    부산에서 프로그래머 구인하는데 연봉 6천에서 8천 작은건가 [3] 폴팡 24/02/04 20:50 3351 1
    23427
    chatgpt? bard? [4] 별빛러브 24/01/25 06:24 2634 0
    23426
    Next.js로 만들어봤어요~ [2] 창작글 sonnim 24/01/24 12:52 2847 3
    23425
    Spring Boot 공부하기 - 한국투자증권 오픈API 호출 옐로우황 24/01/21 17:51 2877 1
    23424
    파이썬 코딩 관련해서 질문드립니다. [5] 투투나 24/01/08 09:49 2954 0
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈