프로그래밍 언어 Mini-HOWTO

원저자 : Risto Varanka

원 본 : LDP - Programming Languages HOWTO

번역자 : 주용석 ysjoo@lgeds.lg.co.kr (LG-EDS 공공 1 사업부)

번역일 : 2000년 02월 07일

 

Index

1. Introduction

2. Programming Languages

3. GUI Toolkits

4. 결론

 

1. Introduction

Linux는 어떤 유저라도 그것의 개발작업에 참여할 수 있다는 점에서 매우 매력적인 운영 체제 이다. 그러나 언어적인 다양성(The variety of available Program Languages)의 문제는 초기 Linux 개발자들에게 혼동을 주었다. 이 문서는 오늘날의 개발에 있어서 가장 일반적인 옵션들을 listing하였고, 그것들에 대한 핵심적인 사실을 서술한다. 나의 목표는 프로그램 언 어를 review하는 것도 아니고 그 중에 최고를 골라내는 것도 또한 아니다. 각각의 프로그래 밍 언어들은 이용자에게 있어서, 그들이 어떤 일을 하며, 그들의 성향이 어떠한가에 따라 적합화 될 수 있는 하나의 툴이다. 당신이 당신의 귀를 항상 열어놓고, 주위에 자문을 구한 다면, 당신은 보다 많은 정보를 쉽게 얻을 수 있다. 이 글의 Link 섹션은 당신에게 당신 자 신의 연구를 위한 어떤 지침들(some pointers)을 제공할 것이다.

이 문서는 최근에 LDP에 최근에 올라온 것으로 많은 사람들에게 feedback을 받을 기회가 거의 없었다. 그러나 이 글이 Linux상에서 프로그래밍을 하는 것에 관심이 있는 사람에게 유용할 것이라고 입증 될 것을 믿고, 그러한 희망 속에서 배포되었다.

1.1 Copy Right Copyright (c) 2000 Risto Varanka.

1.2 기타

이 문서 역시 다른 LDP문서와 마찬가지로 License에 관한 범위와 Disclaimer와 같은 내용들을 지니고 있으나, 다른 문서들과 동일하게 적용되고 있다.

 

2. Programming Languages

2.1 Concepts in the Table

Language 일반적으로 일컬어지는 '프로그램 언어'

Beginner 프로그래밍 경험이 거의 없는 사람들에게 쉽게 익숙해질 수 있는지에 대한 여부. "yes"라고 표기된 언어는 초보자에게도 쉽게 습득될 수 있는 언어이다.

Performance '당신이 당신의 응용프로그램을 사용목적으로 만들었을 때, 얼마나 빠르게 이 프로그램이 실행되어지는가'에 대한 척도가 된다. 프로그래밍 언어의 특성보다는 자신의 프로그래밍 알 고리즘 기술에 보다 더 좌우된다. 경험적으로, C, C++, Fortran들은 다른 프로그래밍 언어에 비하여 - 때때로 위의 언어들은 원하는 바를 이루는 것이 어려울지 모르지만 - 우수한 성 능(속도, 메모리) 때문에 이용될 필요성이 제기된다. (언어에 대한 benchmarking을 위한 하 나의 아이디어는 각종의 프로그래밍 언어로 정렬 알고리즘을 구현할 때, 그것들의 속도를 비교해 봄으로써 테스트 해볼 수 있다.) OOP - Object Oriented Programming vs. other paradigms OOP는 많은 대중적인 인기를 얻는 중요한 프로그래밍 패러 다임의 하나이다. 객체지향언 어에 있어서, 자료구조와 알고리즘은 '클래스'라고 불리는 하나의 단위로 통합된다. OOP는 종종 순차적인 프로그램과 대조된다.(자료구조와 알고리즘을 사용하여 대조) OOP라는 방식 은 프로그래밍 언어에 엄격하게 의존되는 것은 아니다. C와 같이 OOP로 간주되지 않는 언 어로도 당신은 OOP로 프로그래밍 할 수 있다. 그리고 OOP로 여겨지는 프로그래밍 언어 로도 순차적 스타일로 프로그래밍 할 수 있는 것이다. 나는 특별한 특성들이나 OOP를 쉽 게 구현할 수 있도록 하는 부가적인 특성을 갖는 OOP언어를 OOP언어로써 listing했다. 기능적인 언어(예를 들자면, Lisp)들은 약간 다른 부류이다 ? 이들 사이에, 기능적 프로그래 밍은 OOP의 superset이다. 그러나 Logic 프로그래밍(Prolog)은 또한 서술적 프로그래밍 (declarative programming)이라고도 불리지만, 이것은 유사한 의미에서 프로그래밍의 다른 유 형과 연관된 것은 아니다.

