궁금합니다.

프로그래머가 되기 위해서 C 언어가 필수 인가요? 

 

답을 드립니다.

아니요. 꼭 배워야 한다고 말씀드리는 대신에 효용을 말씀드릴께요.

C 언어는 컴퓨터가 어떻게 작동 하는지 이해하는데 큰 도움이 될 겁니다.

다른 프로그래밍 언어를 배우기 위해서도 필수적인 존재로 인정 받는 이유죠.

 

대표적인 프로그래밍 언어인 C언어와 자바의 차이점을 확인해보시는 것도 좋겠습니다. 

 

C 언어란?

1980년대에 IBM이 개인용 컴퓨터를 만들어 보급하기 전에는 우리에게 친숙한 윈도우나 맥이 없었습니다. 
컴퓨터 산업 초기에는 주로 회사에서 사용하는 컴퓨터에 유닉스(Unix)라는 운영체제를 사용한 것이죠. 

그 시절 문제가 하나 있었는데요.
유닉스에서 실행되는 프로그램은 하드웨어가 바뀌면 새로 개발해야 했습니다.

여러분의 PC에서 그래픽 카드 바꾼다고 새로 프로그램을 개발해야 한다고 생각해보세요.
굉장히 귀찮고 어려운 일이죠.

이런 불편함을 해결하고자 데니스 리치와 켄 톰슨은 B 언어(A 언어도 있어요!)를 발전 시켜 1972년 C 언어를 만들었습니다. 

프로그래밍을 배우기 위해서 반드시 C 언어를 먼저 배워야 한다고 말씀드리는 것은 아니에요. 
C 언어 학습으로 습득한 프로그래밍 언어의 기본적인 문법이 다른 하이레벨 언어를 학습할때 뿐만 아니라, 컴퓨터 작동의 기본 원리를 아는데 도움이 될 것입니다. 
그래서 프로그래밍 언어를 공부하고자 하는 많은 학생들에게 첫 관문이 되고 있다고 할 수 있습니다. 

 

C 언어의 특징

간단하게 C언어의 특징을 알아보겠습니다. 

① 시스템 프로그래밍이 가능하다.

운영체제를 개발할 목적으로 만든 언어이므로 하드웨어를 제어하는 시스템 프로그래밍이 가능합니다.

② 이식성을 갖춘 프로그램을 만들 수 있다.

표준이 정의되지 않은 문법을 사용한 프로그램은 특정 컴파일러에서만 컴파일될 가능성이 높으므로 이식성을 유지하기 힘듭니다.

하지만 C 언어는 이식성을 갖춘 언어입니다.
프로그래밍계의 에스페란토어와 같다고 할까요? 

이식성이란?
→ 기종이 다른 컴퓨터에서도 사용할 수 있는 프로그램으로, 표준을 지켜 만들면 컴퓨터의 종류가 바뀌더라도 같은 프로그램을 계속해서 활용할 수 있습니다.

③ 작고 효율적이다.

C로 짜여진 코드는 속도가 빠르고 바이너리 크기가 작습니다.
이러한 특성 때문에 속도가 생산성보다 중요한 속도를 필요로 하는 임베디드 혹은 모바일 계열, 시스템 프로그래밍 등에서 주로 사용됩니다. 다만 수정 사항을 확인하려면 컴파일이 필요하며 디버깅이 어려워 학습자가 어려워하기도 합니다. 

④ C 언어는 절차지향 프로그래밍 언어다.

절차지향 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다.

 
 

지금까지 간단하게 C언어의 몇가지 특징을 살펴봤고요. 
두번째로 자바를 설명하겠습니다. 

Java(자바)란?

자바는 객체지향 프로그래밍 언어(Object Oriented Programming)
1991년 썬 마이크로 시스템즈에서 개발했으며
현재는 오라클에서 관리하고 있는 언어입니다.

자바는 운영체제에 독립적인 언어로 전 세계 다양한 분야에서 사용하는 프로그래밍 언어입니다.
프로그래밍 언어의 순위를 보여주는 TIOBE 웹사이트의 데이터를 보면 자바는 2001년부터 지금까지 계속 1,2위를 다툴만큼 인기 있는 언어입니다.

