모바일 오유 바로가기
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 : humorbest_928296
    작성자 : 달빛연구자
    추천 : 70
    조회수 : 22395
    IP : 59.18.***.45
    댓글 : 21개
    베스트 등록시간 : 2014/08/08 15:11:38
    원글작성시간 : 2014/08/07 22:46:08
    http://todayhumor.com/?humorbest_928296 모바일
    C와 JAVA에 대한 이야기
    안녕하세요.  <div>달빛연구자 입니다. <div><br></div> <div>프로그래밍 언어에는 굉장히 많은 종류가 있어요.</div></div> <div><br></div> <div><div style="text-align:left;"><img style="border-top:medium none;border-right:medium none;border-bottom:medium none;border-left:medium none;" alt="순위.jpg" src="http://thimg.todayhumor.co.kr/upfile/201408/1407406407ek6bij2HGaqrJpTVFdjWUAKdjb7kzE.jpg" width="771" height="538"></div></div> <div><br></div> <div>위의 표는 <a target="_blank" href="http://www.tiobe.com/">http://www.tiobe.com/</a> 에서 매월 발표하는 프로그래밍 언어의 사용 순위 입니다.</div> <div>올해는 오브젝티브 C의 순위가 크게 올라서 <strike>아이폰의 위력</strike> C++을 제치고 3위에 올랐네요.</div> <div><br></div> <div>2위인 자바는 불과 몇년전 까지만 해도 부동의 1위였지만, 자바와 거의 완전히 비슷한 포지션을 갖는 C#의 등장할 때 잠깐 주춤하더니 파이썬을 선두로 하는 동적 스크립트 언어들이 치고 올라오면서 점점 점유율이 떨어지는 모습을 보이고 있습니다. (근데 우리나라에서는 압도적인 1위일지도 몰라요)</div> <div><br></div> <div>마지막으로 1위인 C언어 입니다. C언어가 점유율 1위라는 사실이 의외이실 거예요.</div> <div>사실 응용프로그램을 제작할 때 C를 사용해서 제작하는 경우는 거의 없거든요. </div> <div>성능이 덜 중요한 프로젝트에는 자바가 들어가고요. 성능이 상당히 중요한 프로그램의 경우에는 C++이 들어가는 경우가 대부분입니다.</div> <div>이유는 문법적으로 객체지향을 지원하는 위의 프로그램들이 상대적으로 높은 개발 생산성을 갖는다고 알려져 있기 때문이에요. (사실이기도 하고요.)</div> <div><br></div> <div>그래서 C언어를 구시대의 유물이나 곧 사라지게 될 언어로 취급하시는 프로그래머 분들도 상당히 많은 편이에요.</div> <div><br></div> <div>그러면 왜 C언어가 1위인가... 저거 빼고 나머지를 C언어가 싹 쓸어먹어서 그래요 -_-;;</div> <div>OS가 부실하거나 없는 환경에서 동작하는 프로그램은 현재 C언어 보다 좋은 대안이 없거든요..</div> <div>문법이 단순하기 때문에 컴파일러 만들기가 상대적으로 용이해서 상용으로 나오는 대부분의 칩들은 C언어 컴파일러를 제공해요.</div> <div><br></div> <div><br></div> <div>자 이제 소개는 이쯤 하고 본론으로 들어가 볼께요.</div> <div><br></div> <div><b>1. 성능</b></div> <div><b> </b>이론적으로 C언어와 JAVA로 만들어진 <b>프로그램의 성능을 비교하면, C언어 프로그램의 성능이 압도</b>적으로 높아요.</div> <div>그럴 수 밖에 없는것이 C언어는 컴파일 과정에서 높은 수준의 최적화를 거치는데다, 만들어진 파일은 별도의 가공이 필요없이 곧바로 실행을 해요.</div> <div>하지만 자바의 경우 VM에 의한 해독과정이 한단계 더 필요하기 때문에 같은 동작을 수행하더라도 최소한 2배 이상의 연산을 소요해요.</div> <div>(사실은 그 이상의 연산을 소요합니다. )</div> <div><span style="font-size:9pt;line-height:1.5;">이러한 문제점은 자바가 처음 등장했을 때 부터 쭉 제기되어 온 문제였고, 실제 필드에서도 성능에 대한 문제점이 상당히 많이 나왔다고 해요.</span></div> <div>물론 자바의 개발자들도 이러한 문제점을 잘 알고 있었기 때문에, <strike>더 높은 성능의 머신을 사라고</strike> 가상머신의 성능을 개선하기 위해 어마어마한 노력을 기울였고, 현재는 자바도 상당히 빨라져서 대부분의 경우에는 문제없는 성능을  보여준다고 알려져 있습니다.</div> <div>JIT(Just in time) 때문에 자바프로그램이 C보다 더 빠른 성능을 나타낸다는 주장과 벤치마킹도 자주 보게되는데요.(이론적으로는 빠를 수도 있어요...;;;)</div> <div>JIT에 의해 컴파일 언어보다 높은 성능을 낼 수 있는 조건이 상당히 제한적이기 때문에, 잘 인정을 받지 못하는 듯 하네요..(예외일 뿐이죠..)</div> <div><br></div> <div><b>2. 이식성</b></div> <div><b>이식성은 어떤 한 플랫폼에서 작성된 프로그램이 다른 플랫폼에서 잘 동작을 할 수 있는지를 의미</b> 하는데요.</div> <div>C와 JAVA에서 말하는 이식성은 그 의미가 조금 다릅니다.</div> <div>C에서의 이식성은 <b>크로스 컴파일을 하면, 다른 플랫폼에서 동작할 수 있다는 의미</b>이고요.</div> <div>JAVA에서의 이식성은 <b>한번 컴파일을 해 놓으면 VM이 돌아가고 있는 어떤 플랫폼에서도 동작이 가능하다는 의미</b>에요.</div> <div>C언어로 짜여져 소스가 공개되어 있는 리눅스 커널의 경우 현존하는 대부분의 칩이 포팅되어 있고요. 수 많은 종류의 플랫폼에서 현재도 문제없이 돌아가고 있습니다. 또한 문<b>법이 단순하여 컴파일러의 제작이 매우 쉽기 때문에 C언어 컴파일러를 제공하지 않는 칩이 거의 없을 정도</b>에요.</div> <div>이것은 로우레벨 개발자의 입장에서 매우 대단한 의미를 갖습니다.</div> <div><br></div> <div>JAVA로 짜여진 안드로이드 앱은 우리가 안드로이드 마켓에서 컴파일된 프로그램을 다운받으면 곧바로 동작이 가능합니다.</div> <div>마켓에서 다운받은 앱이 실행되는게 이식성과 무슨 관련이 있냐면요.. </div> <div>원래는<span style="font-size:9pt;line-height:1.5;"> <b>컴파일된 프로그램을 다운받으면 곧바로 동작이</b></span><span style="font-size:9pt;line-height:1.5;"><b> 불가능</b>하거든요. PC는 cpu가 모조리 x86으로 통일되어 있기 때문에 문제가 없지만, 다양한 종류의 cpu가 들어가는 모바일에서는 각각의 cpu에 맞게 컴파일된 프로그램만 동작이 가능해요. </span></div> <div><span style="font-size:9pt;line-height:1.5;"><b>프로그램은 기계어로 만들어져 있는데 각 cpu마다 쓰는 기계어가 각각 다르거든요.</b>ㅋ</span></div> <div>안드로이드가 자바 가상머신인 달빅을 가지고 있기 때문에, 다양한 종류의 스마트 폰에서 동작하는 앱을 만들어 배포할 수 있는것이죠.</div> <div>이것은 하이레벨 개발자의 입장에서 매우 대단한 의미를 갖습니다.</div> <div><br></div> <div><b>3. 생산성</b></div> <div> <b>생산성은 같은 기능을 하는 프로그램을 작성하는데에 개발자가 얼마나 적은 노력을 들일 수 있는가</b> 를 의미해요.</div> <div> <b>응용프로그램의 개발을 할 때의 생산성은 JAVA가 C를 압도</b>합니다. 비교조차 되지 않을 정도에요.(응용프로그램에는 앱/웹을 포함합니다.)</div> <div> 다만 C에 매우 숙련된 전문가들이 팀을 이루어 작업을 하는 경우에는 상당히 높은 생산성이 나오는 경우가 있습니다. (이것도 예외적인 경우에요)</div> <div><br></div> <div><b>4. 학습 용이성</b></div> <div>일반적으로 (주로 학생들에게..) JAVA는 배우기 쉽고 C는 배우기 어렵다는 이야기가 정설처럼 받아들여지고 있는데요.</div> <div>이 부분은 조금 생각을 해 볼 필요가 있습니다.</div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;">일단 </span><b style="font-size:9pt;line-height:1.5;">기본</b><span style="font-size:9pt;line-height:1.5;"> </span><b style="font-size:9pt;line-height:1.5;">문법 자체는 C언어가 더 간단</b><span style="font-size:9pt;line-height:1.5;">해요. 변수, 배열, 함수, 반복, 조건, 구조체 까지 배우면 마스터거든요;;;</span></div> <div>자바는 C언어에 있는 문법 + 객체지향 문법(?)이 추가 됩니다. (상속, 포함, 추상클레스, 가상함수, 권한, 생성/소멸자 등등..)</div> <div><br></div> <div>일반적으로 C에 입문한 사람들은 대부분 포인터에서 포기를 합니다. 사실 C가 어렵다는 이야기는 포인터가 어렵다는 이야기랑 같아요.</div> <div>책을 보면 금방 드러나지만, 사실 포인터 자체는 그리 복잡한 문법이 아니에요. </div> <div>그냥 그것을 응용하기 위해 <b>컴퓨터 구조와 운영체제 (특히 메모리)에 대한 전반적인 이해가 필요할 뿐</b>이죠. </div> <div>그냥 인간과는 다른 방식의 사고방식에 익숙해지기가 어려울 뿐 입니다.</div> <div>대신에 문법적으로 설계 방식에 제한을 두지 않기 때문에 신경써서 코드를 짜지 않으면 소스가 엉키기가 쉽습니다.</div> <div>그래서 C에 익숙한 개발자들은 <b>스스로 객체지향적인 규칙을 준수하여 개발</b>을 하는 경우가 많아요. (그리고 이것을 체득하는데에도 오랜 시간이 걸립니다.) </div> <div><br></div> <div>반면에 JAVA의 경우는 저런 하드웨어에 가까운 부분은 덜 신경 써도 되요. 그래서 소스코드도 비교적 인간의 사고방식에 가까운 형태를 갖습니다.</div> <div>그래서 처음 입문하는 사람들이 배우기가 무척 쉬워요. 그런데 뒤로 갈 수록 점점.. 어려워 집니다. -_-;;</div> <div>이유는 바로 <b>JAVA가 객체지향 언어이기 때문</b>이에요. - 객체지향이니까 더 배우기 쉬운거 아니냐고요?  천만에 말씀입니다.</div> <div><br></div> <div>본래 <b>객체지향은 배우기 어렵고 사용하기 까다로운 고급 설계방식</b> 이에요. 왜 그렇냐면 객체지향은 그 이론자체가 상당히 방대하고 이해하기 까다로운 개념들을 상당히 많이 포함하고 있는데다  초기에 노력을 더 투자해서 클래스들을 라이브러리화 해 놓고 라이브러리화 된 클레스들로부터 시너지 효과를 받아 나가는 <span style="font-size:9pt;line-height:1.5;">대기만성형의 설계방식이기 때문이에요. 즉 객체지향 설계방식이 생산성의 이득을 보기 위해서는 본래 </span><span style="font-size:9pt;line-height:1.5;">라이브러리화 된 클래스들을 쌓아나가는 과정이 필요하고, 이 부분이 객체지향에서 가장 어렵고 중요한 부분이라고 할 수 있어요. 이 부분을 망치면 생산성 전체를 망치기 때문이죠.</span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;">이런 이유로 </span><span style="font-size:9pt;line-height:1.5;">대부분의</span><span style="font-size:9pt;line-height:1.5;"> 객체지향 언어에서는 매우 풍부한 클래스 라이브러리와 클레스 설계 도구들을 제공해요. (C++만 빼고요 -_-) </span><span style="font-size:9pt;line-height:1.5;">객체지향 방식에 대한 개발자들의 진입장벽을 낮추고 잘못된 설계로 인한 생산성 하락을 막기 위해서요. </span></div> <div>어지간한 <b>기능들은 이미 클래스로 캡슐화된 라이브러리로 제공</b>되기 때문에, 자바에 처음 입문하는 사람들은 마치 제공되는 기능만 잘 찾아써도 원하는 프로그램을 작성할 수 있는 것이고 <b>그래서 JAVA를 더 쉬운 언어로 느끼는 것</b>이죠.</div> <div>그러나 프로그램의 규모가 커지면, 다시 생산성이 설계에 영향을 받기 시작을 합니다. JAVA를 사용했음에도 불구하고 생산성이 뒤로 갈 수록 떨어지는 경우가 있다면 이러한 설계가 잘못된 것으로 볼 수 있어요.</div> <div>거기에다 JAVA는 GC와 VM의 구조와 동작도 숙지해야 합니다. 여기에 엉켜서 프로그램이 이상동작을 일으키는 경우가 생각보다 적지 않으니까요.</div> <div><br></div> <div>결국 두 언어 모두 배워야 할 스코프가 조금 다를 뿐 깊숙히 들어가면, 매우 방대한 양의 지식과 오랜 시간의 연습과 경험을 필요로 합니다.</div> <div>부딧치는 장벽이 학습 초반에 존재하느냐 후반에 존재하느냐 정도의 차이일 뿐 이에요...<span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><br></div> <div><b>한줄 요약 : 그러니까 언어 가지고 싸우지 좀 맙시다. -_-</b></div>

    이 게시물을 추천한 분들의 목록입니다.
    [1] 2014/08/07 22:57:14  175.120.***.226  슝슝3  284767
    [2] 2014/08/07 22:59:32  180.52.***.101  누군지알아?  183168
    [3] 2014/08/08 00:48:37  112.171.***.231  할말이있어  298582
    [4] 2014/08/08 01:22:41  121.143.***.81  황금비  483546
    [5] 2014/08/08 01:40:53  121.157.***.239  오이자왕  467074
    [6] 2014/08/08 03:31:27  124.197.***.248  글냥이  54510
    [7] 2014/08/08 10:26:40  211.179.***.253  STOC  277255
    [8] 2014/08/08 13:30:38  112.166.***.240  청새치.  168661
    [9] 2014/08/08 14:32:52  119.192.***.155  안녕안녕안냥  482259
    [10] 2014/08/08 15:11:38  69.181.***.250  오늩의유머  261411
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

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


    현재 게시판의 베스트게시물입니다.  
    번호 제 목 이름 날짜 조회 추천
    963410
    안녕하세요. 혼자 개발한 게임 출시했어요. [21] 최밖사 14/10/21 13:35 8564 68
    961842
    오늘 후배랑 대화 중 웃픈 이야기.... [12] ckdgus 14/10/18 08:49 7553 50
    960072
    자동가입방지기능. 아이디어 쩌는거였네요 이거 [87] 나데시코♥ 14/10/14 14:08 8830 110
    959523
    이거 혹시 썸인가요? [8] 내눈음란마귀 14/10/13 06:58 8441 39
    957361
    무슨 반대테러라도 있는 줄 알았는 데 [8] 미토콘도리아 14/10/08 21:12 3428 24
    956585
    과제 질문하러 오신분 한번쯤 읽어보셔요 [21] 하날엔 14/10/06 23:52 4444 65
    953430
    오유 프로그래머가 가장 힘들어 하는것 [15] 본인삭제금지 붉은메 14/09/30 10:31 7640 54
    952722
    프로그래머가 가장힘들어하는일 [23] GlaDOS 14/09/28 20:04 9110 67
    951805
    [스압주의]고냥이와 함께하는 HTTP 상태코드 [10] 콜라와멘토스 14/09/26 17:40 6578 54
    951790
    개발자 커플.... [65] 퐁숑퐁숑~ 14/09/26 17:04 8435 106
    950860
    개발자가 보면 암 걸리는 동영상의 해결법 [22] 뿌뽀롱 14/09/24 18:27 6496 34
    949921
    이클립스를 예쁘게 만들어 봅시다! [10] jeeeyul 14/09/22 16:25 7917 37
    948038
    질문할 때 규칙을 정합시다. [10] 오늩의유머 14/09/18 16:29 2744 55
    944144
    프로그래밍 유머 [51] 하날엔 14/09/10 00:30 10090 58
    943724
    키보드 앱 [큐키] 마케팅 담당자(?)의 담백한 읍소...입니다. 영일만호랑이 14/09/09 00:24 4083 43
    940670
    여러분들 아래 제가쓴 글의 심각성을 잘 모르는것 같아서 첨언합니다. [21] 나이쓰한넘 14/09/01 18:42 5336 65
    936655
    한국 소프트웨어 시장의 문제점 [개발자들이여 이민만이 해결책이다.] [22] 나이쓰한넘 14/08/24 02:40 13946 90
    935888
    C# 의 다양한 코드 스타일 정리 [25] 콜드이슈 14/08/22 16:44 6044 54
    934822
    개발자 완전 열받는 짤 [75] 청춘 14/08/20 18:32 9790 122
    934369
    취업을 위해 취업사이트 이용하시는 분께 참고하시라고 드리는 말입니다.. [14] 솔로부대상사 14/08/19 21:44 7845 86
    930764
    유용한 사이트 모음 [73] asdppp 14/08/13 14:17 7940 126
    929773
    n씨! 당신에게 보냅니다. ^^ [15] 본인삭제금지 RedwinD 14/08/11 16:36 5100 41
    929767
    처음으로 배운 언어로 게임만들었어요!ㅋㅋㅋ [16] 본인삭제금지 달울림 14/08/11 16:16 5939 32
    C와 JAVA에 대한 이야기 [21] 달빛연구자 14/08/08 15:11 22395 70
    927909
    개발자는 공부따윈 안한다네~ [144] 앵두 14/08/07 21:22 9238 105
    923705
    우리 희망적인 글도 좀 써봐요. ㅎㅎ [39] 본인삭제금지 sinnic 14/07/30 11:19 3664 23
    923231
    "소프트웨어 과목이라니.." 학부모·교사들 반발 [80] 라군Fish 14/07/29 13:28 10306 59
    [◀이전10개] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