RAD, Rapid Application Development 당신은 언어를 사용하는데 있어서, 언어자체보다 Tool에 더욱 의존적이다. Linux를 위한 GUI 개발 Tool에 대한 HOWTO가 있으나, 이것은 너무 오래된 것들이다. 당신은 좋은 Graphical Tool을 가지고 RAD를 수행할 수 있다. 뿐만 아니라, 때때로 RAD는 코드 재사용 에 기반을 두므로, Free software들이 좋은 시작지점을 제공할 수 있을 것이다.

Examples 프로그램 언어가 가장 자주 사용되는 영역을 언급한다. 다른 좋은 것(그리고 나쁜 것)은 존재하는 것을 사용한다. 그러나 그것들은 덜 정형적이다.

Comments 수용력이나 Dialects와 같은, 언어상 추가적인 정보

 

2.2 Major Languages

 

PERL

Beginner : Yes - OOP : Yes

Examples : Scripting, 시스템 관리, WWW

Comments : 매우 인기 있는 텍스트 및 스트링 제어 툴. 강력한 기능

 

Python

Beginner : Yes - OOP : Yes

Examples : WWW에 이용되거나 Scripting에 이용. Application 개발가능

Comments :

 

TCL

Beginner : Yes - OOP : No

Examples : 시스템 관리와 Scripting. Application 개발가능

Comments:

 

PHP

Beginner : Yes - OOP : Yes

Examples : WWW(WWW server와 연동 되므로 주로 WWW에서만 이용)

Comments : 매우 인기 있는 웹 - 데이터 베이스 연동 언어

 

Java

Beginner : Yes - OOP : Yes

Examples : Cross platform application(플랫 폼 독립적인 실행), WWW(applet)

Comments :

 

Lisp

Beginner : Yes - OOP : Functional

Examples : Emacs modes(for elisp)

Comments : Variants Elisp, Clisp and scheme

 

Fortran

Beginner : No - OOP : No

Examples : 수학적 응용 프로그램

Comments : f77, f90, f95와 같은 여러 버전이 제공

 

C

Beginner : No - OOP : No

Examples: 시스템 프로그래밍 및 각종 응용 프로그램 개발

Comments : 매우 널리 이용되고 있음

 

C++

Beginner : No - OOP : Yes

Examples : 응용 프로그램 개발.

Comments :

 

2.3 Shell Programming

쉘은 역시 가장 중요한 프로그래밍 환경이다. 나는 아직 완전하게 쉘을 이해하지 못했으므 로 그것들을 여기서 다루지 않았다. 원래 Linux 상에서 작업하는 사람을 위해 가장 중요한 것들이 쉘에 관련된 지식이다. 또한 시스템 관리자를 위해서는 이것이 더욱더 필요하다. 쉘 프로그램과 Scripting 언어 사이의 유사점이 있다 - 그것들은 동일한 목포를 이룰 수 있 으며, 그리고 목표를 이루고자 할 때, 당신은 고유 쉘이나 Scripting 언어를 선택할 수 있는 옵션을 가지고 있다. 요즘 가장 인기가 좋은 쉘은 bash, csh, tcsh, ksh, 그리고 zsh이다. 당 신은 쉘들에 대한 정보를 'man'이라는 명령어를 통해 얻을 수 있다.

(역주) 쉘은 유닉스 커널(운영체제)과 유저사이에 명령어를 해석해주는 해석기라고 생각하면 됩니 다. 쉘은 유닉스의 탄생과 더불어 꾸준하게 발전해왔습니다. 처음에는 sh라는 Bourne 쉘을 사용하였으며, BSD유닉스의 탄생과 더불어 Berkeley C shell ? csh가 탄생되었습니다. 그 후 사람들은 Korn 쉘이라는 쉘로써 이 두 쉘을 통합하려는 움직임을 시도했었습니다. 하지만 최근 들어 Bourne Again SHell인 bash와 tcsh이 등장함에 따라 다시 양분화 되고 있습니다. Bourne Again SHell은 이름에서도 보이듯이 Bourne쉘의 특성을 유지한 채 다른 여러 기능 을 보완한 쉘이고 tcsh는 csh의 특징을 유지한 채 다른 기능을 보완한 쉘입니다. 그러니 굳이 sh와 csh를 고집할 필요는 없다고 봅니다. 쉘 스크립터를 통해 여러분은 간단한 프로 그래밍을 할 수 있지만, 사실상 이것은 여러 가지 유닉스의 명령어들의 도움이 없이는 쉽지 않습니다. 쉘은 자체적으로 가지고 있는 명령어들이 많지 않습니다. 다만 컨트롤 제어 및 기타 루프 등을 제공 하고 있긴 합니다.

