개발에 적합한 프로그래밍 언어는 무엇일까?

프로그래밍 언어별 특징을 잘 알고 있고, 그에 따라 구현할 수 있는가? ( C언어, C++, Python)

SoniaComp
6 min readJan 12, 2021

이 글은 시리즈입니다.

  1. 코딩 배우기 첫걸음: 프로그래밍 언어 개념
  2. 개발에 적합한 프로그래밍 언어는 무엇일까? C, C++, python

공부 자료

개발에 적합한 프로그래밍 언어는 무엇일까?

정답은 ‘그때 그때 다르다!’입니다. 다양한 분야에서 프로그램 개발이 이루어집니다. 과학 계산, 인공지능, 시스템 소프트웨어, 웹, 모바일 앱. 각각의 분야마다 주로 사용되는 프로그래밍 언어는 다릅니다. 그럼 어떻게 내가 하고 싶은 개발에 적합한 언어를 선택할 수 있을까요?

오늘은 프로그래밍 언어(고급언어) 중 많이 사용되는 C, C++, python에 대해 알려드리겠습니다. 각 언어의 특징을 이해하는 것은 쉽습니다. 그 언어의 등장 배경을 이해한다면 말이죠! 3분안에 개발자에게 중요한 이 세가지 언어를 정복해봅시다.

C언어

등장 배경! 뚜-둔!

UINX 운영체제는 하드웨어의 자원을 좀 더 유연하게 배치하고 사용하기 위해 만들어졌습니다. UNIX 운영체제는 처음에 하드웨어 의존성이 높은 어셈블리어로 만들어졌습니다. 따라서, 하드웨어의 구성이 달라질 때마다, 그 구성에 맞추어 포팅(원래 설계된 바와 다른 컴퓨터 환경에서 동작할 수 있도록 하는 작업)을 해야 했습니다. 그래서 하드웨어의 구성에 맞추어 자동으로 어셈블리어를 컴파일 생성하는 C언어가 만들어지게 되었습니다! → 웹툰으로 이해하기

C언어의 등장 배경으로 이해하는 C언어의 특징

C언어는 단순(Simple)하면서도, 하드웨어에 독립적인 언어를 만들기 위해 개발되었습니다. 언어에 제약(Form)을 두어 신뢰성을 강제하기 보다, 실용성에 중점을 두어 개발한 언어이죠. 따라서 강제성이 없기 때문에 에러 가능성이 높아지지만, 그만큼 프로그래머가 많은 책임을 지는 언어이기도 합니다. 예를 들어, C언어의 매개변수는 배열만 참조에 의해서 호출됩니다. 또한 포인터로 메모리 동적 할당(런타임에 메모리가 할당되는 것)이 가능합니다.

절차적 프로그래밍, 함수를 이용한 구조적 프로그래밍이 가능합니다!

C언어의 핵심 개념인 포인터

포인터는 “메모리 주소를 다루는 방법”입니다.

포인터 변수는 * 으로 표시하고, 포인터 연산자에는 주소값을 리턴하는 &와 주소값에 존재하는 값을 리턴하는 *이 있습니다. 포인터 변수에는 메모리 주소를 저장합니다.

포인터는 왜 만들어졌을까요? 포인터를 통해 가능하게 된 일들을 생각해봅시다~ 먼저, Linked List를 만들수 있게 되었습니다. 포인터를 통해, 데이터를 제한 없이 사용할 수 있게 된거죠. 또한 함수의 매개변수로, 복사가 아닌 주소값을 통해 접근을 할 수 있게 되었네요!

C++

C언어에 “객체지향”과 “일반화 프로그래밍” 개념을 추가한 언어입니다.

객체지향은 상속, 다형성, 추상화로 구성됩니다. 자주 나오는 개념이니까 꼭 알아두세요!! 저는 이 강의가 도움이 많이 됐습니다. → SW academy(삼성) C++ 강좌(2)

일반화 프로그래밍에 해당하는 C++의 기능은 ‘템플릿’입니다. 템플릿을 통해 함수 및 클래스 정의 시 범용형식을 사용할 수 있는 것을 말합니다. 정적 다형성에 기반하고 있다고 생각하셔도 좋습니다.

