12 장 컴퓨터와소통하는 프로그래밍언어 Introduction to Computers Revised 6th Edition
목차 Introduction to Computers Revised 6th Edition
프로그래밍언어 (Programming Languages: PL) 주어진어떤문제를해결하기위해인간과컴퓨터사이에서의사소통을가능하게 하는인공적인언어를말함 1 효율적인알고리즘을개발할수있는능력의향상시킴 2 현재사용하는프로그래밍언어의능력을향상시킴 3 주어진과제를해결하는최적의언어를선택할수있음 4 새로운언어를쉽게배울수있음
프로그래밍언어 (Programming Languages: PL) [ 프로그래밍언어의집합 ]
프로그래밍언어의특성 1 간결성 (simplicity) 간결성이란프로그램을쉽게작성하고, 이해하고, 읽을수있도록간결하게표현할수있는특성임 2 직교성 (orthogonality) 직교성이란언어의각구성요소가상호독립적이고어떤환경에서도그구성요소가같은의미로사용됨 3 가독성 (readability) 가독성있는프로그램은작성하기도쉽고다른사람이읽기에도매우편리함적절한주석 (comment) 또한가독성을높여줌 4 정확성 (preciseness) 엄밀하게정의된문법에따라작성된프로그램은정확성을보장하며예측가능한결과를보장함 5 기계독립성 (machine independence) 주어진프로그래밍의수행시기계에따른차이가없이서로다른컴퓨터상에서도운용이가능해야하고, 똑같은결과를도출해야함
저급언어와고급언어 [ 프로그래밍언어의분류 ]
저급언어와고급언어 기계어와어셈블리언어를의미함 하드웨어에관련된직접제어가가능함 프로그램작성시상당한지식과노력이필요함 [ 어셈블리언어로표현된명령어들의예 ]
저급언어와고급언어 하드웨어에관련된지식없이도프로그램작성가능함일상적인언어, 기호등을그대로이용함기억장소를임의의기호 (symbol) 에저장하여사용함하나의명령으로다수의동작을지시할수있음 ( 예 : A = B + C * D)
저급언어와고급언어 [ 프로그래밍언어의개요 ]
컴파일러언어와인터프리터언어 고급언어를기계어로번역해주는도구, 또는논리적장치 [ 컴파일러방식과인터프리터방식의특성비교 ]
컴파일러언어와인터프리터언어 [ 고급언어프로그램의전체실행순서 ]
FORTRAN 엔지니어, 수학, 과학등을위한수식계산에강한 2 세대언어임 1966 년 ANSI(American National Standard Institute) 에의해 FORTAN IV 로표준화됨 1977 년 FORTRAN 77 로버전업됨 최초의고급언어중하나, 다른언어의설계에많은모델이됨 매우단순하고간결하며, 수치와계산에강함 실행시자료의크기가고정, 동적배열이나재귀호출등은지원하지않음 같은장소에서로다른변수이름을가지게할수있음. 이명효과 (aliasing) 나부작용 (side effects) 등의가능성을내포함
FORTRAN [FORTRAN 프로그램의예 ]
COBOL(COmmon Business Oriented Language: COBOL) 1960 년 COBOL- 60 의최초버전이발표됨 1968 년 ANSI 표준승인됨 1974 년최종버전인 ANSI COBOL 이완성되어사용됨 컴퓨터와독립적으로설계됨사무처리를목적으로설계되어, 파일처리에서강점을보임일상적인영어문장구조로쉬운가독성을보임자연어 ( 영어 ) 문장구조는프로그램의커지는결과를초래, 효율성이떨어짐
COBOL(COmmon Business Oriented Language: COBOL) 코볼은사무용언어의필요성이커진 1960 년도에등장하여많은사람들의사랑을받아왔던사무처리위주의언어이다. 요즘들어 C 언어등에자리를내주고현재는거의사용되지않는다. 아래그림은 COBOL 프로그램의예를나타낸다. [COBOL 프로그램의예 ]
BASIC(Beginner s All-purpose Symbolic Instruction Code: BASIC) 1965 년케머니와쿠르츠에의해개발된프로그래밍언어임 1970 년대중반컴퓨터를이용한소규모업무처리등에쓰임 BASIC 의단점을보완한 Quick Basic, 마이크로소프트의 Visual Basic 이나 EXCEL 등에서사용됨 초보자도쉽게배우고, 다양한작업을할수있음코볼처럼대화체의프로그래밍언어이면서도작업량이작음마이크로소프트의 BASIC 지원으로현재도계속발전되고있음대부분의 OS에서지원함
BASIC(Beginner s All-purpose Symbolic Instruction Code: BASIC) [BASIC 프로그램예제 ]
Pascal 파스칼 (Pascal) 은 1971 년스위스의니클라우스워스 (Nicklaus Wirth) 교수에의해만들어짐 구조적 (structured) 프로그래밍과알고리즘학습에적합한교육용프로그래밍언어임 교육적목적이강했기때문에 1990 년대초반까지만해도대부분의컴퓨터관련교재에서파스칼을표준언어로채택하였으며, 언어의기능이뛰어나업무용프로그램을작성하는데도많이쓰였음 최근들어각광받고있는 Delphi 에서 Object Pascal 을기본언어로사용함으로써 Pascal 은여전히관심을끌고있음 프로그램을작성할수있는모든명령어를갖춘교육용프로그램언어 구조적인프로그램을작성할수있도록함 명확한구조와정의를가지고있는언어이므로컴파일러가최적화되어있음 객체지향개념등새로운개념들이계속적으로추가되고있음
Pascal 파스칼언어는 C 언어에비해보다엄격하게짜여진구조를가지고있기때문에 2000 년이후대부분의전문프로그래머들이좀더유연한 C 나 C++ 언어로이동하여지금은별로쓰이지않음 [Pascal 프로그램의한예 ]
Lisp 1960 년 MIT 의존매카시 (McCarthy) 에의해개발된언어임 자연어처리와인공지능분야에강함 대화식구성의인터프리터방식으로사용자의요구에그즉시결과값이나오는방식임의의자료형을만들고, 결과값으로사용가능함프로그램과자료가동일한형태로취급됨메모리를동적으로관리하는기능이있음 Lisp의객체 => 원자 (atom) 또는리스트원자 => 문자열 (A, MAN, FOOD 등 ) 리스트 => 원자또는리스트의열로공백으로구분됨예 ) 'A + B' 를 '(PLUS A B)' 로나타냄
Prolog (PROgramming in LOGic) 1972 년코왈스키 (R. Kowalski) 등에의해개발된논리형인공지능언어임 비절차적논리형언어임 여러기종의컴퓨터에서구형이가능함 일본의 5 세대컴퓨터프로젝트에사용된주요인공지능언어임 사실 (fact), 규칙 (rule), 질문 (question) 들로프로그램이구성됨 사실과규칙들을데이터베이스로구성, 프로그램실행은자료에대한질문의응답형식으로진행됨 인터프리터언어이며대화식의명령방식으로작동함 사용자의질문에답하기위해추론엔진 (inference engine) 을사용하고사용자가사실과규칙등을입력함
Prolog (PROgramming in LOGic) [ 소크라테스의죽음 을삼단논법화한 Prolog 의예제 ]
C 1972 년데니스리치가설계, PDP-11 에서구현시킴 기존의언어에비해서신뢰성, 규칙성, 간소성등을가짐 저급언어의기능구현가능함 융통성과이식성 (portability) 이좋아고급프로그래밍언어의개발속도향상에기여 풍부한연산자와데이터형 (data type) 으로응용소프트웨어의개발속도를향상시키는데기여함 매우유연한구조로되어있음 대부분의운영체제에서기본으로지원함 고급언어와저급언어양쪽의장점을모두포함함 모든실행단위가함수로구성됨
C C 언어는등장이후언어의역사에큰영향을줌 UNIX 등의운영체제의기능을사용하는데편리한방법을제공함 C++ 의등장으로계속발전됨 [C 프로그램의예 ]
C++ 객체지향프로그래밍 (Object-Oriented Programming : OOP) 을지원하기위해탄생함 대다수의응용프로그램을만들때가장많이사용함 강력함과편리함의양쪽장점을골고루내포하여효율성을제공함 C의유연성에객체지향의편리성을접목시킴기존의 C언어로개발된모든프로그램을수정없이사용가능함 C언어에익숙해지면 C++ 도빠른적응가능함대부분의운영체제에서 C++ 를지원함
C++ [ Hello World 를출력하는 C++ 예제 ]
Power Builder 제 4 세대컴퓨터가사용된시기에개발된프로그래밍언어를말하는데통상 4GL(Four GL) 이라고함 사이베이스 (Sybase) 사에서만든객체지향언어 주로데이터베이스용응용프로그램을작성하는데쓰이는언어 Visual Basic 이나 Delphi 와같은언어와함께원하는작업을최소한의프로그램작성으로그림을그리듯이화면을디자인할수있는효율적인언어
Power Builder 클라이언트 / 서버응용프로그램개발환경 : 주로데이터베이스관련프로그램으로서버는데이터베이스와관련된작업, 클라이언트는사용자입력 / 출력등의사용자부분을처리하는프로그램을말함 4GL 의 RAD(Rapid Application Development) Tool : 그래픽유저인터페이스환경에서간단한마우스동작만으로빠른개발이가능함 다양한운영체제를지원하는개발환경 : Windows, UNIX, Mac 등의다양한버전을지원함
Power Builder 특정업무용프로그램을여러운영체제에서사용가능함편리한데이터베이스관련기능으로인기가많음프로그램작성후배포시에여러가지불편한점이많음데이터베이스이외의프로그램에서는다른 4GL언어보다성능이떨어지고불편함
Delphi 볼랜드사의 Object Pascal 을 RAD Tool 로변형하여 1995 년출시됨 기본적인내부구조는 Object Pascal 을이용함 Windows 의각종컨트롤이나도구등은 VCL(Visual Component Library) 이라는개념으로지원함 Object Pascal 언어와컴파일러를사용함 VCL 이라는편리한컨트롤제공함 C 나 C++ 로만들수있는모든프로그램을만들수있음. 즉, Windows 와 100% 호환이가능하여 Windows OS 하에서는강력한능력을발휘함 대부분의상업용프로그램에서 Visual C++ 등과함께상당히많이쓰임 Object Pascal 의사용과한글화의부족이문제점으로지적됨
Visual Basic 마이크로소프트에서만든 BASIC 을사용하는 RAD Tool 임 다른 RAD Tool 과마찬가지로사용하기쉬운환경과빠른시간안에원하는프로그램을작성하도록만들어짐 가장배우기쉽고접하기쉬운 Basic을사용함한글지원이우수함인터프리터언어와컴파일러언어양쪽의장점을모두가짐다른마이크로소프트사의도구들을가장간편하게적용할수있음
Visual Basic 마이크로소프트사에서상당한지원을하고있고, 또한전세계적으로도상당히많은사람이사용하고있는언어임 포인터와객체지향의지원부족으로다른언어에비해언어적인성능이다소떨어지는단점이있음 [Visual Basic 6 개발환경 ]
Visual C++ 마이크로소프트사에서만든 C++ 컴파일러이름임 기존의 C++ 에여러가지 Windows 의기능을추가함 Microsoft Foundation Class: MFC 란강력하고방대한라이브러리를제공함 Windows 의모든기능을가장강력하고자연스럽게사용가능함 Delphi 나 Visual Basic 같은마우스로하는디자인적요소는거의미비한반면프로그래밍의코딩, 디버깅, 프로젝트관리면에서탁월한기능을발휘함 비주얼모델러라는강력한객체지향설계도구를포함함
Visual C++ Visual C++ 는 Windows 에서사용하기좋은언어이자강력한프로그래밍을할수있는언어임 대부분의상업적인프로그램이나복잡한작업을해야하는프로그램에많이쓰임 Visual C++ 를잘사용하기위해서는우선 C++ 에익숙해야함
객체지향 (object-oriented) 우리가주변에서볼수있는물체나논리적으로생각가능한그어떤것을의미함. 객체지향프로그래밍이란객체를중심으로하여프로그램을작성하는방법을말함 객체의상태 : 객체의현재상황과가능한모든상태임예 ) 객체 => 볼펜상태 => 상표, 남은잉크의양, 잉크의색깔 객체가할수있는일 : 볼펜이할수있는일 => 쓰기 객체의상태, 할수있는일 => 멤버변수, 속성 / 멤버함수, 메소드 (method) 등으로표현함
객체지향 (object-oriented) 외부에서알필요가없는정보는감추어하나의캡슐상태로유지하여외부에서는함부로접근하거나변경등이불가능함 외부에서는하나의작업처럼보이지만내부에서는각기다른방법으로구현되는것임 예 ) +' 의경우숫자계산 => 두수를더하는작업문자계산 => 주어진문자를결합하는작업검색 => 논리적 AND 의미
객체지향 (object-oriented) 하나의클래스가정의되고, 그이후에어떤클래스라도이클래스의정의중에서하나이상의정의를물려받을수있는성질임. 따라서같은기능을하는클래스는다시작성할필요없이계속물려받아쓸수있고, 결과적으로빠른프로그램개발을보장함 [ 자동차의상속성 ]
Java 1994 년선 (SUN) 사의가전제품을제어하기위한언어개발을시작한것이그시초임가전제품을목적으로만들어져낮은시스템에서도운영이가능하도록설계됨운영체제나중앙처리장치에관계없이모든플랫폼에서사용가능함자바와플랫폼사이에자바가상머신이인터페이스역할을수행함 객체지향언어임 C 와 C++ 과비슷한모양 ( 문법 ) 을가져사용이쉬움객체지향의다형성을위해실행시간에함수호출을결정할수있음동적이고편리한메모리관리를지원하며자동으로메모리를수거하여 (garbage collection) 효율성을높임 [JAVA 의로고 ]
Java Java 는최근에많은사람들이사용하는매우활동성있는언어인데, C 나 C++ 에익숙하지않은사람들은상당한정도의노력을기울여야함 [ 외부에서 Java 프로그램으로전달된정보를출력하는프로그램 ]
UNIX 기반의언어 C 언어의 UNIX 확장판임 C 언어를사용한 UNIX 의데이터베이스관리에많이사용함 UNIX 의가장중심적언어 UNIX 자체를 C 언어로제작하여 UNIX 프로그래밍에필수임 여러가지 Shell 명령어를순차적으로수행함 Shell : 쉘은 UNIX 에서대화형사용자인터페이스를부르는용어로, 사용자가입력하는명령어를이해하고, 실행하는역할을수행함
Linux 기반의언어 인터넷의등장과함께인기를누린스크립트언어임초보자도배우기쉽고객체지향적인특징을지원함 가장최근에등장한강력하고배우기쉬운언어임쉬운문자열제어와객체지향적특성을제공함 C 언어와연계성을제공하며, Windows 에서도사용가능함 인터넷에서사용하는대표적인스크립트언어임컴퓨터에서실행하지않고웹서버에서실행되는대표적 Server Side Script 언어 주로 X-Window 프로그래밍에많이쓰이는스크립트계열의언어 Tk 라는 GUI TookKit 과함께 X-Window 의작은프로그램등을개발할수있는능력초보자도쉽게사용할수있으며객체지향적인특징은제공하지않음
Java Server Pages : 자바서버페이지임 HTML 내에자바코드를삽입하여웹서버에서동적으로웹페이지를생성하여웹브라우저에돌려주는언어임 서블릿 (Java Servlet) 과는달리 HTML 표준에따라작성되므로웹디자인하기가상당히편리함 Active Server Page : 액티브서버페이지임 마이크로소프트사에서개발한서버측의웹스크립트환경임 Visual Basic 에바탕을두고있어마이크로소프트데이터베이스의접근이매우편리함
Hypertext Markup Language: 하이퍼텍스트마크업언어임 SGML에서비롯된하이퍼텍스트를표기하는언어임일반적으로인터넷에서웹페이지를표시하기위해쓰임문법은 HTML 태그 (tag) 로구성됨 Extensible Markup Language : 확장가능마크업언어임 다른특수목적의마크업언어를만드는용도로권장되는다목적마크업언어임 주로다른시스템, 특히인터넷에연결된시스템들끼리데이터를쉽게주고받을수있게함
닷넷플랫폼과닷넷프레임워크 최근들어 C# 과닷넷 (.NET) 이라는새로운패러다임의프로그램환경이전개되고있음. 닷넷플랫폼은 Windows 2000 을포함하는기존의윈도우운영체제서비스와새로운 API(Application Programming Interface) 를제공하는개발프레임워크 마이크로소프트사는 2000 년 7 월에 C# 언어와함께닷넷플랫폼을발표함. 닷넷플랫폼은마이크로소프트사의수많은신기술을포함하여활용하고있으며, 마이크로소프트사는닷넷플랫폼의개발과정착을위해거액의연구비를집중적으로투입하고있음
닷넷플랫폼과닷넷프레임워크 [ 닷넷프레임워크 ]
C# C# 은닷넷환경의응용프로그램을개발하기위한프로그래밍언어로서간결성, 안전성, 현대성, 객체지향, 인터넷중심이라는목표에맞춰설계됨 C# 은 2000 년도에마이크로소프트사의엔지니어인앤더스헤일스버그와스콧윌타무스를중심으로개발되었는데, C, C++, Java, Visual Basic 등의언어로부터많은영향을받았음 C# 은 C 의빠른속도, C++ 의객체지향구조, Java 의보안, Visual Basic 의빠른개발시간등기존언어의장점들을바탕으로설계되었고, 컴포넌트기반의다층웹응용프로그램개발에매우유용한언어로여겨지고있음
C# [Visual C#.NET 의한화면 ]