SturdyCobble's Study Note

[프로그래밍] 1.2. 언어별 특징 비교하기 본문

휴지통/['19.06-'20.07]프로그래밍101

[프로그래밍] 1.2. 언어별 특징 비교하기

StudyingCobble 2019. 6. 30. 23:19

NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.

더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.


※이 글은 프로그래밍 언어에 대한 기초적인 이해를 가정하고 있습니다. 최소 프로그래밍 언어 하나 정도를 약간이라도 접해보시는 것을 추천하며, 컴파일러 사용법 등은 글에서 생략했습니다. 또한, 이 글은 프로그래밍 언어의 간단한 응용에 대해서만 언급합니다.

 

 

 프로그래밍 언어를 분류하는 기준은 다양하지만, 첫째로 절차적 프로그래밍 언어(Procedural Programming)와 객체 지향적 프로그래밍 언어(Object-Oriented Programming)으로 나누어 볼 수 있습니다. 물론, 절차적 프로그래밍 언어에서도 객체 지향적 프로그래밍을 가능하게 할 수는 있지만, 언어 차원에서 이러한 형태의 프로그래밍을 용이하게 지원하지 않는다는 점에서 차이가 있습니다.

 이 기준에 의하면 C언어를 제외한, Java, C++, Python의 경우, 객체 지향적 프로그래밍 언어로 분류됩니다. 다만 C++의 경우 그 중간정도에 해당하는 모습을 보여주기도 합니다.

 

 

 이때, 객체 지향적이라는 말의 의미는 여러 개의 독립된 객체(Object)들의 집합으로서 프로그램을 바라보는 프로그래밍 형태를 지향한다는 의미입니다. 이때 객체는 데이터와 명령들을 포함하는 하나의 집합으로서 사용되며, 이 객체는 클래스(Class)의 인스턴스(Instance)로서 존재합니다. 다시 말하자면, 객체는 클래스라는 설계도을 가지고 만들어 낸, 실제로 프로그램 상에 구현된 것으로서 바라볼 수 있습니다.

 

반대로 절차적 프로그래밍 언어는 함수들의 호출에 의해서 연결되는 형태로 나타납니다.

 

또한, 인터프리터(Interpreter) 방식인지 컴파일러(Compiler) 방식인지에 따라 나누면 Python만 인터프리터 방식입니다. 이 방식은 코드를 한번에 컴파일하는 컴파일러 방식과는 다르게 한줄 한줄 해석하는 방식으로서, 대화형(한 줄 쓰고 결과를 보고 이어나가는 식으로) 프로그래밍이 가능한 특징이 있습니다.

대화형 프로그래밍의 예시

 

 

 다시 Hello World 프로그램을 봐봅시다. 여기서 C언어와 Java의 가장 큰 차이점은, class라는 글자의 유무일 것입니다. C언어는 main함수를 기준으로 프로그램이 작성되었지만, Java의 경우 class가 있고, 그 안에 메소드가 포함된 형태로 나타납니다. (메소드는 함수와 비슷한 개념입니다.)

 

C언어와 Java

 

 

 두번째로는 중괄호의 사용과 같은 기본 문법에 의한 구분입니다. 이 경우 Python만이 독특한 형태의 문법을 가집니다. C++과 Python의 사례를 비교해봅시다. 이 경우 C++을 비롯한 언어들의 경우 세미콜론(;)이 일반적으로 마지막 부분에 오며, 중괄호{}로 하나의 블럭이 묶여있는 것을 보게 됩니다. 하지만, Python에서는 그 구분이 들여쓰기(띄어쓰기 4칸)입니다. 그리고 세미콜론으로 끝나지도 않습니다.(C++의 경우 한 블럭이 들여쓰기로 묶인 것처럼 보이지만 가독성을 위한 장치로 필수 사항은 아닙니다.)

C++과 Python으로 작성한, 입력을 받아 입력이 N이 아니면 Hello World를 출력하는 예제

