DEVELOP
article thumbnail

본 게시물은 컴퓨터공학개론 과목의 강의영상과 강의자료를 바탕으로 작성한 학습용 게시물입니다.


역사적 고찰 

(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)
profile

DEVELOP

@JUNGY00N