(참조링크 – https://www.tiobe.com/tiobe-index/java/ )

개인용보다는 주로 산업계에서 많이 사용하던 자바는 안드로이드 폰의 등장으로
우리가 늘 접하는 스마트폰에서 돌아가는 다양한 앱을 개발하는 데에도 사용 되고 있습니다.

자바에는 Java API라 하여 자바 시스템 제어를 위한 명령어가 있습니다.
무료로 배포된 자바 개발 도구(JDK)와 풍부한 Java API를 활용해 강력한 기능의 자바 프로그램을 작성할 수 있습니다.

Java(자바)의 JVM이란?

자바 프로그램은 완전한 기계어가 아닌, 바이트 코드 파일(.class)로 구성됩니다.
바이트 코드 파일은 운영체제에서 바로 실행할 수 없고, 자바 가상 기계(JVM)라는 번역기가 필요합니다.

자바가 JVM을 사용하는 이유는 바이트 코드 파일이 다양한 운영체제에서 독립적으로 사용이 가능하기 때문이에요. 
 
예를 들어 개발자가 윈도우 10 운영체제에서 자바로 프로그램을 개발을 한다면,  
개발 미완료된 프로그램도 완료된 프로그램도 맥(Mac), 리눅스(Linux)로 옮겨 바로 실행 가능합니다.

그림으로 다시 말하자면 C는 리눅스(Linux), 윈도우(Windows), 맥(Mac) 등 운영체제별로 운영체제 위에서 바로 실행되지만, 자바는 운영체제 위의 JVM에서 실행됩니다.

Java(자바)의 특징

① 여러 운영체제에서 실행 가능

자바로 작성된 프로그램은 JVM 위에서 실행 되므로  운영체제를 가리지 않습니다.
따라서 윈도우에서 개발된 프로그램을 수정하지 않고 바로 리눅스, 맥에서도 실행할 수 있다는 장점이 있습니다.

② 객체지향 프로그래밍 언어

절차지향인 C와는 다르게 자바는 객체지향 프로그래밍 언어 중 하나로, 객체(부품)를 만들고, 이 객체들을 서로 연결해서 더 큰 프로그램을 완성합니다. 

③ 메모리 자동정리

자바는 메모리(RAM)를 자동 관리 하므로,
개발자는 메모리를 관리하는 수고를 덜고 핵심 기능인 코드 작성에 집중할 수 있습니다.

④ 무료 라이브러리 풍부

무료로 다운로드해서 사용할 수 있는 오픈 소스 라이브러리가 풍부하기 때문에 프로그램 개발 기간을 단축합니다. 그래픽 사용자 인터페이스의 제작(GUI 설계), 데이터베이스 접근, 다중 스레드, 네트워크 프로그래밍 등은 모두 표준 라이브러리에서 지원합니다.

 

C 언어와 Java의 차이점 정리

 
C 언어
JAVA(자바)
절차지향
vs 객체지향
순차적으로 읽어가는 절차지향 언어
설계적인 측면이 강조된 객체지향 언어
주로 사용하는 개발환경
비주얼 스튜디오(윈도우 기준) 
이클립스(eclipse),
인텔리제이(IntelliJ)
처리속도
상대적으로 빠름
상대적으로 느림
유지보수
어려움, 꼬이게 되면 순차적으로 수정
용이함,
해당 객체만 찾아 수정 가능
용도
임베디드 또는 운영체제처럼 속도나 용량 등에서 최적화가 필요한 곳에서 주로 사용
웹 사이트나 운영체제와 상관없이 실행되어야 하는 응용SW, 안드로이드 앱 등에서 사용
안정성 & 확장성
상대적으로 낮음
상대적으로 높다
메모리 제어
메모리를 직접 조절하여 메모리 낭비가 적음
각각의 클래스로 인해 메모리 낭비가 높음

절차지향과 객체지향은 반대 개념이라고 할 수 없습니다.
절차지향은 데이터 중심으로 함수를 구현하며, 객체지향은 기능 중심으로 메서드를 구현하는 차이가 있을 뿐입니다.

 

긴 글 읽어주셔서 감사합니다!

유창하게 중국어나 스페인어를 구사 하려면, 어느정도 시간을 투자해야할까요?
아마도 꽤 오랜 시간 학습해야 할 겁니다.

프로그래밍 언어도 똑 같습니다.
처음 접하는 프로그래밍 언어는 낯 설수 있어요.  
 
관심과 꾸준한 연습이 계속된다면 코딩 실력이 날로 향상 걸거라고 생각합니다.
중요한 것은 포기하지 않고 실행하는 것 아닐까요?

If they can do it, why Can’t I? 

프로그래밍 학습을 중간에 포기하신 경험이 있으시다면,

이제 처음 독학으로 프로그래밍을 시작 하신다면,    

처음부터 끝까지 진짜 혼자 공부할 수 있는 프로그래밍 입문서, 
혼자 공부하는 C, 자바, 파이썬 프로그래밍을 추천합니다!