|
프로그래밍언어
Programing Language
1. 개념 및 정의
컴퓨터과학(-科學, computer science) 분야에 있어
프로그래밍언어(-言語, programing language)의 등장은
다양한 언어를 개발하기 위한 노력으로써 대단히 중요한 의미를 갖는다.
프로그래밍언어는 기계어(machine language)만을
이해하는 컴퓨터와 자연어(natural language)를 구사하는
인간 사이의 의사소통 수단으로 작용하기 때문이다.
또한, 프로그래밍언어는 프로그래밍의 방법에 큰 영향을 주며,
컴퓨터에 대한 이해와 활용에 매우 큰 영향을 끼쳐 왔으며,
컴퓨터 하드웨어의 발전과 더불어 계속하여 발전하여 왔다.
컴퓨터가 탄생한 이래 언어의 설계와 사용법에 대한 경험이 축적되어 오고 있지만,
언어 설계와 구현(implementation)과 사용면에 있어 더욱 연구되어야 할 부분들이 많다.
프로그래밍언어의 개발에 대한 개념과 연구는
컴퓨터공학(-工學, computer engineering)의 기본이 되며,
컴퓨터 프로그래머는 물론 컴퓨터공학을 전공으로 하는 학생들에게는 반드시 필요하다.
프로그래밍언어에서는 모든 언어의 전반에 깔려 있는 특성과 기본적인 설계 사상,
구현 방법들을 살피게 되며, 이를 바탕으로 하여 기존 언어들의 설계개념과 구현방법들을 연구한다.
이러한 지식들은 컴퓨터와의 의사소통 방법은 물론 컴퓨터를 좀 더 잘 이해하는 데 도움을 줄 수 있으며,
새로운 언어를 설계하고 구현하는 데에도 커다란 도움을 줄 수 있다.
따라서 컴퓨터를 이용하여 문제를 해결하기 위해서는 프로그래밍이라는 과정을 거쳐야 한다.
이러한 프로그램 중 가장 기본은 C 언어라고 할 수 있는데, 이 과정을 통해
프로그래밍언어의 개념과 프로그래밍언어의 변천,
프로그래밍언어의 설계, 프로그래밍언어의 구현과 바인딩(binding),
구문 정의, 변수, 수식 및 제어문, 자료의 형(data type),
식별자의 영역과 수명, 기억 장소의 할당방법, 부프로그램의 개념, 자료 추상화,
예외처리, 병렬 프로그래밍 등에 대해 알 수 있다.
자바스크립트 로고
프로그래밍언어의 종류를 살펴보면 저급 언어에는 어셈블리어가 대표적이며,
고급 언어는 최초의 구조적 언어로 널리 쓰이진 않았지만 C 등의 언어에 영향을 준
알골(ALGOL: ALGOrithmic Language),
최초의 고급 언어로 수치해석에 뛰어난
포트란(FORTRAN: FORmular TRANslator)과
사무처리용 언어인 코볼(COBOL: Common Business Oriented Language),
시분할 개념이 도입 된
베이식(BASIC),
파스칼(Pascal),
에이다(Ada) 등이 있다.
또한 상당히 초기에 개발된 언어이면서 고급 언어임에도 어셈블리 수준으로
하드웨어 제어가 가능하기 때문에 ‘중급 언어’라는 영역에 들어가는 C 언어와 C++, C#도 있다.
그 외 함수형 언어인 Caml과 Caml에 객체지향 개념을 추가한 OCaml,
OCaml의 .net 버전인 F#, 리스프처리언어(LISP)의 후계자격 언어인
자바(JAVA), VM(Virtual Machine)에서 실행되는 클로저(Clojure),
다중패러다임 언어로서 자바 VM에서 실행되는 스칼라(Scala),
구글에서 C와 같이 시스템 프로그래밍 목적으로 만든 언어인 고(Go),
그리고 Java, 자바 스크립트(java script),
JavaScript를 간략하게 만든 언어의 결과물이 자바 스크립트로 변환 가능한
커피 스크립트(coffee script), 보통 Obj-C로 쓰이며 현재 애플이 추천하고 있는 언어인
오브젝티브 C(Objective-C), 논리형 언어이면서 인공지능에 사용되는 프롤로그(prolog)가 있다.
또한 미디어 아트 지향 언어인 프로세싱(processing), 모질라 재단에서 개발 중에 있으며
C++을 대체하기 위한 언어인 러스트(Rust), 최초로 객체지향을 구현한 언어인 스몰토크(smalltalk)이 있다.
어셈블리어
한편 특수목적에 한정된 언어인 DSL(Domain Specific Language)들로는 마크업 언어 중
하나인 마크다운, 그래픽카드 쉐이더 언어인 HLSL, 엄밀히 따지면 프로그래밍언어는 아니며
‘마크업 언어’에 속하는 HTML, 하드웨어 기술 언어인 VHDL, Verilog, C나 Java처럼 바로 소프트웨어로
만들어지는 언어는 아니지만 소프트웨어를 설계할 수 있는 언어인 UML, 프로그래밍언어라기보다는
데이터와 데이터 포맷을 동시에 저장하기 위해 만든 언어 XML, 데이터베이스 질이어인 SQL 등이 있다.
프로그래밍언어
Programing Language
1. 개념 및 정의
컴퓨터과학(-科學, computer science) 분야에 있어 프로그래밍언어(-言語, programing language)의 등장은 다양한 언어를 개발하기 위한 노력으로써 대단히 중요한 의미를 갖는다.
프로그래밍언어는 기계어(machine language)만을 이해하는 컴퓨터와 자연어(natural language)를 구사하는 인간 사이의 의사소통 수단으로 작용하기 때문이다.
또한, 프로그래밍언어는 프로그래밍의 방법에 큰 영향을 주며, 컴퓨터에 대한 이해와 활용에 매우 큰 영향을 끼쳐 왔으며, 컴퓨터 하드웨어의 발전과 더불어 계속하여 발전하여 왔다.
컴퓨터가 탄생한 이래 언어의 설계와 사용법에 대한 경험이 축적되어 오고 있지만, 언어 설계와 구현(implementation)과 사용면에 있어 더욱 연구되어야 할 부분들이 많다.
프로그래밍언어의 개발에 대한 개념과 연구는 컴퓨터공학(-工學, computer engineering)의 기본이 되며, 컴퓨터 프로그래머는 물론 컴퓨터공학을 전공으로 하는 학생들에게는 반드시 필요하다.
프로그래밍언어에서는 모든 언어의 전반에 깔려 있는 특성과 기본적인 설계 사상, 구현 방법들을 살피게 되며, 이를 바탕으로 하여 기존 언어들의 설계개념과 구현방법들을 연구한다.
이러한 지식들은 컴퓨터와의 의사소통 방법은 물론 컴퓨터를 좀 더 잘 이해하는 데 도움을 줄 수 있으며, 새로운 언어를 설계하고 구현하는 데에도 커다란 도움을 줄 수 있다.
따라서 컴퓨터를 이용하여 문제를 해결하기 위해서는 프로그래밍이라는 과정을 거쳐야 한다.
이러한 프로그램 중 가장 기본은 C 언어라고 할 수 있는데, 이 과정을 통해 프로그래밍언어의 개념과 프로그래밍언어의 변천,
프로그래밍언어의 설계, 프로그래밍언어의 구현과 바인딩(binding),
구문 정의, 변수, 수식 및 제어문, 자료의 형(data type),
식별자의 영역과 수명, 기억 장소의 할당방법, 부프로그램의 개념, 자료 추상화,
예외처리, 병렬 프로그래밍 등에 대해 알 수 있다.
자바스크립트 로고
프로그래밍언어의 종류를 살펴보면 저급 언어에는 어셈블리어가 대표적이며,
고급 언어는 최초의 구조적 언어로 널리 쓰이진 않았지만 C 등의 언어에 영향을 준 알골(ALGOL: ALGOrithmic Language),
최초의 고급 언어로 수치해석에 뛰어난 포트란(FORTRAN: FORmular TRANslator)과 사무처리용
언어인 코볼(COBOL: Common Business Oriented Language),
시분할 개념이 도입 된 베이식(BASIC), 파스칼(Pascal), 에이다(Ada) 등이 있다.
또한 상당히 초기에 개발된 언어이면서 고급 언어임에도 어셈블리 수준으로 하드웨어 제어가 가능하기 때문에
‘중급 언어’라는 영역에 들어가는 C 언어와 C++, C#도 있다.
그 외 함수형 언어인 Caml과 Caml에 객체지향 개념을 추가한 OCaml,
OCaml의 .net 버전인 F#, 리스프처리언어(LISP)의 후계자격 언어인 자바(JAVA), VM(Virtual Machine)에서
실행되는 클로저(Clojure), 다중패러다임 언어로서 자바 VM에서 실행되는 스칼라(Scala),
구글에서 C와 같이 시스템 프로그래밍 목적으로 만든 언어인 고(Go),
그리고 Java, 자바 스크립트(java script), JavaScript를 간략하게 만든 언어의 결과물이 자바 스크립트로 변환 가능한 커피 스크립트(coffee script),
보통 Obj-C로 쓰이며 현재 애플이 추천하고 있는 언어인 오브젝티브 C(Objective-C), 논리형 언어이면서 인공지능에
사용되는 프롤로그(prolog)가 있다.
또한 미디어 아트 지향 언어인 프로세싱(processing), 모질라 재단에서 개발 중에 있으며 C++을 대체하기
위한 언어인 러스트(Rust), 최초로 객체지향을 구현한 언어인 스몰토크(smalltalk)이 있다.
어셈블리어
한편 특수목적에 한정된 언어인 DSL(Domain Specific Language)들로는 마크업 언어 중 하나인 마크다운, 그래픽카드 쉐이더 언어인 HLSL, 엄밀히 따지면 프로그래밍언어는 아니며
‘마크업 언어’에 속하는 HTML, 하드웨어 기술 언어인 VHDL, Verilog, C나 Java처럼 바로 소프트웨어로 만들어지는 언어는 아니지만 소프트웨어를 설계할 수 있는 언어인 UML, 프로그래밍언어라기보다는 데이터와 데이터 포맷을 동시에 저장하기 위해 만든 언어 XML, 데이터베이스 질이어인 SQL 등이 있다.
2. 역사와 발전단계
1세대 언어는 컴퓨터가 인식할 수 있는 기계어를 말하며.
즉 0과 1로 구성된 언어를 의미한다.
기계어는 컴퓨터가 사용하는 언어로 이해하면 된다.
2세대 언어는 첫 번째 프로그래밍언어라고 할 수 있지만, 기계어에 가까운 언어이다. 따라서 0과 1로 구성된 기계어의 불편함을 개선하기 위해 기계어를 일부 기호화한 언어라 볼 수 있다.
그러나 현재는 특수한 분야를 제외하고는 거의 사용되지 않고 있다.
3세대 언어는 본격적인 프로그래밍언어라 할 수 있으며 주로 절차지향 중심의 언어들이 개발되었다.
C, 포트란, 코볼, 베이식 언어 등이 개발되었으며, C 언어는 현재까지도 광범위한 응용 분야에서 많이 사용되고 있다.
4세대 언어는 대용량 데이터를 처리하기 위한 데이터베이스 관련 프로그램을개발할 수 있는 언어이다.
이 언어들은 주로 윈도우(Windows)에서 쉽게 프로그램을 개발할 수 있는 환경을 제공하고 있다.
현재 4세대 언어의 사용은 5세대 언어의 등장으로 점차 사용이 줄어들고 있는 추세이다.
5세대 언어는 본격적인 객체지향 언어라고 할 수 있는데 네트워크 관련 기능이 강화된 언어이다.
대표적인 언어로 Java 언어와 C++, C# 등이 있다.
또한 웹의 등장으로 인해 웹과 데이터베이스를 쉽게 연결하여 프로그램을 개발할 수 있는 ASP, JSP, PHP 등의 언어들이 있다.
프로그래밍언어의 발전 추세
발표년도 | 프로그래밍언어 |
1943년 | Plankalkül, 에니악 코딩 시스템 |
1951년 | 지역 어셈블리어(regional assembly language) |
1952년 | 오토코드 |
1954년 | IPL(리스프의 선구자) |
1955년 | 포트란(FORTRAN) |
1958년 | 리스프(LISP), 알골 58 |
1959년 | 코볼(COBOL), RPG |
1962년 | APL, 시뮬라(simula), SNOBOL |
1963년 | CPL(C의 선구자) |
1964년 | BASIC, PL/I |
1967년 | BCPL(C의 선구자) |
1969년 | B(C의 선구자) |
1970년 | 파스칼(Pascal) |
1972년 | 프롤로그 |
1970년대 중반 | 스몰토크 |
1978년 | SQL(처음은 단순 쿼리 언어였으나, 프로그래밍 구조체와 확장됨) |
1980년 | C++(처음 이름은 C with classes였으나 1983년 7월 이름이 C++로 변경됨) |
1983년 | 에이다(Ada) |
1986년 | 오브젝티브-C |
1991년 | 비주얼 베이직, HTML(마크업 언어) |
1995년 | 자바, 델파이(오브젝트 파스칼), 자바스크립트 |
1999년 | D |
2000년 | 액션 스크립트 |
2001년 | C#, 비주얼 베이직 닷넷 |
2002년 | F# |
2003년 | 그루비, 스칼라, 팩터 |
2007년 | Clojure |
2009년 | 고(Go) |
2011년 | 다트 |
3. 접근방법 및 주요 연구영역
1) 접근방법
어셈블리어 → 리눅스 → C 언어 → 시스템 프로그래밍 → 네트워크 프로그래밍 |
프로그래밍을 처음 접하는 사람이라면 개방형 운영체제인 리눅스와 객체지향 언어인 C에 대해 접근하는 것에서부터 시작한다.
리눅스 시스템 프로그래밍과 어셈블리어는 프로그래밍언어를 알기 위한 기초단계에 해당한다. 또한 네트워크 프로그래밍 과정도 필수적이다.
즉 어셈블리어, 리눅스 입문 및 활용, C 프로그래밍 입문, 시스템 프로그래밍, 네트워크 프로그래밍 등은 프로그래밍언어를 연구하는 데 필수적이다.
2) 프로그래밍언어의 연구영역
프로그래밍언어라는 분야는 프로그래밍언어의 개발과 이에 관련된 여러 분야(오토마타(automata), 성능, 컴파일러 등)에서 이미 수많은 논문이 발표되었으며, 1990년을 기점으로 해서 점차 쇠퇴하고 있다.
객체 지향 언어와 컴포넌트 언어로 이제 언어 자체의 종말에 가까워졌다고 볼 수 있는 것이다.
새로운 무언가 돌파구가 생기지 않는 이상 언어 자체의 연구는 힘든 상황이다.
또한 국내 현실이 새로운 언어를 적용하거나 기존의 언어를 특성 시스템이나 특정 운영체제에 특화시키는 일이 없으며 프로그래밍언어 자체를 연구하는 국책사업도 전무하기 때문에, 이로 인해 상당수의 대학의 프로그래밍언어 연구실이 없어지고 있는 실정이다.
그러나 프로그래밍언어 연구는 수학과 구현이라는 두 부분에서 상당히 재미있는 분야이다.
또한 형식 시스템(type system)이나 컴파일 시간 분석(compile time analysis)과 같은 분야는 아직 연구해야 할 부분들이 매우 많이 남아있다.
국내 논문을 살펴보면 커넥터, 에이전트, 자바 기반 응용, 예외처리, 시멘틱 웹(semantic web), 유효변수 알고리즘, 고차함수 프로그래밍, XML 표현과 응용, 메모리 사용 및 관련 응용 등 수많은 분야에 관한 논문과 연구가 진행되고 있다. 그러나 이러한 분야가 타 분야와도 걸쳐진 부분이 많으며 주로 연구보다는 응용측면이 강하다.
국책연구에 대해서도 해당 국책연구사업 비율을 살펴보면 관련 연구는 매우 미비한 수준이다.
현 산업계에서도 PL 관련 산학연이나 응용연구는 찾기 어려운 실정이다.
4. 주요 용어 및 관련 직업군
1) 주요 용어
• 닷넷(.Net)
마이크로소프트의 프로그래밍 지원 서비스 모음이며 언어 간 연동 및 시스템 자원의 효과적 이용을 위한 플랫폼을 말한다.
• 액티브 X(Active X)
마이크로소프트사에서 개발한 객체지향 프로그래밍을 위한 도구를 말한다.
• API(Application Programming Interface)
응용 프로그램에서 사용하기 위해 운영 체제 차원에서 지원하는 라이브러리이다.
• 어셈블리(assembly)
기계어와 1:1 대응되는 기호 언어로 프로그래밍언어 중 하나이다.
• 버퍼 오버플로우(buffer overflow)
버퍼에 할당된 메모리 크기보다 큰 데이터가 저장되어 프로그램이 오동작하게 되는 상황이다.
주로 C/C++에서 입력 데이터의 크기 검사를 하지 않아 발생한다.
• 빌드(build)
소스 코드를 실행 가능한 파일로 변환하는 과정을 말한다.
컴파일 및 링크 과정을 모두 포함한다.
• C
유닉스 운영체제를 위해 개발된 프로그래밍언어이다.
근래 발표된 여러 프로그래밍언어들의 뿌리다.
• 콜백(call back)
호출된 프로그램이 호출한 프로그램을 호출하는 것이다.
• 클립보드(clipboard)
데이터의 복사 또는 잘라내기 후 붙여넣기 전에 이를 임시 저장하는 프로그램을 말한다.
• COM(Component Object Model)
프로세스 간 통신과 동적 오브젝트 생성을 위해 사용되는 플랫폼이다.
• 공용 대화 상자(common dialog box
파일 열기, 저장, 색상 및 글꼴 선택, 인쇄 설정 등 프로그래밍 과정 중에 필요한 기본적인 대화 상자의 집합이다.
VB에서는 컨트롤로 구현되어 구성요소로 추가하여 사용할 수 있다.
• 작성 프로그램(creator, 생성자)
객체 지향 프로그래밍에서 객체를 생성할 때 필요한 루틴을 말한다.
• DLL(Dynamic-Link Library)
프로그램에 필요한 함수들을 가진 라이브러리 파일의 확장자.
• XML(Extensible Markup Language)
HTML의 한계를 극복하기 위해 개발된 다목적 마크업 언어.
• 상속(inheritance)
객체 지향 프로그래밍에서 한 객체의 모든 특징을 물려받은 새로운 객체를 만드는 일이다.
새로운 객체는 부모 객체는 물론 자신만의 특징을 가질 수 있다.
• IDE(Integrated Development Environment, 통합 개발 환경)
코딩, 디버그, 컴파일 등 프로그래밍 과정의 모든 부분을 한 프로그램이 처리하는 환경을 말한다.
최근의 GUI 개발 도구들 대부분이 이러한 형태를 가진다.
• 마크업 언어(markup language)
태그 등을 이용해 데이터의 구조를 표현하는 방식을 말한다.
일반적인 프로그래밍언어와 약간의 차이를 보인다.
• 오브젝트(object, 객체, 인스턴스)
객체 지향 프로그래밍에서 클래스에 의해 생성되며 속성(데이터)과 메소드(method)를 모두 포함한 자료 구조를 말한다.
객체는 메소드를 통해 자신의 속성을 변경하고, 메시지 전달을 통해 다른 객체와 데이터 교류를 할 수 있다.
• OOP(Object Oriented Programming, 객체 지향 프로그래밍)
프로그램을 여러 객체들 간의 메시지 전달을 기반으로 구성하는 것을 말한다.
객체들은 메시지에 의해 데이터를 주고받는다.
• 파스칼(pascal)
교육용으로 개발된 프로그래밍언어를 말한다.
• 플랫폼(platform)
프로그램이 실행되는 실체적이거나 가상적인 환경이다.
• 예약어(reserved word)
프로그래밍언어에서 이미 문법적으로 사용되고 있기에 식별자로 쓰일 수 없는 단어를 가리킨다.
• 신택스(syntax, 구문)
프로그래밍언어에서 문법에 따라 프로그램에 대해 서술한 것이다.
• 스레드(thread)
한 프로세스 내에서의 작업 흐름.
프로세스는 스레드로 이루어진다.
일반적으로 한 프로세스는 하나의 스레드를 가지고 있지만 경우에 따라 둘 이상의 스레드로 이루어질 수 있다. 이 경우를 멀티스레드라 칭한다.
• 트윕(twip)
화면상의 프로그램 배치와 비율을 모든 디스플레이 시스템에서 일치시키기 위한 단위이다.
• URL(Uniform/Universal Resource Locator)
네트워크상에 존재하는 파일의 위치를 표현하기 위한 방식을 말한다.
웹 사이트 주소는 URL의 일부일 뿐이며 정확히는 네트워크에 존재하는 모든 파일들을 모두 나타낸다. FTP, HTTP 등의 프로토콜을 이용한다.
• UDP(User/Universal Datagram Protocol)
네트워크상의 서로 다른 컴퓨터들을 연결하기 위한 프로토콜.
TCP에 비해 빠르고 오버헤드가 적으나 패킷의 무결성을 보장할 수 없다.
• VBA(Visual Basic for Applications)
마이크로소프트사의 오피스 프로그램에 내장된 VB를 이르는 말이다.
주로 매크로 기능 등을 제어하기 위해 사용된다.
• VB(Visual Basic, 비베, 비주얼 베이식)
베이식을 기반으로 한 프로그래밍언어이다.
윈도우 운영체제에 종속적이다.
• 비주얼 C++(Visual C++, VC++)
C 언어에서 개체 지향적으로 발전한 프로그래밍언어이다.
다양한 작업 도구를 제공한다.
2) 관련 직업군
• 기술 분야 공무원
국가공무원, 관변단체 공무원 등
• 전문적인 기술인
산업기사, 기술사, 감리사 등
• 학문분야(대학교수, 연구원 등)
• 산업체
대기업, 중견기업, 중소기업, 창업 등
• 연구분야
정부기관 연구소 및 민간기업 연구소 컴퓨터 소프트웨어 전문가
프로그래밍 언어
programming language
기계가 읽을 수 있고 사람이 읽을 수 있는 형식으로 프로그램을 작성하기 위해 사용되는 컴퓨터 언어
컴퓨터가 바로 이해할 수 있는 언어는 기계어인데,
기계어는 2진수인 1과 0으로 구성되어 있어서 그 사용이 불편하기 때문에
기계어와 인간이 사용하는 언어의 중간적 위치에서 프로그램 작성을
쉽게 할 수 있는 인공언어로 프로그래밍 언어가 등장하였다.
프로그래밍 언어는
간결성,
직교성,
가독성,
정확성,
기계독립성 등을 특징으로 하며
과학응용 분야,
사무응용분야,
인공지능 분야,
시스템 프로그래밍,
스크립트 언어,
특정 목적 언어 등
많은 분야에서 사용한다.
프로그래밍 언어는
컴퓨터시스템을 작동시키는 소프트웨어를
작성하기 위한 언어로 저급언어와 고급언어로 구분된다.
저급언어는 하드웨어에 관련된 직접 제어가 가능한 언어를 말하며,
고급언어는 하드웨어 관련 지식 없이도 프로그램 작성이 가능한 언어다.
고급언어는 사용자의 명령을 컴파일러가 해석하기 때문에 기계어보다 효율성이 낮다.
가장 많이 보급되어 있는 COBOL, FORTRAN 등은 고급언어(컴파일러 언어)가 대표적 예다.
프로그래밍 언어의 종류
저급언어 | 기계중심 언어 | 기계어, 어셈블리 언어 | |
고급언어 | 컴파일러 언어 | 과학기술 계산 언어 | 포트란, 알골, 베이식 |
인간중심 언어 | 사무처리용 언어 | 코볼, PL/1, RPG |