일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 배열
- 리버싱
- 리틀엔디언
- 레나 리버싱
- 배열 정렬
- c언어 알고리즘
- 암호화폐
- UDP daytime
- 네트워크 관리사 2급 필기
- 안드로이드 백도어
- 구조체 함수
- C언어
- sa 계정 비밀번호 변경
- 배열 탐색
- 오버워치
- 재밌는 모바일게임
- 마인크래프트
- react native
- 구조체
- 1.9.2
- 알고리즘
- 프로그래밍 언어론
- abex crack me 2번 문제풀이
- abex crack me 5번문제
- 프론트엔드 개발자
- abex crack me 1번
- 메이플스토리 M 사전예약
- Reverse Me
- 빅엔디언
- 덧셈
- Today
- Total
Gyejoong's Information
프로그래밍 언어론 - 1. 프로그래밍 언어의 소개 본문
1. 프로그래밍 언어란 무엇인가
* 프로그래밍 언어
- 컴퓨터에 프로그래머의 의사를 전달하는 방법
- 프로그램을 작성하는 방식
- 프로그래머가 컴퓨터를 추상화 하는 방법
- 컴퓨터가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 서술하는 표기체계
* 프로그램
- 컴퓨터와 사람이 동시에 이해할 수 있는 형식으로 작성된 글
1-1 프로그래밍 언어에서의 추상화
* 추상화(abstraction)
- 속성들의 특징적인 일부분만을 가지고 주어진 작업이나 객체를 표현하고, 그들의 공통점을 추출하여 표현하는 방법
* 자료추상화
- 문자열, 수, 탐색 트리와 같은 계산의 주체가 되는 자료의 특성을 추상화 하는 것
* 제어추상화
- 알고리즘 추상화
- 현 상황에 따라 실행 순서의 수정을 위한 제어의 특성을 추상화 하는 것
* 기본적 추상화(basic abstraction)
- 가장 국지적인 기계 정보를 수집한 추상화
* 구조적 추상화(structured abstraction)
- 프로그램의 구조에 대한 보다 전역적인 정보에 관한 추상화
* 단위 추상화(unit abstraction)
- 단위 프로그램 전체 정보에 관한 추상화
1-2 계산 전형
* 명령형 언어(imperative language)
- 절차 언어(procedural language)
- 순차적인 명령의 수행을 기본개념으로 하는 언어
* 함수형 언어
- 함수 개념에 기반을 둔 언어
- 계산 기술이 함수의 평가, 즉 알려진 값을 함수에 적용하는 것에 기반
- 적용형 언어(application language)
* 논리형 언어
- 기호논리학에 기반을 둔 언어
- 계산 내용만 선언하듯이 기술
- 선언적 언어(declarative language)
* 객체지향 언어
- 객체에 기반을 두고 있는언어
1-3 언어 정의
* 구문론(syntax)
- 형식화가 많이 되어 있는 부분
- 언어의 표면적인 구조만을 정의
- 대부분의 언어가 문맥자유(context free) 문법 사용
* 토큰(token)
- 프로그래밍 언어의 어휘 구조
* 의미론(semantics)
- 프로그램 실행 시 어떠한 일이 일어나는가를 기술
1.2 프로그래밍 언어란 무엇인가
1.2-1 디지털 컴퓨터 이전의 언어
* 찰스 배비지(Charles Babbage : 1792~1871)
- 수치계산을 처리하기 위해 차분 엔진과 분석 엔진 설계
- 분석 엔진은 오늘날의 컴퓨터와 구조가 매우 유사
* 오거스타(Ada Agusta)
- 세계 최초의 프로그래머로 인식
1.2-2 1950년대 : 최초의 프로그래밍 언어
* 저급언어
- 기계의존적인 이진수 개념이거나 자연언어와 차이가 많은 언어
- 사람이 이해하기보다는 컴퓨터의 내부구조에 의존적인 언어
* Fortan(Formula translation)
- 최초의 고급언어
- 응용과학 분야에서 우위를 차지하고 있음
* Cobol(Common Business-Oriented Language)
- 미 국방성에서 해군 그레이스 호퍼가 이끈 팀에 의해 만들어짐
- 은행이나 대규모 회사에서 서류 처리와 같은 사무처리를 위해 재빨리 채틱됨
* Alglo 60(Algorithmic Lanugauage 60)
- 알고리즘을 기술하기 위한 일반적인 표현 언어
* LISP(List Processor)
- 일반적인 리스트 구조와 함수의 응용을 기본으로 한 언어
* APL(Automatic Programming Language)
- 배열과 행렬을 포함하는 수학적 연산을 쉽게 프로그램이 하기 위한 언어
- IBM에서 제작
1.2-3 1960년대 : 다양한 프로그래밍 언어의 출현
* Simula 67
- 노르웨이 컴퓨터 센터에서 뉘고르(Kriten Nygaard)와 달(Ole-John Dahl)에 의해 탄생
- 시뮬레이션을 위해 디자인 됨
- 객체지향언어의 기본이 되는 클래스 개념 도입
* Basic(Beginners All-purpose Symbolic Instruction Code)
- 다트머스(Dartmouth) 대학교의 존 케머니(John Kemeny)와 토머스 커츠(Thomas Kurtz)가 개발
- 새로운 시분할 시스템을 위한 간단한 언어로 개발
1.2.-4 1970년대 : 간결성, 추상화 그리고 효율성
* C언어
- 벨연구소의 데니스 리치(Dennis Ritchie)에 의해 고안
- 컴퓨터 구조에 대한 접근을 제공해 주는 개념
- 중급 프로그래밍 언어로 부르기도 함
* Pascal
- Algol의 개념 도입
- 복잡하거나 교육적 목적에 부합되지 않는 주요 기능은 생략
- 교육용으로 뿐만 아니라 상업적으로도 높은 기능성 갖춤
1.2-5 1980년대 : 통합과 새로운 방향
* Ada
- 1980년대를 대표할 수 있는 중요한 프로그래밍 언어
- 미국 국방성의 주도로 탄생
- J. 이치바이어(J. Ichbiah)가 이끈 개발자들은 자료추상화, 타입 메커니즘(package), 병행처리(task)와 예외 처리기 등의 특징을 처음 도입
* Modual-2
- 니클라우스 워스(Niklaus Wirth)가 개발
- 운영체제를 구축하기 위해 고안된 Modula라는 언어를 기본으로 한 언어
- 추상화와 부분적 동시처리 개념과 내장형 시스템 프로그래밍을 목적으로 하드웨어에 쉽게 접근할 수 있는 기능도 추가한 다목적 언어
* ML(Meta Language)
- 에든버러(EdinBurgh) 대학교의 로빈 밀너(Robin Milner)가 개발
- 문법과 타입 검사가 훨씬 유연함
* Prolog
- A. 콜메로에르(A. Colmerauer)가 이끄는 그룹에 의해 마르세유에서 개발
- 인공지능 분야에서 많이 쓰이고 있고 모범적인 언어로 인식됨
* Smalltalk
- 제톡스사의 팰르앨로 연구소에서 앨런 케이(Alan Kay), 댄 인갈스(Dan Ingalls)와 다른 연구자에 의해 개발
- 객체지향 접근 방식으로 일관된 객체지향 언어의 순수한 모범 케이스
* C++
- C언어를 확장한 개념
- 비야네 스트롭스트룹(Bjarne Strousstrup)이 개발
1.2-6 1990년대 : World Wide Web 프로그래밍(Java)
* Java
- 1990년대 가장 특징적인 프로그래밍 언어
- 월드 와이드 웹 프로그래밍을 쉽게 구현가능
- 자바가상기계(JVM) 위에서 동작하기 때문에 다양한 응용 분야에 적합
* Java 애플릿
- 웹 클라이언트에서 실행될 수 있는 작은 프로그램
1.3 프로그래밍 언어의 설계 기준
1.3-1 효율성
* 최적화
- 목적 코드의 효율성
- 번역기가 효율적인 실행 코드를 생성할 수 있도록 언어설계가 이루어지는 것
* 번역의 효율성
- 윈시 코드가 효율적으로 번역되도록 허가하는지, 즉 알맞은 크기의 번역기로 빠르게 번역할 수 있는지에 대한 것
* 신뢰성
- 프로그램 실행시에 예상치 못한 행동을 하거나 결함을 발생시키는 방향으로 행동하지 못하도록 하는 것
* 프로그래밍 효율성
- 얼마나 쉽고 빠르게 프로그램을 작성할 수 있는가 하는 것
- 프로그램의 작성력
1.3-2 일반성, 직교성, 획일성
* 일반성
- 특별한 경우를 피하거나 밀접한 관련이 있는 여러 개념을 일반적인 하나의 개념으로 결합한 것을 의미
* 직교성
- 같은 언어의 구성요소가 문맥이 다르다고 다르게 행동해서는 안 된다는 것을 의미
* 획일성
- 의미적으로 형식적으로 유사한 것들은 그 유사성을 프로그래밍 언어 내에서 일관되게 유지되어야 함을 의미
1.3-3 표현력
* 표현력
- 언어가 복잡한 과정이나 구조를 표현하는 데 용이함을 의미
1.3-4 정확성
* 정확성
- 프로그래밍 언어의 정확한 정의, 즉 포로그래밍 언어의 행위를 예측할 수 있는 정의를 기본적으로 필요로 하는 것을 의미
1.3-5 컴퓨터 독립성
* 독립성
- 하드웨어나 운영체제 측면의 컴퓨터에 대한 독립적인 프로그래밍 언어 정의를 통하여 보장될 수 있는 것을 의미
1.3-6 안전성
* 안정성(security)
- 프로그래밍 오류를 줄이고 오류를 쉽게 발견하기 위한 것
- 프로그래밍 언어의 자료형, 형 검사, 변수선언 등
1.3-7 확장성
* 확장성
- 프로그래머에게 언어의 특징을 더 추가할 수 있도록 하자는 것
1.3-8 부분성
* 부분성
- 프로그래머가 언어에 대한 적은 지식과 언어구조에 대한 일부의 이해만 있어도 효과적으로 프로그램을 작성할 수 있도록 해야 하는 것을 의미
'Study' 카테고리의 다른 글
[깃허브]1. 깃허브 저장소 만들기 (3) | 2017.07.02 |
---|---|
프로그래밍 언어론 - 3. 변수, 바인딩, 식 및 제어문 (0) | 2017.05.22 |
프로그래밍 언어론 - 2. 프로그래밍 언어의 구조 및 해석 (0) | 2017.05.22 |