1. 프로그래밍 언어 소개
의사 소통하는 방식 ↔ 생각하는 방법 (언어) ↔ (사고)가 서로 영향을 줌
1. 프로그래밍 언어란 무엇인가
프로그래밍 언어의 정의
프로그래밍 언어는 기계가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 기술하는 표현 체계이다
- 컴퓨터와 의사 소통하기 위한 표현법 (약간 부적절한 면 존재)
- 1940년대 이전: 프로그래밍이 전선 연결 (프로그래밍 언어 ?)
- 1940년대 Von Neumann 방식(Program stored computer)
- CPU가 처리할 작업을 명령 코드로 작성
- 프로그래밍 개념 시작
- 어셈블리 언어 탄생 : symbol 사용
- 기계종속적
- 저급 수준의 추상화 (고급 언어가 나오게 되는 계기)
- 읽고 쓰기 어려움
- 고급 수준의 추상화가 필요로 함 ⇒ 고급 언어 등장
- 프로그램 간략, 이해 용이, 이식성 증가
- 배정, 반복, 선택 개념
- 계산 (computation) 이란?
- 수학적으로 형식적인 정의 가능(튜링 머신등)
- 컴퓨터가 처리할 수 있는 작업을 의미 (일반적)
- 기계가 읽을 수 있는 (machine-readable)
- 효과적인 번역 가능 ( 간결한 구조의 언어 요구)
- 단순 번역 알고리즘 존재
- 제한된 시간 내에 번역 가능 (프로그램 크기 단순 비례 이상적 임)
- 문맥 자유 언어 (context free language) → 위 조건들 만족
- 사람이 읽을 수 있는 (human-readable)
- 기계 독립적인 추상성 제공 → 자연어 형태
- 프로그램 대형화 → 판독성은 새로운 국면 지역성 요구
- 프로그래밍 언어 → 소프트웨어 개발 환경에 포함되는 경향
3. 프로그래밍 언어에서의 추상화
추상화 (abstraction) 의 개념
- 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼
- 사할 수 있는 방법을 지원하는 것
- 필수적인 속성만으로 주어진 것을 묘사하므로 나머지 속성들은 추상화, 은닉, 또는 삭제됨
추상화의 범주
- 자료 추상화
- 문자열, 수, 트리와 같은 계산 될 자료의 특성을 추상화
- 제어 추상화 (알고리즘 추상화)
- 실행 순서를 제어하는 특성을 추상화
- 제어 추상화의 예 : 반복문, 조건문, 프로시저 호출 등
추상화에 포함된 정보의 양에 따른 분류
- 기본 추상화 (basic abstraction)
- 가장 지역적인 기계정보에 대한 추상화
- 구조 추상화 (structured abstraction)
- 보다 전역적인 정보인 프로그램의 구조에 대한 추상화
- 단위 추상화 (unit abstraction)
- 단위 프로그램 전체에 대한 정보의 추상화
- 자료 추상화
- 기본 추상화 (basic abstraction)
- 컴퓨터 내부 자료 표현 → 추상화
- 예) 기억 장치의 장소 → 변수로 추상화 int x; float y;
- 자료의 값 (2진수) → 수를 십진 자료형으로 추상화 x = 5.7;
- 구조 추상화 (structured abstraction)
- 관련된 자료의 집합을 추상화
- 전형적인 구조 추상화 예 : 배열, 레코드 (구조형 자료)
- 구조형에 새 이름 부여 기능(새 차원의 추상화)
- type student = record …..
- 단위 추상화 (unit abstraction)
- 자료의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부사항에 대한 접근을 제한하는 도구
- 자료형의 구조 변경이 프로그램 전체에 영향을 주지 않으며, 자료 구조의 세부사항 무시 함
- 자료 캡슐화 또는 자료 추상화 (10장)
- 예 : C++, Java의 class, Modula-2의 module, Ada의 package
- 자료의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부사항에 대한 접근을 제한하는 도구
- 기본 추상화 (basic abstraction)
- 제어 추상화
- 기본 추상화
- 구조 추상화
- (검사 값에 따라) 분할된 명령어 그룹 수행
-
예1 : 택일문
if 문과 같은 택일문, Pascal의 case문, C언어의 switch문 등
-
예2 : 구조화 반복문
for, repeat, while, loop-exit
- 예3 : 강력한 구조 제어 : 부프로그램 (프로시저 추상화) procedure def, procedure invocation (새 활성화 환경)
- 단위 추상화
- 프로시저의 집합을 추상화 (관련된 프로시저 그룹 추상화
- 자료 관리 프로그램에서 평균, 표준편차 등 통계 작업 프로그램들을 모아서 하나의 단위 프로그램화
- 지원 도구 (library 형태 지원)
- Ada의 package, Modula-2의 module, C++와 Java의 class
- 기타 제어 추상화
- 병행 프로그래밍 (동기화, 통신 개념 지원) : coroutine, task, process
추상화란 : readability 증가 목적 (가독성 향상)
4. 계산 전형
-
명령형 언어(imperative L.) 또는 절차적 언어(procedural L.)
순서를 명확한 계산법으로 쉽게 표현이 가능한 문제 지향 언어
- 특징
- 명령의 순차적 실행
- 변수 사용
- 배정문 사용
- 문제점
- 폰 노이만 병목현상 발생(순차 실행)
⇒ 프로그램 메모리인 롬과 데이터 메모리인 램 사이의 공유 버스 즉, CPU와 메모리간 데이터 전송율의 한계로 인해 발생하는 병목현상 또는 기억장소의 지연 현상을 이른다
- 많은 자료의 동시 계산, 비결정적 계산, 순서에 의존하지 않는 계산 등에 비효율적
- 대표적 예 : C, Ada, Pascal, Fortran, Basic 등 대부분 언어
- 비 절차적 언어 : 함수형 언어, 논리형 언어
- 특징
-
함수형 언어(functional L.) 또는 적용형 언어(applicative L.)
실행 순서에 관계없이 처리 내용을 기술할 수 있는 프로그램
- 함수의 평가와 함수 적용을 기본으로 함
- 특징
- 함수의 평가 및 호출 방법을 제공
- 변수, 배정문이 없음
- 반복 연산은 재귀적 함수 이론에 의해 기술됨
- 객체 지향 언어 (object-oriented L.)
- 객체에 기반을 둔 언어 객체란 상태를 의미하는 기억 장소와 상태를 변경할 수 있는 연산의 집합
- 객체는 클래스로 그룹화
- 클래스 선언
- C나 Pascal에서 구조형 자료를 선언하는 방법과 유사
- 클래스의 인스턴스
- 선언된 객체의 실제 예
- 객체 지향의 방법을 처음 소개한 언어 : Simula 67
5. 언어 정의
- 프로그래밍 언어의 정확한 형식 정의가 필요한 이유
- 언어의 구조와 의미의 정확한 기술 없이는 프로그래밍이 불가능
- 모호함 없는 언어 구현
- 프로그래밍 과정에서 프로그램이 어떻게 동작할 것인가에 대한 문
- 제 발생 시 유용
- 프로그램 설계 과정을 규격화하는 방법
- 언어 정의의 범주 형식 정의에는 구문(syntax) 정의와 의미(semantic) 정의가 있음
- 언어 구문 정의
- 언어 구문에 관한 정의는 형식화가 많이 되어 있음
- 대부분의 언어가 문맥 자유 문법을 만족하며 BNF로 정의
- 예 : Pascal의 if 문
::= if <조건> then <문> [ else <문> ] 문>문>조건> - 언어 의미 정의
- 의미는 프로그램의 실행 시 어떤 일이 발생하는가를 기술
- 예 : if 문에서 조건문이 거짓으로 판명 되었을 때, else 문 이하가 존재하지 않을 경우
- 언어 의미론은 형식화 미비
- 의미론의 형식적 정의 방법 : 디노테이셔녈 (denotational) 의미론, 액시어매틱 (axiomatic) 의미론
- 의미는 프로그램의 실행 시 어떤 일이 발생하는가를 기술
- 어노테이션 -
댓글남기기