Python

파이썬의 철학에 대해서는 많이 들어보셨죠? 저는 파이썬의 철학이 다음 세 단어로 충분히 표현될 수 있다고 생각합니다.

  • simple!
  • explicit!
  • readability!

중급 파이썬을 공부하다보면, 파이썬이 얼마나 단순하고, 또 명료한 코드 작성을 지향하는지 알 수 있습니다. 따라서 파이썬으로 알고리즘 테스트를 준비하고 계시다면, 이 철학을 염두에 두고 코드를 작성해주세요!

파이썬의 발전 과정

파이썬은 인터프리터 언어로 C, C++보다 실행속도가 느립니다. 과거에 어셈블리어와 고급언어가 경쟁할 때는, 빠르게 기계어로 만들어 실행하는 것이 더 중요했습니다. 따라서 느린 파이썬은 주목받지 못했죠. 하지만 하드웨어의 발전으로, 파이썬은 다시 주목을 받기 시작했습니다. 최근에는 장고와 같은 웹 개발, 라즈베리파이와 같은 임베디드 시스템 개발과 같이 다양한 분야에서 사용되고, 특히 인공지능 분야에서 활발하게 사용되고 있습니다.

파이썬 언어의 특징

  1. 인터프리팅: C언어처럼 컴파일러로 컴파일한 후, 실행되지 않습니다. 인터프리터로 바로 실행한 후 결과값을 보여줍니다. 또한 한 줄씩 실행하며 결과값을 보여주는 것도 가능하죠. 마치 대화하는 것처럼요! 그래서 대화형 언어라고 불리기도 합니다.
  2. 동적 타이핑: 파이썬에 변수를 선언할 때, C언어처럼 타입을 지정해주지 않죠? 바로 인터프리터가 실행될 때, 변수에 저장되는 값에 따라, 타입을 지정해주기 때문입니다. 이를 동적 타이핑이라고 부릅니다. 이런 파이썬의 특징 때문에, 파이썬의 변수는 선언만 할 수는 없습니다. 만약, 빈 값의 변수를 선언하고 싶다면, None 타입을 사용하면 됩니다.
  3. Garbage Collector: 파이썬은 프로그래머에게 좋은 코드에 집중할 수 있게 해줍니다. 생성된 객체에 대한 메모리 관리는 Garbage Collector가 해줄거에요!
  4. 유니코드: 파이썬에서 사용되는 문자열은 다국어지원이 되는 UTF-8 유니코드 문자열입니다.
  5. 가독성: Indentation을 언어자체에서 강제하고 있기 때문에 가독성이 훌륭합니다.

이 외에도 파이썬은 풍부한 라이브러리, 다양한 프로그래밍 패러다임이 지원됩니다. 파이썬은 오픈 소스이며, 내장 스크립트 언어로 사용되기도 합니다. 최근에 성능에 영향을 미치는 부분은 C언어등으로 모듈화 했고, PyPy도 좋은 성능을 나타내고 있습니다.

보너스! Java

  • 자바는 내장 가전 제품 장치를 위한 프로그래밍을 위해 설계되었습니다.
  • 에러 가능성을 최소화한 신뢰성을 매우 중요시하는 언어입니다. 묵시적 형변환의 절반 정도를 제거했고, 배열 접근에 대한 인덱스 범위 검사를 통해 안전성을 높였습니다. 따라서 java는 컴파일할 때 많은 에러를 잡아낼 수 있고, java로 개발된 시스템은 안전성이 높습니다. Java는 C++보다 훨씬 높은 정도의 단순성과 신뢰성을 제공합니다.
  • 자바는 가상머신으로 유명하죠! 운영체제에 독립적입니다. 자바는 중간 코드 형태를 제공함으로써, 이식성이 좋은 언어로 평가되고 있습니다. 그러나 인터프리터의 해석비용이 증가되는 단점이있습니다.

--

--

SoniaComp

Data Engineer interested in Data Infrastructure Powering Fintech Innovation (https://www.linkedin.com/in/sonia-comp/)