현재 가장 널리 쓰이는 쉘이 바로 bash인 것 같습니다. 모든 쉘들에는 장단 점들이 있지 만 ksh가 스크립팅 기능이 가장 강력하고요, bash와 tcsh는 프로그래밍 보단 주로 사용자 편의를 위해 많은 기능을 제공 하고 있습니다. 과거 csh에서 볼 수 없었던 command editing기능, 그리고 다양해진 job control 과 강력해진 history기능들이 바로 그것입니다.

제가 아는 것이 짧은 관계로 대충 쉘에 대해선 이정도만 덧붙히려고 합니다. 더 많은 정보 를 원하시면 ysjoo@lgeds.lg.co.kr로 메일 주시기 바랍니다. 참고로 저는 Bourne Again SHell 을 사용하고 있습니다. ;-)

 

2.4 Other Languages Other languages of note

: AWK, SED, Smalltalk, Eiffel, ADA, Prolog, assembler, Object C, Pascal, Logo

 

2.5 Other Links

A general info site : http://www.tunes.org/Review/Languages.html

TCL : http://www.scriptics.org

PERL : http://www.perl.org

Python : http://www.python.org

PHP : http://www.php.net

Java : http://www.javasoft.com

clisp : http://clisp.cons.org/~haible/packages-clisp.html

 

3. GUI ToolKits

 

3.1 Concepts in the Table

Library 툴 키트의 약자 또는 일반적인 이름을 의미한다.

Beginner 새로운 프로그래머 에게 툴 키트가 배우기 적당한지에 관한 여부

License 다른 GUI툴 키트를 위한 다른 License는 실제적으로 중요성을 가지고 있다. GTK+와 TK License는 당신이 open source와 closed source application 개발에 있어서, 특별한 license 의 대가 없이 제공된다. 그러나 Motif는 모든 개발에 있어서 license에 대한 지불을 요구 하고 있으며, Qt의 경우 closed source형태로 개발되는 일에만 지불을 요구하고 있다.

Language 툴 키트와 함께 가장 자주 이용되는 프로그래밍 언어

Bindings 툴 키트와 함께 사용될 수 있는 다른 프로그래밍 언어

Examples 툴 키트와 프로그래밍 언어로 만들어 질 수 있는 응용 프로그램

Comments 언어와 툴 키트에 관한 추가적인 사항 및 정보

 

3.2 Major GUI ToolKits

 

TK

Beginner: Yes - License: Free

Language: TCL Bindings: PERL, Python, C, C++, others

Examples: X window Programming, TKDesk, Make xconfig

 

GTK+

Beginner: No - License : Free(LGPL)

Language: C Bindings: PERL, C++, Python, many others

Examples: GNOME, Gimp

 

QT

Beginner: No - License: Free for open source

Language: C++ Bindings: Python, PERL, C, others?

Examples: KDE

 

Motif

Beginner: No - License: Non-free

Language: C, C++ Bindings: Python, others?

Examples: Netscape, WordPerfect

 

3.3 Links

TK : http://www.scriptics.com

GTK+ : http://www.gtk.org

QT : http://www.troll.no

Motif : http://www.metrolink.com

 

4. 결론

 

원래 이 글에는 결론 부분이 없었습니다. 그러나 위의 설명만으로는 너무나 간략하게 모든 것이 설명된 것 같았고, 더구나 원 저자 또한 이 글이 변경되는 것에 대한 License가 덧붙혀 진 부분에 대한 언급만을 요구 했으므로, 결론을 덧붙혀 보고자 합니다.

먼저 프로그램 언어의 선택 문제입니다. 사실상 프로그래밍 언어의 선택은 완전한 개발자의 문제라고 생각됩니다. 사실상 프로그램의 완성도는 그 프로그램이 얼마나 사용자의 구미에 맞게 작성되었으며, 얼마나 효율적인 알고리즘을 사용했으며, 얼마나 많은 조사와 검증을 거 쳤느냐에 따라 달라지는 것이라고 생각합니다. 하지만 같은 길을 걸어가더라도 지름 길이 있 듯이, 어떤 프로젝트에도 적절한 프로그래밍 수단이 따른다고 생각됩니다. X windows환경에 서 단순히 X-libraries와 C만을 가지고 프로그래밍하는 것은 사실 너무나 많은 부담을 프로 그래머에게 떠넘기는 일입니다. 간단한 응용 프로그램을 위해 그런 어려운 툴 키트를 가지고 프로그램 하는 것 보다는 GTK나 Motif와 같은 편리한 툴 키트를 이용하는 것은 매우 효율 적인 방법이라고 저는 믿습니다. 비록 응용프로그램의 정교성 및 효율성, 수행 속도 측면에 선 다소 뒤질 지 모르지만, 상호 trade-off가 있는 것이겠죠.