그 외에도 수많은 차이가 존재하지만, 각 언어로 작성한 Hello World 코드를 분석해보며 마무리 하겠습니다.

 첫번째로 C언어 입니다.

 #include 으로 시작되는 부분은 전처리문으로서, 컴파일 이전에 stdio.h라는 파일을 미리 포함해두라는 것을 의미합니다. 이 파일에는 printf와 같은 기본적인 입출력 함수들이 정의되어 있습니다. 이 부분에는 세미콜론이 없는 것을 볼 수 있습니다.

 그 다음 main함수입니다. int는 정수를 함수의 결과로 반환한다는 의미로, 함수의 마지막에 return 0;로 0을 반환하였습니다. main함수는 프로그램 자체이며, 0을 반환하는 것은 정상 종료를 나타냅니다. printf함수는 "Hello World"라는 문자열을 출력하기 위해 사용되었고, 일반적인 문장의 마지막에 세미콜론이 있는 것을 확인할 수 있습니다.

 

 두번째로 C++입니다.

 #include는 역시 파일을 미리 포함하는 전처리문으로 C언어와 다르게 .h의 생략이 가능합니다. 이떄 .h 파일은 헤더 파일로 프로그램에 필요한 기본적인 함수를 정의하는 파일이라 보면 편합니다. using namespace std;라고 된 부분은 namespace인 std를 사용하겠다는 의미로, 이 곳에 기본적인 함수들이 정의되어 있기에 사용해야 합니다. 똑같이 main함수가 나오고, return 0;가 있지만 출력 부분에서 차이를 느낄 수 있습니다.

 cout이라고 된 부분은, 함수가 아니라 객체로서 <<라는 삽입 연산자를 통해 그 값을 전달해주는 모습을 볼 수 있습니다. <<으로 계속 데이터를 순차적으로 전달할 수 있으며, endl을 통해 개행(줄넘김)을 해주었습니다.

 물론 C++은 C의 거의 대부분을 포함하기에 C style의 코드로도 오류 없이 이용할 수 있습니다.

 

 셋째로 Python은 기본적인 함수들을 별도의 including 과정없이 이용할 수 있고, 출력함수가 print이라는 특징을 발견할 수 있습니다.

 넷째로 Java의 경우 이야기할 내용이 조금 많습니다.

 일단 class라는 단어가 첫번째 줄을 차지하고 있습니다. 이는 클래스를 나타냅니다. 클래스는 데이터와 명령을 포함하는 객체의 설계도임을 앞에서 간단하게 언급한 적이 있습니다. 그 클래스가 이 클래스입니다. 여기서 기본적으로 프로그램 실행시 실행되는 클래스는 파일명과 동일해야 합니다. 

 

 또한 public이란 키워드를 발견하게 되는데, 이는 다른 파일에서 이 파일을 포함하거나 하는 경우 이 클래스를 사용할 수 있게하는 접근제어자의 역할을 합니다. 그 안에 함수처럼 포이는 것이 포함되어 있는데, 클래스 내에 포함된 함수를 우리는 메소드(Method)라고 부릅니다.

 

 이 main메소드에는 여러가지 내용이 담겨있는데, 간단하게 static만 언급하자면, 인스턴스 생성 없이 메소드를 사용할 수 있도록 한다는 의미입니다. void는 값을 반환하지 않는 경우 사용합니다.

 System...으로 시작하는 부분은 printf와 비슷한 표준출력함수입니다. println에서 IN이 아니라 LN임을 주의하세요!

 

 

다음 글부터 변수와 같은 기본개념이 각 언어에서 어떻게 적용되는지 알아보겠습니다. 

 

 

 여러 언어를 한번에 다루는 것이 사실 모험이기에 약간 혼잡할 수 있지만, 양해 부탁드립니다! 오류 지적은 언제나 환영합니다!

Comments