포스트

프로그래밍 언어들

프로그래밍 언어들

🌑 프로그래밍 언어

일부 언어에만 해당되는 특수 케이스는 제외하고, 대부분 언어에서 통용되는 일반적인 내용만 정리했다. 예를 들어 Fortran과 Ada는, 배열의 원소 참조를 위해 소괄호 ()를 사용하지만, 대부분 언어에서 대괄호 []를 사용하고 있기 때문에, 배열 원소 참조에 대한 설명에 원소 참조를 위해 대괄호 []를 사용 이라고 표현했다. 때문에 특정 언어에는 맞지 않는, 예외인 내용이 있을 수 있다. 또한, 비주류 언어에 대한 내용은, 꼭 필요한 것이 아니라면 생략했다. (필자의 주관으로)



💫 C


  • 절차지향 언어(Procedural Language)
  • 저수준 언어(Low-level Language)

  • 1969~1973년 사이에 데니스 리치(Dennis Ritchie)가 벨 연구소(Bell Labs)에서 개발
  • 수많은 운영 체제, 저수준 하드웨어, 임베디드 시스템, 게임 등에서 사용되는 언어다.
  • 시스템 프로그래밍 언어로 분류하는 경우가 많다.

  • 주요 프로그래밍 언어 다수가 C에 뿌리를 두고 있다.

💫 C++


  • 객체지향 언어
  • 언매니지드 언어(Unmanaged Language)
  • 고수준 언어(High-level Language)

  • 게임 개발에 많이 쓰인다.
  • 업데이트도 꾸준히 이루어지고 있고 현재는 ‘Modern C++’라고도 불린다.

  • C + OOP
    • 벨 연구소의 비야네 스트롭스트룹(Bjarne Stroustrup)이 C에서 Simula의 객체 지향성, 클래스, 가상 함수 등과 같은 유용한 기능을 활용하려고 C를 확장한 데서 비롯되었다.
  • 종종 C와 경계가 모호해진다
    • 많은 C++ 개발자가 C++의 객체지향 개념을 이해하지 못해서 C++ 기능으로 C에서 쓸 법한 코드를 작성하기 때문이다.
    • C++로 작성한 레거시 시스템에서 작업하다보면 그런 코드를 쉽게 만날 수 있다.
  • 엄밀히 말해 C++는 C의 상위 집합이다.
    • C 프로그램을 그대로 사용할 수 있다.
    • C 프로그램은 C++ 컴파일러로 컴파일한다(일부 예외는 있다).

💫 C#


C#을 쓰자.

  • 객체지향 언어
  • 매니지드 언어(Managed Language)
  • 고수준 언어(High-level Language)

  • 마이크로소프트가 NET Runtime 환경을 대표하는 언어로 만들었다.
    • 만든 이는 델파이(Delphi), 터보 파스칼(Turbo Pascal)을 만드는 데 크게 이바지했던 아네르스 하일스베르(Anders Hejsberg)다.
  • 초기 C#은 Java와 아주 많이 유사했지만, 최신 C#은 Java와 꽤 멀어졌다.

💫 Java | 자바


  • 모든 컴퓨팅 플랫폼에서 구동되는 가상 머신에서 실행할 수 있다 (JVM) -> 여러 플랫폼에서 쉽게 사용할 수 있다.

  • 객체지향 언어
  • 매니지드 언어(Managed Language)
  • 고수준 언어(High-level Language)

  • 1995년 선 마이크로시스템스(Sun Microsystems)의 제임스 고슬링(James cosling)이 한 번 작성한 코드를 여러 플랫폼에서 실행할 수 있게 만든 언어다.
  • 현재 Java는 오라클의 소유이며 여전히 성장하고 있다.
  • 최근에는 위원회의 관리를 받고 있는데 여기에 소속된 위원들은 Java의 발전 속도를 늦추고 싶어 한다. (?)

💫 언어 스펙 비교


