본 게시물은 컴퓨터공학개론 과목의 강의영상과 강의자료를 바탕으로 작성한 학습용 게시물입니다.
역사적 고찰
(p.294)
- 초창기 프로그래밍 언어 : 기계어, 어셈블리 언어
- 기계 독립적 언어 (human friendly)
- 고급 프로그래밍 언어들은 더욱 강력한 추상화 요소들 포함
# 1세대 언어 : 기계어
- 숫자로 표현된 명령코드와 피연산자들 ㅣVole
# 2세대 언어 : 어셈블리 언어
- 기계 명령을 표현하기 위한 기호 체계
- 명령 코드는 기호식 이름으로 표현
- 기계 명령과 어셈블리 명령 사이에는 일대일 대응 관계가 존재
- 어셈블러에 의해 기계어로 변환됨
# 3세대 언어
- 고급 프리미티브를 사용 ( 슈도코드와 유사 )
- 대체로 기계 독립적
- 각 프리미티브는 여러 개의 기계어 명령에 대응
- 컴파일러에 의해 기계어로 변환됨
- ex) FORTRAN, COBOL
# 프로그래밍 패러다임
- 명령형 / 절차형 패러다임
: 알고리즘을 일련의 명령으로 표현
- ex) FORTRAN, COBAL, BASIC, C, PASCAL - 선언형 패러다임
: 미리 정의되어 있는 범용 문제 해결 알고리즘 적용
- ex) SQL - 함수형 패러다임
: 프로그램을 함수로 간주, 각 계산의 결과를 바로 다음 계산으로 연결하는 하나의 문장으로 구성 - 객체지향 패러다임
- 객체 단위들의 집합으로 간주
- 각 객체는 메쏘드 포함
- 객체의 성질을 기술한 클래스
- 특정 클래스를 사용해 구축된 인스턴스
전통적 프로그래밍 개념
(p.304)
* 고급 프로그래밍 언어들(C, C++, Java, C# 등)은 다양한 종류의 추상화 요소들 포함
- 단순한 요소 : 상수, 리터럴 변수
- 중간 요소 : 문장, 식, 제어구조
- 복잡한 요소 : 프로그램 단위, 모듈, 라이브러리
* 문장의 집합으로 구성
- 선언문 : 프로그램에서 나중에 사용할 용어들을 정의
- 명령문 : 알고리즘의 단계들을 기술
- 주석 : 프로그램 수행 기능을 사람이 이해하기 쉬운 형식으로 설명
- C : 3세대 명령형 언어
- C++ : C의 확장된 객체지향 언어
- Java, C# : C++에 파생된 객체지향 언어
# 선언문 관련 개념들
- 변수
- 데이터 타입 : 정수, 실수, 문자, 부울
- 프리미티브 데이터 타입 : int, char - 데이터 구조
- 동질성 배열 / 이질성 배열 : 구조체 - 상수, 리터럴
# 명령문 관련 개념들
- 배정문 : 변수에 식의 값을 배정하도록 요청
- 연산자 우선순위
- 제어문 : 프로그램의 실행 순서를 변경
프로시저 단위
(p.319)
# 프로시저 단위
- 프로그램 : 다른 프로그램 단위에서 추상적 도구로 사용될 수 있으며 어떤 작업을 수행하는 명령들의 모임
- 부프로그램, 서브루틴, 프로시저, 메쏘드, 함수
- 프로그램 단위는 헤더로 시작
- 지역 변수 / 전역 변수 의 참조 범위
- 형식 매개변수 / 실질 매개변수
- pass-by-value : 값에 의한 전달 / pass-by-value : 참조에 의한 저날
- 함수는 함수값을 호출 프로그램 단위에 실행 결과로 전달
언어의 구현
(p.328)
# 번역 : 소스 프로그램 → 목적 프로그램
- 어휘 분석기 : 토큰을 이루는 기호 그룹을 식별
- 구문 분석기 : 토큰들을 문장으로 묶으며, 이때 구문 다이어그램을 사용해 구문 분석 트리 생성
- 코드 생성기 : 구문 분석기가 인식한 문장을 구현하기 위해 기계어 명령들을 생성하는 과정
# 어휘분석
- 소스 프로그램에서 하나의 개체를 표현하는 기호 열을 인식하는 과정
- 기호그룹의 식별, 숫자, 단어, 연산자 등으로 분류
- 구문분석기의 입력을 제공
- 토큰 : 각 단위와 분류코드의 꾸러미
객체지향 프로그래밍
(p.337)
- 객체 : 데이터와 프로시저를 포함하는 능동적 프로그램 단위
- 클래스 : 객체 구성에 사용되는 틀
- 객체는 클래스의 인스턴스
# 객체의 구성요소
- 인스턴스 변수 : 객체 내부의 변수
- 메서드 : 객체 내부의 프로시저
- 생성자 : 객체가 처음 생성될 때 객체의 초기화에 사용되는 특별한 메서드
# 객체의 무결성
- 캡슐화 : 객체의 내부 구성요소에 대한 접근을 제한하기 위한 수단
- 전용 속성 / 공용 속성
- 상속 : 새로운 클래스가 이미 정의되어 있는 클래스를 사용하여 정의할 수 있게 해준다.
- 다형성 : 메서드 호출이 적용 대상 객체에 따라 달리 해석
- 오버로딩 : 인자의 타입의 구분으로 적절한 메소드 호출
- 오버라이딩 : 상위 클래스의 메소드를 변형해 사용
병행 활동 프로그래밍
(p. 345)
# 병렬처리 / 병행처리
- 여러 프로세스의 동시 실행
- 진정한 병행 처리는 다수의 CPU를 필요로함
- 한개의 CPU에서 시분할 방식으로 모방 가능
# 데이터에 대한 접근 제어
- 상호 배제 : 한 번에 한 프로세스만이 데이터에 접근할 수 있도록 보장하기 위한 방법
- 모니터 : 자신에 대한 접근 제어 기능을 갖춘 데이터 항목
선언형 프로그래밍
(p.349)
# 논리적 추론
- 분해 : 둘 이상의 명제들을 결합하여 연역적 추론 결과에 해당하는 새로운 명제 생성
- (P OR Q) AND (R OR ~Q)는 (P OR R)
- 분해문 : 분해에 의해 생성된 새로운 명제
- 절 형태 : 기초 요소들을 부울 연산자 OR로 결합한 형식의 명제 - 단일화 : 변수에 값을 배정하여 두 명제가 호환성을 갖게 만드는 과정
- 동등한 명제
- P→Q , Q OR ~P - 모순적 : 명제 집합 안의 모든 명제가 동시에 참이 될 수 없을 경우
# Prolog : 반복적 분해에 기초한 문제 해결 알고리즘을 이요하는 선언형 프로그래밍 언어
- 사실 : 사실 확립을 위한 Prolog 문장
- 하나의 술어로 이루어진다
- 형식 : 술어 식별자
- ex) parent(bill,mary) - 규칙 : 일반적 규칙을 확립하기 위한 Prolog 문장
- 형식 : 결론 :- 전제조건.
- ex) wise(x) :- old(x)
'LECTURE > [2021-1] 컴퓨터공학개론' 카테고리의 다른 글
[컴퓨터공학개론] 8. 데이터 추상화 (0) | 2021.06.14 |
---|---|
[컴퓨터공학개론] 7. 소프트웨어 공학 (0) | 2021.06.14 |
[컴퓨터공학개론] 5. 알고리즘 (Algorithms) (0) | 2021.06.13 |
[컴퓨터공학개론] 4. 네트워킹과 인터넷 ( Networking and the Internet ) (0) | 2021.06.12 |