이런 프로그램 언어의 선택은 여러 프로그래머의 역할 인 것이죠.

이제 제 경험을 토대로 제가 사용 하였던 프로그램 언어에 대해 설명을 하고 이 글을 마무 리 짓겠습니다.

자바라는 언어는 1995년도에 처음 Sun사에서 선보인 언어 입니다. 사실상 가장 충실한 OOP의 구조를 지니고 있다고 볼 수 있습니다.(완전히 제 개인적인 견해 입니다.) 많은 프로 그램을 짜본 것은 아니지만, 자바의 클래스 개념은 가장 완벽한 것이라고 볼 수 있을 것 같 습니다. 물론 개인적인 차이는 분명히 존재 하겠죠. 하지만 플랫 폼에 독립적이고 비교적 배 우기 쉬우며, Web Based Programming이라는 차원에서는 단연 우위를 자랑한다고 볼 수 있 습니다.

C는 설명할 필요가 없는 언어입니다. 간결한 문법과 강력한 포인터라는 점은 이 C언어의 가장 큰 장점이자 또한 언어 자체에 대한 이해를 어렵게 하는 약점이라고 볼 수 있습니다. 하지만 대부분의 시스템 프로그래밍들이 바로 이 C언어를 기반으로 이루어지고 있고, 아직 까지 많은 운영체제의 개발이 이 언어에 의존하고 있습니다. 정교한 제어와, 빠른 속도, 그리 고 작은 바이너리 사이징은 매우 뛰어난 C언어의 장점입니다. 하지만 OOP를 위한 어떠한 수단도 제공하지 않고 있다는 점에서 구시대적인 프로그래밍 언어라고 간주 되고 있습니다. 이러한 점을 보완하기 위해 새로이 Objective - C라는 컴파일러가 새로 탄생하였습니다. 많 은 컴파일러가 존재 하나 대부분 ANSI - C 표준을 따르고 있습니다. 또한 Linux 시스템 프로 그래밍 표준을 위해 POSIX가 제공되고 있습니다.

C++는 현재 OOP 라는 패러 다임을 구현하는 데 있어서 가장 널리 사용되고 있는 프로그 래밍 언어라고 생각합니다. 또한 Microsoft사의 제품 군들이 모두 MFC라는 강력한 클래스 라이브러리를 제공 하고 있기 때문에 매우 인기 있는 언어입니다. C만큼이나 많은 컴파일러 가 제공되고 있습니다. Linux환경에서는 GNU g++가 가장 일반적인 컴파일러로 이용되고 있 습니다.

저도 스크립트 언어에 대해서는 많은 지식을 갖고 있지 않지만, 흔히 간단한 스크립트를 작 성하기 위해선 shell script와 PERL스크립트를 이용합니다. PERL은 또한 shell스크립트 보 다 훨씬 많은 built-in 명령어를 가지고 있으며, 텍스트 제어에 매우 강력한 기능을 제공합니 다. 또한 풍부한 라이브러리들은 PERL을 스크립트 언어 수준을 뛰어넘을 수 있게 도와줍니 다. 그리고 위 들 스크립트 언어들은 CGI 프로그래밍에서 자주 이용되고 있습니다.

웹 개발환경에서는 새로 등장한 스크립트 언어가 바로 PHP입니다. 강력한 텍스트 제어 기능 뿐만 아니라 웹 서버가 직접 parsing 해서 처리한다는 점이 이 PHP의 장점이기도 합니 다. (속도 측면에서 좀 유리한 것 같더군요) 그리고 CGI 및 동적 웹 환경을 위해 제공되는 많은 라이브러리와, 데이터베이스 별로 제공되는 Interface Set은 매우 강력한 힘을 발휘 할 수 있습니다. 하지만 개인적인 판단으로 보안적인 차원에 문제가 있을 수도 있다고 생각됩니 다.

이밖에도 저는 지금까지 프로그래밍을 해오면서 몇 가지 언어를 더 사용해 보긴 했지만 여기서 언급할 수준이 아니라고 생각합니다. 다른 의문 사항이 있다면, ysjoo@lgeds.lg.co.kr로 메일을 주시면 아는 범위 내에서 성실하게 답변해 드리겠습니다.