🫧 OOP (Like C++, C#, Java)

  • 연산자 중복Operator Overloading : 대상에 따라서 동일한 연산자로 새로운 연산을 정의할 수 있다
  • 참조 타입Reference Type : 변수의 별명을 만들어서 변수와 같이 사용할 수 있다.
  • 함수 중복Function Overloading : 매개변수만 다르면 동일한 이름의 함수를 여러 개 만들 수 있다
  • 제네릭Generics : 클래스 정의를 자료형에 상관없이 재사용하는 기술
  • new 와 delete 연산자 : 동적 메모리 할당과 해제를 담당하는 연산자

🫧 C++ vs C#, Java

  • 가상 기계의 코드 생성
    • C#, Java : 가상 기계의 코드를 생성 -> 다른 종류의 컴퓨터에서는 바로 실행되는, 이식성이 좋음
    • C++ : 기계어 코드를 생성하기 때문에 그것은 불가능하지만, 빠른 속도로 실행이 가능
  • 포인터, 가비지 컬렉션 Garbage Collection
    • C#, Java : 포인터 X, 가비지 컬렉션로 메모리 관리
    • C++ : 포인터 O, 메모리 관리를 직접 해야함
  • 다중 상속
    • C#, Java : 다중 상속 X
    • C++ : 다중 상속 O
  • Class가
    • C#, Java : Reference Type
    • C++ : Value Type

💫 Python


  • 간결하다.
  • 구글에서 사용하는 주요 프로그래밍 언어 중 하나

  • 인터프리터 언어(Interpreted language)다.
  • 객체지향적, 절차지향적, 함수형으로 쓸 수 있다.

  • 1989년 반 로섬(Van Rossum)이 만들었다.
    • 파이썬 커뮤니티에서는 “자애로운 종신 독재자”라고 부르는

💫 JavaScript, JS | Java스크립트


JS는 단순한 웹용 스크립트 언어였다. 하지만 이제는 웹을 넘어서 광범위하게 쓰이는 기본 언어가 되었다.

JS는 C++, C#, Java와 비슷해 보이지만 매우 다르게 작동한다.
JS의 최신 버전 - ECMAScript는 기존 단점을 많이 수정한 덕에 대규모 개발에 더욱 적합한 형태가 되었다.

1995년 브랜던 아이크(Brendan Eich)가 단 10일 만에 개발한 언어다
아주 짧은 기간에 개발된 탓에 이 언어에는 문제가 많다.

  • 웹 개발 언어로 그렇게 큰 인기를 누리는 이유 -> 편의성과 보편성.
    • 웹 초창기부터 JS는 거의 모든 브라우저에 포함되어 있었다.
      • 당시에는 주로 팝업이나 대화 상자를 보여주는 등의 간단한 작업만 했다.
      • (오늘날 사용되는 방식과는 전혀 다르다.)
    • 웹 페이지로 전달할 수 있고 브라우저 안에서 실행되기 때문에 웹에서 쓰기 편했다.
      • JS는 브라우저 안에서 실행될 뿐 아니라, 인터프리터 언어라 컴파일 과정을 거치지 않고 명령 한 번만으로 작동된다.
    • 어디에서나 찾을 수 있는 보편성
      • 플래시 같은 다른 기술이나 다른 스크립트 언어도 만들어졌다. 그런 언어가 더 뛰어나다고 평가하는 이들도 있었다.
      • 하지만 결국 JS만 남았다. (그럼 살아남는 내가 승자네-)

💫 TypeScript, TS | 타입스크립트


TODO:

💫 Else


  • Rust러스트
  • Lisp리스프
  • Cobol코볼
  • Scala스칼라
  • Smalltalk스몰토크
  • Ruby루비
    • 객체지향적인 스크립트 언어를 만들겠다는 아이디어에서 탄생한 언어
    • 데이비드 하이네마이어 한슨(David Heinemeier Hansson, DHH)이 2003년에 만든 루비 온 레일스(Ruby on Rails, RoR)는 Ruby가 성공을 거두는 데 큰 기폭제 역할을 했다.
    • 쉽고 재미있게
      • 초심자가 배우기에 아주 좋은 언어이므로 초보용 프로그래밍 언어로 루비를 가르치는 코딩 부트 캠프를 쉽게 만날 수 있을 것이다.
      • 유키히로 ‘마츠’ 마츠모토(Yukihiro ‘Matz’ Matsumoto)가 1993년경 일본에서 만들었다.
        • 쉽고 재미있게 쓸 수 있도록 만들겠다는 건 마츠의 핵심 설계 목표이기도 했다.
  • Perl
    • 유닉스(Unix) 스크립트용으로 많이 쓰인다.
      • 1987년 래리 월(Larry wall)이 유닉스용으로 만든 스크립트 언어다
    • 유연성과 문자열 구문 분석을 할 수 있는 능력 덕분에 웹 초창기에 널리 인기를 끌었다.
      • 특히 CGI 스크립트를 작성하기 좋았다
    • 가독성이 떨어지지만, 엄청 유연하고 강력하다.
      • ‘스크립트 언어계의 스위스 아미 전기톱’이라고 할 정도?
  • PHP
    • JS와 함께 오늘날 웹의 많은 부분을 구성하는 언어다.
    • 큰 인기를 누리는 웹 사이트 중에는 처음에 PHP로 시작한 곳이 엄청 많다. 꾸준히 쓰는 곳도 꽤 있다.
      • 페이스북도 처음에는 PHP로 작성되었다.
      • 블로그 소프트웨어 워드프레스(WordPress)도 여전히 PHP로 만든다.
    • PHP는 원래 1994년 라스무스 러도프(Rasmus Lerdorf)가 만들었고 2014년까지 명문화된 명세 하나 없이 진화했다.
      • 애초에 PHP는 프로그래밍 언어가 될 운명은 아니었다. 처음에는 간단한 웹페이지를 동적으로 만들 수 있는 도구 모음에 불과했다.
      • 그러나 세상의 빛을 본 후에 처음 의도와는 다르게 흘러갔다.
    • 온갖 단점이 있는 건 사실이지만, 배우기 쉽고 사용하기 쉽다.
  • Objective-C오브젝티브-C
    • 1980년대 초 브래드 콕스(Brad Cox), 톰 러브(Tom Love)가 만들었다.
      • C에 스몰토크(Smalltalk)의 객체지향 기능을 더하겠다는 생각이 시발점이었다.
    • 잊혀져서 거의 없어질 뻔한 것을, 애플이 Mac OS X 운영 체제에 쓰기로 했다.
      • 그 후에도 애플이 아이폰과 iOS를 소개하면서 수백만 명의 새로운 개발자가 이 언어의 낯선 문법과 씨름하게 되었다.
    • 배우기 어렵다. 아주 간단한 것을 하는 데도 꽤 장황한 코드를 써야 한다. 오브젝티브-C보다 약간 더 친절한 스위프트를 쓸 수 있다.
    • 현재 오브젝티브-C 로 입문하라고 추천하기는 어렵다. 애플에서 스위프트 프로그래밍 언어에 상당히 투자하고 있어서 많은 iOS 개발자가 스위프트로 전향하고 있기 때문이다 그렇다고 오브젝티브-C로 프로그래밍을 해온 사람이 걱정해야 한다는 이야기는 아니다. 아직 오브젝티브-C 개발자를 구하는 회사와 유지 보수해야 하는 레거시 오브젝티브-C 어플리케이션이 많기 때문이다. 다만 장래를 고려할 때 입문자에게는 최선의 선택이 아닐 수 있다.
  • Swift스위프트
    • 애플이 선택한 새로운 iOS용 대표 언어
    • iOS, OS 개발에 쓰이는 애플의 코코아(Cocoa), 코코아 터치(Cocoa Touch) 프레임워크용으로 만들어졌다.
    • 기존 오브젝티브-C 코드와도 쉽게 통합될 수 있도록 설계되었다.
      • 스위프트는 오브젝티브-C를 동적이고 유연하게 하는 인기 있는 기능 대부분을 지원하는 동시에 훨씬 더 단순하고 간결하다.
  • Go
    • 구글이 만든 언어
      • 2007년 로버트 그리스머(Robert Griesermer), 롭 파이크(Rob Pike), 켄 톰 프슨(Ken Thompson)
    • 간결하고 강력
      • C와 비슷하지만 몇 가지 훌륭한 추가 기능이 있고 훨씬 단순
      • C와 달리 가비지 컬렉션(Garbage Collection)기능이 있어서 메모리를 관리하지 않아도 된다.
      • 동시성 프로그래밍(Concurrent Programming) 기능도 있어서 성능이 크게 좋아졌다. 동시성이 Go의 주요 특성.
      • C처럼 원래 시스템 프로그래밍 언어로 만들어진 언어이지만 나중에는 웹을 비롯한 다른 영역까지 퍼져나갔다.
  • Turbo Pascal터보 파스칼
  • Delphi델파이
  • Simula시뮬라 : 시뮬레이션 특화. 최초의 객체지향 언어로 보기도.
  • Elang얼랭
    • 동시 및 분산 처리를 위해 설계된 언어
    • 코드 핫 스와핑(Hot Swaping)을 지원하므로 애플리케이션을 멈추지 않고 코드를 변경할 수 있다.
      • 원래는 전화 통신 애플리케이션 개발을 돕기 위해 만들었기 때문. 전화 통신 애플리케이션이 중단되는 걸 반길 사람은 없을 테니 말이다.
    • 에릭슨(Ericson)의 조 암스트롱(Joe Armstrong), 로버트 버딩(Robert virding),마이크 윌리엄스(Mike Williams)가 1986년에 만들었고 1998년에 오픈소스로 공개했다.
  • Haskell하스켈
    • 순수 함수형 언어
      • 매우 학구적인 성격이 강한 언어
      • 함수형 언어 설계 연구에 쓸 수 있도록, 1987년 당시 존재하던 여러 함수형 언어를 하나로 통합하여 공개 표준으로 삼기 위해 설계
    • 1990년 위원회에서 하스켈 1.0
    • 순수 함수형 언어이자 강력한 정적 체계를 갖추고 있어서 배우기도, 사용하기도 어렵다.
    • 하지만 매우 강력하다. 그리고 부작용 없이 예측 가능한 코드를 만들 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.