01 프로그래밍 언어의 언어별 특성
프로그래밍 언어는 컴퓨터 시스템의 역사와 함께함
프로그래밍 언어가 개발된 시대적인 패러다임에 따라 유사한 특성을 가짐
1) 프로그래밍 언어의 발전 과정
1960 이전 | 1960년대 | 1970년대 | 1980년대 | 1990년대 이후 |
ASSEMBLY | COBOL | PASCAL | ADA | RUBY |
FORTRAN | PL/I | C | C++ | JAVA |
LISP | BASIC | SMALLTALK | PYTHON | JS |
PROLOG | PROLOG | C# |
02 프로그래밍 언어별 특성
1) FORTRAN
1954년에 초기 버전이 개발된 언어
시스템 의존적
프로그램 작성을 위해 컴퓨터 시스템 관련 지식이 많이 필요하다
1977년 FORTRAN77이 등장하였으나 그 이후에 등장한 언어와 비교하여 자료구조가 제한적
재귀함수 구조체 포인터 등 없었음 -> FORTRAN 90에 포함됨
대문자로만 작성됨
2) COBOL
1960년에 미국 국방성이 개발
단순한 입출력 구현에도 많은 형식적인 문장이 필요함
비교적 프로그램 크기가 크고 구문이 복잡함
순차적 방식의 언어 - 웹 응용 프로그램과 쉽게 통합할 수 있다
자료구조의 선언부분과 프로그램의 실행부분을 분리함
대문자로만 작성됨
3)PASCAL
1971년 개발되어 1980년대 말까지 많이 쓰인 언어이다
잘 짜인 구조와 간결성으로 인해 프로그래밍 언어로써 성공
분리 컴파일과 문자열의 적절한 처리를 제공하지 못함
사용자 정의 추상화 기능은 제공하나 정보 은닉 기능이 없어 현대의 프로그래밍 기법을 적용하기에는 다소 부족함
4) C언어
1972년에 개발됨
UNIX 운영체제 구현에 사용되는 언어
범용 언어로 개발되었으나 문법의 간결성, 효율적 실행, 효과적인 포인터 타입 제공 -> 가장 많이 사용되는 시스템 프로그래밍 언어가 됨
5) C++언어
C언어를 발전시킨 언어
클래스, 상속 등을 제공하는 객체지향 프로그래밍 언어
대형 프로젝트 수행 시 모듈별 분리가 가능하여 개발과 유지 관리에 적합
6) JAVA
C++에비해 단순하고 분산 환경 및 보안성을 지원함
JAVA언어는 컴파일을 거쳐야 하며, 컴파일을 통해 생성된 class하일을 가상 머신을 통해 실행하여야 한다
7) JS
1995년에 개발된 객체지향 스크립트 언어
웹페이지 동작을 구현
빠른시간에 코드를 완성할 수 있고 확장성이 좋으며 배우기 쉽다는 장점이 있다
보안이나 성능이 다른 언어에 비하여 부족하다는 단점이 있다.
8) PERL
텍스트 처리에 주안점을 두고 개발된 인터프리터 언어
CGI용으로도 많이 사용됨
변수를 명시적으로 선언할 필요가 없고 모든 변수가 지정되지 않았을 경우에는 기본 초기값을 가짐
인터프리터 언어, 객체지향 언어, 스크립트 언어
9) PYTHON
배우기 쉬움
이식성이 좋음
-> 최근 트렌드와 잘 맞는다
다양한 함수들도 많이 제공되어 스타트업과 글로벌 기업에서도 많이 사용한다
인터프리터 언어, 객체지향 언어, 스크립트 언어
10) C#
2000년에 .NET환경에 맞춰 설계된 언어
C 와 C++의 발전된 형태
VISUALBASIC과같이 사용자 인터페이스를 쉽게 만드는 컴포넌트 기능을 제공
.NET환경에서 실행되기 때문에 .NET환경이설치되어야 하고 C#컴파일러를 필요로 함
11) GOLANG = GO
2009년 구글에서 만든 언어
C언어와 직접적인 연관을 가짐
내장 라이브러리가 많이 지원됨
C언어의 문법과 유사하고 if, for,switch를 포함한 제어 구조를 가짐
하드웨어 사양이 낮더라도 빠른 컴파일이 가능함
12) DART
JS와 JAVA의 영향을 받아 개발되었으며 객체지향적인 언어이다
백그라운드에서 작동한다는 점에서 JS와 차이가 있다
JS와 유사하나 단순화됨
별도의 라이브러리 설치 없이 HTML페이지를 수정하라 수 있다는 특징을 가진다
13) CEYLON
JAVA에 기반을 둔 언어로 모듈성을 주요 특징으로 가짐
코드를 패키지와 모듈로 정리하여 가상 머신에서 컴파일을 수행
CEYLON Herd라는 저장소에서 모듈을 발행
03 프로그래밍 언어의 유형 분류
1) 개발 편의성에 따른 분류
저급 언어 : 기계가 이해할 수 있도록 만들어진 언어 = 기계어, 어셈블리어
고급 언어 : 개발자가 소스코드를 작성할 때 쉽게 이해할 수 있도록 작성된 언어 = C, C++, JAVA
2) 실행하는 방식에 따른 분류
명령형 언어 : (절차형 언어)컴퓨터에 저장된 명령어들이 순차적으로 실행되는 프로그래밍 방식 = FORTRAN,COBOL,PASCAL,C
함수형 언어 : 수학적 수식과 같은 함수들로 프로그램을 구성하여 호출하는 방식 = LISP
논리형 언어 : 규칙에 대한 활성화 조건이 만족되면 연관된 규칙이 실행되는 구조, 추론과 관계 규칙에 의해 원하는 결과를 얻어내는 방식 = PROLOG
객체지향형 언어 : 객체 간의 메시지 통신을 이용하여 프로그래밍하는 방식 = JAVA , C++
3) 구현 기법에 따른 분류
컴파일 방식의 언어 :
고급 언어를 기계어로 번역하는 방식의 언어
FORTRAN, PASCAL, C, C++
실행에 필요한 정보가 컴파일 시간에 계산되어 실행속도가 높다
인터프리터 방식의 언어 :
고급 언어 명령문을 하나씩 번역하고 실행하는 방식의 언어
BASIC, PROLOG, LISP, SNOBOL
프로그램 실행 시에 계산됨
혼합형 언어 :
고급 언어를 컴파일하여 중간 언어로 변환한 후, 인터프리터에 의해 번역을 실행하는 방식의 언어
JAVA
04 컴파일러와 인터프리터
고급 언어로 작성된 프로그램의 경우에는 컴퓨터 시스템이 바로 이해할 수 없기 떄문에 번역을 필요로 하며, 컴파일러 또는 인터프리터를 이용해 번역을 수행한다
1) 컴파일러
FORTRAN, C등과 같은 고급 언어를 기계어로 번역하는 도구
컴파일 방식의 언어는 모두 컴파일러를 필요로 함
컴파일러는 프로그램의 한 종류로 볼 수 있음
2) 인터프리터
대화형 언어라고도 함
프로그램 문장을 하나씩 번역하고 실행할 수 있도록 하는 프로그램
컴파일 과정이 없어서 개발하는 과정에서 사용하면 유용함
인터프리터 방식의 언어는 모두 인터프리터를 필요로 함
실행 속도가 느리고 메모리 사용이 비효율적이라는 단점
05 구조적 프로그래밍
계층적인 프로그램 제어구조로 구성됨
제어 구조들은 하나의 구문으로 간주도며, 동시에 더 간단한 구문들을 결함시키는 방법으로 3가지 형태의 구조를 갖는다
1) 순차 Concatenation
구문 순서에 따라서 순서대로 수행된다
2) 선택 Selection
프로그램의 상태에 따라서 여러 구문들 중에서 하나를 수행한다
if , switch , case
3) 반복 Repetition
프로그램이 특정 상태에 도달할 때까지 구문을 반복하여 수행하거나 집합체의 각각의 원소들에 대해 어떤 구문을 반복 수행하는 것
while , repeat , for , do , until
06 객체지향 프로그래밍
1) 절차지향 프로그래밍과 객체지향 프로그래밍
절차지향 프로그래밍 : 프로그램을 순차적으로 수행시키는 방법으로 자료구조와 명령 중심으로 프로그램을 구성함
객체지향 프로그래밍 : 객체와 객체 간의 통신을 통해 프로그램이 구현되며, 객체의 속성, 메소드로 구성되는데, 절차지향에서의 모듈은 객체에 대으오디고, 변수는 솔성에 대으오디며, 함수는 메소드에 대응된다.
2) 객체지향 프로그래밍의 구성 요소
객체지향 프로그래밍은 객체, 클래스, 메시지를 이용하여 개발하는 방식으로, 각 구성 요소에 대한 내용은 다음과 같다
객체
객체는 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈이다
개체, 속성, 메소드로 구성된 클래스의 인스턴스를 의미한다
객체는 식별성 = 독립성을 가진다
객체와 객체는 상호 연관성에 의한 관계가 형성됨
객체마다 일정한 기억 장소를 가지고 있다
객체 행위에 대하여 그 특징을 나타낼 수 있다
클래스
클래스는 객체지향 프로그래밍에서 객체를 표현하는 추상 데이터 타입으로 객체를 생성하는 틀로 속성과 메서드를 공유하는 유사한 성질의 객체들을 하나로 그룹화한 것이다
객체는 클래스의 구성원으로 클래스 인스턴스, 객체 인스턴스라고도 한다
클래스 내부에는 해당 클래스의 객체를 위한 데이터 구조와 메소드 구현의 세부 사항을 기술한다
기존 언어에서 지원하던 사용자 정의 자료형 및 서브 프로그램의 개념을 발전시켜 JAVA, C++등에서 클래스를 통해 추상화된 자료형을 제공한다
메시지
메시지는 객체 사이의 인터페이스 수단으로 메시지를 주고받음으로써 객체 간 상호작용을 한다
수신 객체는 메시지에 나타난 연산을 수행하고 호출한 객체에게 제어를 반환하면서 반응한다
3) 객체지향 프로그래밍의 특징
캡슐화
자료와 이 자료를 처리하는 오퍼레이션이 한 틀 안에서 결합되어 객체라는 단위로 묶여서 사용되는 것이다
객체 외부에서는 객체 내부 정보를 직접 접근하거나 조작할 수 없고 외부에서 접근할 수 있도록 정의된 오퍼레이션을 통해서만 관련 데이터에 접근 가능하다
캡슐화는 클래스로 구현 가능하다
캡슐화를 통하여 정보은닉이 가능하다
추상화
현실 세계에 존재하는 것을 하나의 객체로 표현한다면 복잡해지므로, 특정 측면을 강조하여 나타내는 것이다
추상화를 통하여 실세계 상황을 간결하고 명확하게 모델링하여 구현한다
상속성
상위 클래스의 모든 특성을 하위 클래스가 이어받음으로써 이미 정의한 클래스를 재사용하고 확장할 수 있도록 지원하는 것이다
프로그램을 쉽게 확장할 수 있도록 도와주는 수단이다
다형성
여러 클래스에 같은 이름의 함수가 존재하지만 동작은 다르게 수행한다
Overriding
4) 객체의 구성 요소
객체는 현실 세계에서 개체를 데이터 속성과 메소드를 결합시킨 형태로 표현한 것을 의미한다.
개체
현실 세계에서 보이는 본질을 의미하는 것으로 표현 단위 역할을 하게 된다
정보를 나타내는 논리적 단위로 파일 시스템의 레코드에 해당한다
개체는 하나 이상의 속성을 조합하여 구성된다
속성
자료 저장소 역할을 하며, 절차지향 프로그래밍의 변수와 대응된다
동의어는 자료구조, 속성, 상태, 변수, 데이터 등이 있음
메소드
호출 단위를 의미함 절차지향 프로그래밍의 함수와 대응됨
객체에서 수행하는 기능으로 객체 안에 존재하는 포시저이다
07 스크립트 언어
컴파일하지 않고 소스코드를 바로 실행시킬 수 있는 언어를 의미한다
특징
컴파일 안함
변수타입 선언 안함
번역 과정을 거쳐서 다소 느림
종류
자바스크립트
PERL
Tcl/Tk
용도에 따른 분류
시스템에 사용 : 유닉스의 쉘 스크립트, 윈도우의 배치 스크립트 등 일괄처리 작업에 사용됨
웹 애플리케이션에 사용 : 일반적으로 빠른 성능이 필요치 않은 웹 애플리케이션을 만드는데 이용되어 왔음
서버 사이드 스크립트 : 해당 소스의 실행 결과를 확인하기 위해 웹 서버를 거쳐야 하는 스크립트
클라이언트 사이드 스크립트 : 내장된 번역기(인터넷 익스플로러 등)에 의해 실행되는 스크립트를 의미하며 서버를 거치지 않고 사용자쪽(웹 서버에서 접속한 PC)에서 처리되는 스크립트로 JavaScript,VBScript, JScript등이 있다
08 선언형 프로그래밍 언어
명령형 프로그래밍 언어는 어떤 방법으로 할 것인지에 중점을 두는 언어
선언형 프로그래밍 언어는 무엇을 할 것인지에 중점을 두는 언어
프롤로그 : 프로그래머가 어떤 방법으로 답을 계산해야 하는지를 정의하지 않고, 서로의 관계를 묻는 형태의 선언형이다
HTML : 순서대로 일어나는 사건을 처리하는 것이 아닌 선언형이다
웹 페이지는 제목, 글꼴, 본분, 그림과 같이 무엇이 나타나야 하는지를 묘사하는 것이다
1) 선언형 프로그래밍 언어의 종류
함수형 : 아스캘, 리스프
논리형 : 프롤로그
제한형 : 오즈
2) 특수 분야 언어 (DSL : Domain-Specific Language)
선언형 프로그래밍은 튻 분야 언어의 형태로 주로 사용되며, 보통 범용 언어에 내장되어 사용된다
HTML의 영역에서 웹페이지와 하이퍼 텍스트이다
특수분야 언어로 설정 파일, 스프레드 시트, 전자 메일(보낸이 받는이 헤더는 처리문을 통하여 봄) 까지도 들 수 있다
SQL은 관계형 데이터베이스 질의문의 선언형이다
XSLT는 XML 문서를 변환하는 선언형 언어이다
오답
고급 언어 프로그램의 번역 과정
원시 프로그램 -> 번역 프로그램(컴파일러)->목적 프로그램(기계어)->로더->실행 가능한 프로그램
로드 모듈 Load Module : 기억 장치의 번지를 부여하거나 기호 등을 참고하도록 함으로써 실행 가능한 형태의 프로그램이다
원시 코드 -> 컴파일러, 디코더 -> 목적 프로그램
'Others > 자격증 공부' 카테고리의 다른 글
03-01 운영체제 기초 활용하기 (0) | 2021.07.31 |
---|---|
02-03 라이브러리 활용하기 (0) | 2021.07.31 |
02-01 기본 문법 활용하기 (0) | 2021.07.29 |
02-01 프로그래밍 언어 활용 (0) | 2021.07.29 |
01-04 배치 프로그램 구현하기 (0) | 2021.07.28 |