<33B0FAB8F128B1B3BEC829284E E687770>

Similar documents
OCW_C언어 기초

3차시.ppt

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

슬라이드 1

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - PL_03-04.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

자연언어처리

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap05-제어문.pptx

C# Programming Guide - Types

PowerPoint 프레젠테이션

<C7C1B7CEB1D7B7A1B9D6BEF0BEEE2E687770>

PowerPoint Presentation

EA0015: 컴파일러

제4장 기본 의미구조 (Basic Semantics)

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

C언어 및 실습 C Language and Practice

금오공대 컴퓨터공학전공 강의자료

Infinity(∞) Strategy

PowerPoint 프레젠테이션

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

OCW_C언어 기초

Microsoft PowerPoint - additional01.ppt [호환 모드]

OCW_C언어 기초

설계란 무엇인가?

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - lec3.ppt

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - [2009] 02.pptx

JVM 메모리구조

11장 포인터

Microsoft PowerPoint - lec2.ppt

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

C 프로그램의 기본

PowerPoint Template

4장.문장

JAVA PROGRAMMING 실습 08.다형성

untitled

슬라이드 1

Microsoft PowerPoint - Chapter_04.pptx

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

17장 클래스와 메소드

02장.배열과 클래스

Microsoft PowerPoint - c2.ppt

컴파일러

C++ Programming

PowerPoint Presentation

본 강의에 들어가기 전

강의 개요

Microsoft PowerPoint - e pptx

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

프로그램카운터 (Program Counter) 명령레지스터 (Instruction Register) 누산기 (AC: Accumulator) 상태레지스터 (Status Register) PSWR(Program Status Word Register) 메모리주소레지스터 (M

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

chap x: G입력

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

슬라이드 1

1 처리능력 (Throughput) : 일정시간내에시스템이처리하는일의양 2 반환시간 (Turnaround time) : 시스템에작업을의뢰한시간부터처리가완료될때까지걸리는시간 3 사용가능도 (Availability) : 시스템을사용할필요가있을때즉시사용가능한정도 4 신뢰도

4.18.국가직 9급_전산직_컴퓨터일반_손경희_ver.1.hwp

Microsoft PowerPoint - chap-05.pptx

PowerPoint Presentation

Microsoft PowerPoint - chap06-1Array.ppt

슬라이드 1

PowerPoint Presentation

슬라이드 1

chap 5: Trees

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

2002년 2학기 자료구조

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Chapter ...

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

온라인 IT 교육최강 ( 강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

ABC 2장

PowerPoint 프레젠테이션

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

쉽게

K&R2 Reference Manual 번역본

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - chap-06.pptx

Transcription:

1. 언어의설계(1) 1. 프로그래밍언어의이해 1) 프로그래밍언어 1정의 - 프로그램을작성할수있는언어 - 프로그램을만드는도구(Tool) - 기계가이해할수있으면서사람이이해할수있는형태로컴퓨터가주어진작업을수행하도록명시하는방법 2 구분 2) 고급언어(High Level Language) - 사람중심의언어다. - 컴퓨터시스템은고급언어를직접실행할수없으므로언어번역프로그램과번역과정이필요하다. -서로다른기계와호환이쉽다. - FORTRAN, COBOL, ALGOL, PL/I, PASCAL, BASIC 등 3) 저급언어(Low Level Language) - 기계중심의언어다. - 기계코드등에대한전문적인지식이필요하다. - 프로그램밍이어렵고, 오류발생시수정도어렵다. - 다른기계와호환이어렵다. 기계어 (Machine Language) 어셈블리어 (Assembly language) 4) 응용분야별 1 범용(General Purpose) 언어 2진수 0과 1만사용하여명령어와데이터를나타내는기계중심의언어컴퓨터가직접이해할수있어실행속도가매우빠름호환성이없고전문지식이없으면사용하기힘듦 기계어를심볼(Symbol) 로대치한언어 기호를정하여명령어와데이터를기술 전문지식이필요하며호환성이떨어짐

- 여러분야에사용될목적으로개발된언어 - Pascal, C, Ada 2 인공지능(AI) 언어 - 인공지능분야의프로그램작성에사용되며, 논리연산과융통성이중시되는언어 - LISP, Prolog 3 병렬처리(Parallel) 언어 - 두개이상의비동기적상호통신을하는프로세스를실행시킬수있는언어 - Concurrent Pascal, Linda 4 페이지기술(Page Description) 언어 - 문서의형식을기술하는데사용되는언어 - PostScript, HTML 5 데이터베이스질의(Database Query) 언어 - 데이터베이스에서원하는정보를검색하기위해별도의응용프로그램을작성하지않고, 게사용할수있도록만든언어 - SQL(Structured Query Language) 5) 계산모델에의한분류 1 절차적언어(Procedural Language)// 명령형언어(Imperative Language) - 명령어를순차적으로실행한다. - 메모리의위치를나타내는변수를사용한다. - 선언문과실행문을포함한블록구조를가진다. - Fortran, Pascal, C 등 2 함수형언어 (Functional Language) - 응용형언어(Applicative Language) 라고도한다. - 수식의값은부수식의값으로결정된다. - 계산시매개변수에함수를적용하는방법을주로사용한다. - Modula-2, LISP, APL, Scheme 등 3 논리형언어 (Logic Language) - 논리학의관계식과같은형태이다. - 자연언어, 인공지능, 추론컴퓨터연구에사용된다. -Prolog등 4 객체지향언어 (Object-Oriented Language) - 객체기반, 클래스기반, 객체지향성언어로분류된다. - 객체, 클래스, 인스턴스, 메소드, 속성, 메시지등으로구성된다. - 추상화, 캡슐화, 정보은폐, 상속성, 다형성등의특징을가진다. - Simula 67, Smalltalk, C++, JAVA, Delphi 등 6) 고급언어종류및특징 1 FORTRAN - 과학기술계산용언어 - 변수와고수준의루프개념을도입한최초의고급언어 - 과학분야나엔지니어링어플리케이션에주로사용 2 ALGOL60 누구나쉽

- 수치계산, 논리연산용언어로최초의블록중심언어 - 구문정의를위해 BNF를최초로사용한언어 -PASCAL,C언어개발에영향 3 COBOL - 사무처리용언어 - 영어문장의형태로프로그램작성이쉽고이해가쉬움 4 LISP - 기호연산및리스트처리용언어 - 인공지능분야의소프트웨어를작성하기위해사용 5 PL/1 - FORTRAN, ALGOL, COBOL, LISP 등의장점들을통합하려한범용언어 - 예외상황처리와기초적인다중작업(Mulititasking) 을지원 6 SNOBOL 4 - 최초의문자열처리언어 - 어떤기계에도종속되지않는매크로언어를가짐 - 문자열대치, 복사, 치환등과같은문자열의조작을편리하게수행할수있도록여러가지기능 을제공 7 APL - 함수형언어로배열과행렬을포함하는수학적연산을쉽게프로그래밍 - 과학계산용프로그램에적합하나제어구조가없고이해하기어려움 8 ADA - 미국방성의지원하에개발된군사적목적의언어 - 실시간처리와내장시스템에적합 - 거대정보시스템, 항공우주산업등의분야에사용 9 BASIC - 대화형언어로프로그램작성에대한교육목적으로설계 - 초보자도쉽게배울수있음 -GOTO문을많이사용 -PASCAL - 교육용언어이며범용언어 -ALGOL60을모체로함 - 문법이간결하고체계적이며명백한형태로구성 10 PROGOG - 논리형언어 - 인공지능분야에사용 11 C - 구조화된시스템프로그램용언어 -ALGOL60을모체로함 - 고급언어와저급언어의특성을모두가짐 - 이식성이우수하고, 표현이간결 -UNIX운영체제개발에사용

12 C++ -C언어를개량한개량한객체지향언어 7) 객체지향언어 -객체지향언어의기본구성요소 1 객체 (Object) - 클래스를통해만들어지는실질적인변수이다. - 속성에대한정보와속성과관계되는행위가결합된형태를가진다. - 변수와메소드들로구성된다. - 객체의속성 : 식별성, 분류성, 다형성, 상속성 2 클래스 (Class) - 공통된속성과행위를갖는객체들의집합이다. - 하나이상의유사한객체(Object) 들을묶어서하나의공통된특성으로표현한다. - 각객체들이가져야될공통성을정의하고있는 Template( 형틀) 로프로그램수행시각각의인스턴스(Instance) 를생성시켜동작한다. 3 인스턴스 (Instance) - 클래스로부터객체를생성하는것을말한다. - 어떤집합에대해그집합의개별적인요소에속하는각객체를말한다. 4 메소드 (Method) - 속성값을처리하는동작부분을말한다. - 객체의외부적인활동을연산이라는전제하에서구현한다. - 기능또는함수라고도한다. 5 속성 (Attributed) - 객체를표현하거나동작을나타내기위해사용하는자료를말한다. - 한클래스내에속하는객체들이가지는자료값을단위별로정의한다. - 성질, 분류, 식별, 상태등을표현한다. 6 메시지 (Message) - 객체와클래스가정보를교환하기위한통신명령의개념이다. - 메시지는객체사이에전달되며객체는메시지에의해동작된다. - 어떤객체의메소드를호출하는것을" 그객체에게메시지를보낸다" 라고한다. - 메시지의실체는메시지를받을객체속에있는메소드의이름이다. - 메시지를전달받은객체는대응되는메소드를수행하여결과를반환한다. - 구성 : 수신객체의이름, 수신객체의메소드이름, 메시지에서필요로하는값을전달하는인수 8) 객체지향언어의특징 1 추상화 (Abstraction) - 중요특성만을추출하여모형화하고이모형을객체의속성으로표현한다. 2 캡슐화 (Encapsulation) - 객체를캡슐화하여사용자는기능(What) 만알고사용하며, 어떻게(How) 처리되는지는모르게한다. - 객체를작성할때숨겨야하는정보(Private) 와공개해야하는정보(Public) 를구분하여작성한다. - 감추어진추상적속성은정보은폐(Information Hiding) 개념으로불리며, 정의된기능을통해서 만객체를사용할수있도록구현한다. 3 정보은폐 (Information Hiding)

- 관련속성과메소드를캡슐화하고, 공개된인터페이스만외부로노출시키는방법이다. - 유지보수가쉽다. - 재사용을극대화시킬수있다. - 모듈성이극대화된다. 4 상속성 (Inheritance) - 한클래스( 파생) 가다른클래스( 기본) 에서정의된속성을그대로물려받아사용할수있는것을말한다. - 클래스간의자료와연산을공유할수있도록제공되는기법이다. - 객체지향에서소프트웨어의재사용을지원한다. 5 다형성 (Polymorphism) - 하나의인터페이스를사용하여다양한구현방법을제공하는것을말한다. - 동일한연산자나함수가피연산자나인자의종류에따라서로다르게동작한다. 9) 객채지향프로그래밍 - Simula 언어에서객체지향개념을제시하였고, Smalltalk 를통해본격적인구현이시작되었다. - 중점을절차보다데이터에둔다. - 프로그램이단순화되고, 생산성과신뢰성이높은시스템을구축할수있다. - 상속과다양성등의특성을통해재사용을지원한다. - 시스템의확장성이높다. - 정보은폐가자연스럽게된다. - 모듈화로유지보수가쉽다. - ADA95, SmallTalk, Simula, Actor, Eiffel, C++, JAVA, Delphi 등 9) 프로그래밍언어의발전과정 1 1 세대언어(1950 년대) - 기계어, 어셈블리어 -2진수를사용함 - 프로그래밍구현이힘들며, 에러가발생할경우수정하기어려움 - 하드웨어애대한정확한이해가필요함 2 2 세대언어( ~1960 년대초) - 고급언어개발의중점 - 프로그램언어개발이가장많이발달된시기 - 개발언어 : FORTRAN Ⅱ, ALGOL 60, COBOL, LISP 등. 3 3 세대언어( ~1970 년대) - 절차적언어의기초확립 - 언어번역시발생되는컴파일러의각종문제점들이해결되어기존언어의발전및수많은새로운언어가개발 - 폰노이만의프로그램내장방식적용, 절차적언어다수개발 - 개발언어 : PL/ Ⅰ, ALGOL 68, SNOBOL 4, APL, BASIC, PASCAL, C 등. 4 4 세대언어(1980 년대) - 비절차적, 고생산성언어 - 생산성을증가시켜주는언어 - 대화식환경제공 - 프로그램개발시간단축, 생산성향상, 문서화와유지보수용이 - 온라인환경에서응용개발을지원하는언어 - 종류 : MULTIPLAN, Super Calc, Lotus 1-2-3, dbase, SAS, ASF 등의데이터베이스및질의

언어, 고수준의언어 5 5 세대언어(1990 년대) - 인공지능분야 - 전문가시스템, 지식기반시스템, 자연어처리등의특징 - 인공지능분야에기반을둔언어로자연어(Natual Language) 라고도함 2. 언어의설계(2) 1. 언어의설계와구현 1) 프로그래밍언어의설계 1 좋은프로그래밍언어의조건 - 개념과구조가간단하고, 명료하며, 체계적이어야한다. - 프로그램의작성이쉬워야한다. - 실행시오류를찾아낼수있어야한다. - 작성, 번역, 실행, 운영및유지보수등의비용이적게들어야한다. - 다른언어및기종과이식성, 호환성이있어야한다. - 추상을지원할수있어야한다. 2 프로그래밍언어설계기준의변화 - 실행의효율성, 작성의용이성 - 판독성( 알고리즘을간결하고명확하게표기) - 복잡성제어( 단순성), 추상화, 논리성, 신뢰도향상 2) 컴퓨터구조와의관계 1 기본자료 - 자료 : 컴퓨터의기억장치에저장되는데이터 - 기본연산과관련되어프로그램언어가어떤형태의자료구조를제공할지결정하는데영향을미침 - 각각의컴퓨터는기본연산에직접사용될수있는기본자료형을가짐 2 기본연산 - 기계어에있는명령어와대응되는부분 - 수치연산, 메모리접근연산, 입출력연산, 순서제어연산, 조건검사연산등.. 3 순서제어 - 프로그램의실행시실행순서를결정하는것 - 프로그램상에서순서제어와관련된명령어를사용하여다음에실행될명령어를가리키고있는레지스터의값을수정하여변경 3) 자료제어 - 명령어의피연산자를지정하는방식 - 컴퓨터는피연산자를지정하기위해다양한주소지정방식을제공함 즉시주소지정방식 (Immediate Addressing) - 피연산자의실제값을명시

직접주소지정방식 (Direct Addressing) - 피연산자의기억장소위치를명시 간접주소지정방식 (Indirect Addressing) - 피연산자의기억장소위치( 주소) 를레지스터나변수같은기억장소에기록하고, 그주소를기록하고있는기억장소위치를명시 4) 기억장치관리 - 병렬처리, 멀티태스킹등에대한지원여부를컴퓨터가가진다양한기억장치관리전략에따라고려 - 프로그래밍언어설계시변수의선언방법및프로그램코드작성과관련된내용을결정할때기억장치관리전략을고려 5) 외부와의인터페이스 - 컴퓨터는외부와의상호작용을위한다양한기능과전략을가짐 - 입/ 출력제어와관련된다양한내용은컴퓨터의외부인터페이스제공방법에따라고려 6) 프로그래밍순서 7) 문제분석단계 1 해결하고자하는문제의타당성을검토하는단계이다. - 능률적인측면이나결제적인측면을고려한다. - 출력하고자하는결과를개괄적으로검토한다. 8) 입출력설계단계 / 1 입력과출력의구체적인설계를하는단계이다. - 입력데이터의종류와양 - 구체적인데이터항목과순서 - 포함된항목의누락여부 - 각항목의성격과길이의적합성 - 사용매체의특성 9) 순서도작성단계 - 약속된기호를사용하여실행순서와방법을표현하는단계이다. - 프로그램의검증과수정을용이하게한다. 10) 프로그램구현단계 1 코딩단계 : 프로그래밍언어로명령문을기술하는단계이다. 2 입력단계 : 원시프로그램을컴퓨터에수록하는단계이다. 3 모의실험 : 문법적인오류나번역과정상의오류가있는지실험하는단계이다. 4 디버깅 : 모의실험에서발견된오류( 버그) 를찾아수정하는단계이다. 11) 실행단계 - 실제데이터를입력하여결과를얻는단계이다. 12) 문서화단계 - 프로그램의운영에필요한사항을문서로정리하여기록하는단계이다.

2. 언어의구현 1) 번역(Translator) 기법 1 정의 - 어떤언어로된사용자의프로그램을다른언어로변환시키는프로그램 - 원래의프로그램에사용된언어를원시언어(Source Language) 라하고, 변환된프로그램의언어를 목적언어(Target Language) 라함 2 종류 인터프리터 (Interpreter) - 목적프로그램을생성하지않고필요할때마다기계어로번역 어셈블러 (Assembler) - 특정한컴퓨터의어셈블리어에대한번역기 - 기계어를기호화한형태이기때문에기계어로전환이용이함 컴파일러 (Compiler) - 고급언어를저급언어로일괄번역 - 목적프로그램이필요한 링커 (Linker) - 독자적으로번역된여러개의목적프로그램과프로그래멩서사용되는내장함수들을하나로모아컴퓨터에서실행가능한프로그램생성 로더 (Loader) - 로드모듈을수행하기위해메모리에적재시켜주는기능을수행 - 메모리에주어진베이스주소에관련메모리를할당할주소계산 디버거 (Debugger) - 번역된프로그램의오류를찾기위한프로그램 프리프로세서 (Preprocessor) - 전처리기( 선행처리기) - 컴파일러시작전에컴파일러에의해호출되는별개의프로그램 - 원시프로그램을기존의고수준컴파일러언어로전환 - 주석삭제, 다른프로그램파일포함, 매크로확장, 정의된상수치환등 크로스컴파일러 (Cross Compiler) - 원시프로그램을컴파일러가수행되고있는컴퓨터의기계어가아닌다른기종의알맞은기계어로번역 3 번역과정 원시프로그램 (Source Program) : 사용자가각종프로그래밍언어(Assembler, FORTRAN, PASCAL, COBOL, C 등) 로작성한프로그램을말한다. 목적프로그램 (Object Program) : 언어번역프로그램이원시프로그램을읽고기계어나기계어

에가까운형태로번역해서출력한프로그램을말한다. 실행프로그램 (Execution Program) : 로드프로그램(Load Program) 또는로드모듈(Load Module) 이라고도한다. 번역프로그램 (Compiler Program) : 컴퓨터가이해할수있는기계어로번역해서실행할수있도록만들어진프로그램을말한다. ex)assembler, Compiler 등.. 링커 (Linker) : 연계편집(Linkage Editor) 이라고도하며, 다른곳에서작성된프로그램루틴이나컴파일또는어셈블리된루틴등을모아서실행가능한하나의루틴으로연결하는프로그램을말한다. 로더 (Loader) : 기계어로번역된목적프로그램을주기억장치로옮겨주는프로그램으로할당, 연결, 재배치, 적재기능이있다. - 할당(Allocation) : 프로그램을주기억장치의빈공간에할당함 - 연결(Link) : 기호로표시된주소를실제주소값으로변환함 - 재배치(Relocation) : 종속적인모든주소를할당된주기억장치주소와일치하도록재배치 - 적재(Load) : 명령어와자료, 프로그램을기억장치에물리적으로배치 2) 컴파일러와인터프리터비교 1 컴파일기법 - 고급어로만든원시프로그램의명령문들을직접기계어로일괄번역한다. - 목적프로그램을만든다. - 번역과실행이별도로이루어진다. - 목적코드가큰기억장치를요구하지만목적프로그램은최적화코드를만들기때문에실행속도가빠르다. - 반복문이나부프로그램의호출이많은경우유리하다. - 실행의효율성을강조할경우유리하다. 2 인터프리터기법 - 고급어로만든원시프로그램의명령문들을한번에한줄씩읽어들이며번역한다. - 목적프로그램을만들지않는다. - 번역과실행이동시에이루어진다. - 한줄단위로번역이이루어지므로문법상의오류를쉽게발견할수있다. - 큰기억장치를요구하지않지만, 실행되는동안디코딩시간을많이요구하므로실행속도가느리다. - 대화형식의프로그래밍이가능하다. - 소프트웨어로시뮬레이션하는방법으로적절하다. - 사용상의융통성을고려할경우유리하다. 특징컴파일러인터프리터 목적 P/G 생성생성안함 번역단위전체번역행( 줄) 번역 프로그램크기큼작음 수행속도빠름느림

번역속도느림빠름 대표적언어 FORTRAN, COBOL, PASCAL, C, C++ BASIC, LISP, APL, Prolog, Perl 3. 가상컴퓨터 1) 가상컴퓨터 1 정의 - 물리적으로실제존재하는컴퓨터가아니라다양한목적을위해개념적으로존재하는가상의컴퓨터이다. - 실제컴퓨터처럼프로그램수행과관련된논리를가지고있지만, 하드웨어와소프트웨어가결합된물리적형태를가지지는않는다. 2 목적 인터프리터에서사용 - 인터프리터는프로그램이컴퓨터에서실행되는것과같은효과를얻기위해명령어에대한시뮬레이션수행방법으로사용하는데이때그대상으로가상컴퓨터를사용한다. 중간코드생성시사용 - 컴파일러는다양한목적을위해서원시프로그램을입력받아실행코드를생성하는중간단계에서컴퓨터의프로그램수행논리와관련된다양한내용을가진중간코드를생성하는데이중간코드를기계에비종속적으로설계하기위하여가상컴퓨터를사용한다. 기계에독립적인프로그램언어생성을위해사용 - 프로그램언어가실제컴퓨터에서수행될프로그램작성을목적으로하는이상기계에서완전히독립적인프로그램언어가존재할수없지만, 가상컴퓨터를사용하면기계에독립적인프로그램언어를설계할수있다. 2) 가상컴퓨터설계시고려사항 - 변수의크기 - 사용가능한레지스터의개수와용도 - 장소와스택의구조 - 스택의연산에사용되는레지스터와용도 - 함수호출시매개변수전달방식과스택의동작방식 -지역변수선언의처리와스택의동작방식 - 함수의변환값전달방식 -사용하는데이터정렬방식 - 지원하는주소지정방식 4. 바인딩 1) 바인딩(Binding) - 프로그램작성시 2 개의정보를연관시켜묶는다(Bind) 는의미 -속성(attribute) 을이름식별자 (, identifier) 에묶어주는것 - 어떤변수의명칭과그메모리주소, 데이터형또는실제값을연결하는것 2) 바인딩시간(Binding Time)

- 프로그램에서변수들이갖는속성이완전히결정되는시간 - 이름에속성이연결되는시간 3) 바인딩시간의종류 1 실행시간 - 바인딩이프로그램중그순간이상태에따라이루어진다. - 늦은바인딩(Late Binding) 이라고도한다. - 변수의값에바인딩하거나변수에저장장소를바인딩한다. - 부프로그램이나블록을시작할때일어나기도한다. - 배정문을통해변수의값을바인딩하기도한다 2 번역시간 - 바인딩실행전컴파일, 링크, 로드시간에이루어진다. - 변수의형, 자료구조의형과크기, 레코드의각항목들의형들의확정, 변수에대한기억장소를바인딩하는시간이다. 프로그래머에의해서선택 : 변수의형, 문장구조등 번역기에의해서선택 : 할당된저장소안에있는자료객체의상대적위치나배열의저장방법과크기등 적재기에의해서선택 : 메모리에프로그램을실행할컴퓨터의실제주소할당 3 언어정의시간 - 프로그램의자료구조, 프로그램언어의구조, 택일문등을확정하는시간 4 언어구현시간 - 정수의자릿수, 실수의유효숫자개수등이바인딩되는시간 4) 정적바인딩과동적바인딩 의미 동적바인딩 (Dynamic Binding) - 늦은바인딩(Late Binding) - 실행중에메모리를할당하고반환이가능한경우 정적바인딩 (Static Binding) - 이른바인딩(Early Binding) - 실행전에할당하고프로그램이끝날때까지메모리를가지고있는경우 장점 - - 융통성이있고메모리낭비가없음 - 실행의효율성 단점 - 실행의효율성이부족 - 융통성이없으며, 있음 메모리낭비의가능성이 언어 -LSIP, Perl, Prolog, APL, SNOBOL 4 - FORTRAN, ALGOL, COBOL 바인딩시간의중요성 1. 실행의효율성(Efficiency) 중시 컴파일언어 2. 융통성(Flexibility) 중시 인터프리터언어 3. 언어번역(1)

1. 언어의구문 1) 구문요소언어의구문 1 구문의개요 - 식, 문장, 프로그램단위의형태와구조 - 한문장의요소들인단어들의관계를보여주는단어들의배치 - 프로그램을이해하고원시프로그램을목적프로그램으로번역하는데있어필요한정보를제공 2 구문요소 문자집합 - 일반적으로 ASCII 코드와같은표준화된집합을사용 - 알파벳(A~Z) 과아라비아숫자(0~9), 특수문자로이뤄짐 식별자 (Identifier) - 일반적으로문자로시작하고, 문자와숫자의열로구성 - 변수, 레이블, 프로시저등의이름으로쓰이는단어 - 한프로그램내에식별자는유일 핵심어 (Key Word) - 문장구문의고정된부분으로서, 특별한의미를가지고사용되는식별자 예약어 (Reserved Word) - 프로그래머가변수명등식별자로사용할수없는핵심어 -IF나 WHILE등이미사용의미가정해져있는단어 - 번역과정에서속도를높여줌 - 프로그램의신뢰성을향상시킴 잡음어 - 판독성을위해문장내에선택적으로사용하는단어 - 어떠한정보도가지고있지않음 문장 (Statement) - 프로그램을구성하는기본단위 - 하나의프로그램은여러개의문장으로구성 - 언어의정규성, 판독성, 기록성에영향을줌 구분문자 - 문장이나식과같은구문적인단위의시작과끝을나타냄 - 구문구조의경계를명시적으로정의함으로써모호함을삭제함 - 판독성을높임 연산식 (Expression) - 데이터를가져와연산을수행한후그결과값을반환 연산자 (Operator) - 한연산에서무엇을할것인가를나타내는부호 - 산술연산자, 비교연산자등 주석 (Comment) - 프로그램의판독성을향상 - 프로그램문서화의중요부분

2) 구문표기 1 구문(Syntax) : 프로그램문장요소들간의관계를나타내는결합법칙 2 BNF(Backus-Naur Form) - 프로그래밍언어의구문을표현할때일반적으로많이사용되는표기법 - John Backus 에의하여개발되고, Peter Naur에의해보강 - ALGOL 60 정의에사용 - 문맥자유문법(Context-Free Grammar) 을기반으로개발 - 생성규칙(Production Rule) 은 :: = 기호에의해좌, 우로나뉨 좌: 정의대상, 우: 대상에대한정의 - 메타기호 ::= : 정의( 좌측이우측으로정의) : 택일 <> :Non-Terminal 기호( 다시정의될대상) 3 EBNF(Extended BNF) - BNF를확장하여읽기쉽고간단하게표현한방법 - 반복되는부분이나선택적인부분을 BNF보다더욱간결하게표현 - 메타기호 {} : 0번이상반복 [] : 0번또는 1 번선택( 생략가능) () : 택일 4 구문도표 - BNF/EBNF 규칙을표현하는그래픽적인방법 - 형태가순서도와유사 - 사용기호 사각형 ( ) Non-Terminal 기호 원 ( ) 지시선 ( ) Terminal 흐름방향 기호 3) 파스트리(Parse Tree) 1 구문에의한문장생성을트리(Tree) 2 구문분석단계의결과물 3 수행의우선순위가표현 형태로표현 4 BNF에의해바르게작성되었는지확인 - 파스트리존재 : 주어진 BNF에의해올바르게작성됨 - 파스트리없음 : 주어진 BNF에의해작성불가 유도트리 : 구문분석기의출력으로생성되는트리가유도과정을나타낼때 파스트리 : BNF에의해올바르게작성되었는지확인할때 구문트리 : 파스트리에서불필요한자료를제거하고코드생성단계에서필요한정보만을갖도록표현한트리, 파스트리에서중간노드의 nonterminal은구문분석과정만을위

한것이므로코드생성단계에서는아무런의미가없고구문분석의시간지연과트리가차지하는기억장소의낭비를초래 2. 형식변환모델 1) 형식언어 1 형식언어의개념 - 언어에관한이론을전개하기위해잘정의된언어 - 무한한언어를유한하게표기할수있는문자열의집합(Symbolic String Set) - 언어의문장을이루는기본적인심벌은알파벳 2 구성요소 알파벳 - 언어를구성하는심벌들의유한집합(Finite Symbol Set) 스트링 - 일련의유한개의알파벳으로구성된집합(Finite String Set) - 스트링의길이는스트링을구성하는알파벳의개수 언어 - 스트링을구성하는형식적규칙의유한한집합(Finite Formal Rule Set) 연산 - 합집합(Union) - 접합(Concatenation) 연산 - 클로저(Closure) 연산 2) 형식문법 1형식문법정의 - 올바른문자열을결정하는생성규칙들의집합 - 형식언어를구성하고있는문자열에관한규칙을수학적기호를사용하여명시 - 촘스키(Chomsky) 에의해서소개된개념 2형식문법구성요소 G=(Vn,Vt,P,S) Vn -유한집합의 Non-Terminal 기호 - 문법에서어떤구문을표현하는기호 Vt -유한집합의 Terminal 기호 - 알파벳이나기호의집합 - 마지막단계에생성된문장은모두 Terminal P - 유한집합의생성규칙(production rule) - 문법규칙들의집합 S 문자로구성

- 생성규칙의시작기호 - Non-Terminal 기호집합에속하지만다른 Non-Terminal 3) 문법의구분촘스키의문법계층 - 기호와구별하여표기 1 Type 0 문법 - 무제한문법(Unrestricted Grammar) - 위축형문법(Contracting Grammar, Reducible Grammar) - 생성규칙에제한이없음 - 인식기 : 튜링기계(Turing Machine) 2 Type 1 문법 - 문맥연관문법(Context Sensitive Grammar) - 비위축형문법(Non-Contracting Grammar, Irreducible Grammar) - 너무복잡해서프로그래밍언어에적용하지않음 - 인식기: 선형제한오토마타(Linear Bounded Automata) 3 Type 2 문법 - 문맥자유문법(Context-Free Grammar) - 구문분석단계에서문맥자유문법(CFG) 을이용하여입력된문장이나프로그램의구문이옳은 지판단 - 대부분의프로그래밍언어는문맥자유문법(CFG) 으로표현 - 파스트리를자동으로생성하는데이용 - 스택으로구현될수있음 - 인식기 : 푸시- 다운오토마타(Push-Down Automata) 4 Type 3 문법 - 정규문법(Regular Grammar) - 휘분석단계에서정규문법(RG) 을이용하여프로그래밍언어의어휘구조 (Lexical Structure) 를표현 토큰구조표현 - 인식기 : 유한오토마타(Finite Automata) 4) 문맥자유언어 1 문맥자유언어 (Context-Free Language) - 문맥자유문법에의해서생성되는스트링의집합 2 유도 (Derivation)

- 임의의문장을얻기위해시작심벌로부터반복적으로생성규칙을적용해가는과정 - 하나의문장이나스트링에대한유도과정은여러개가존재함 - 대표적인유도과정으로좌측유도와우측유도가있다. 좌측유도 (Left-Most Derivation) : 가장왼쪽에있는 Non-terminal을그 Nonterminal에 관한생성규칙을적용하여대치하는것 우측유도 (Right-Most Derivation) : 가장오른쪽에있는 Non-terminal을그 Non-terminal 에관한생성규칙을적용하여대치하는것 3 모호성 (Ambiguity) - 모호한문법이란하나의문자열에대해상이한유도트리가나타날수있는문법 - 문법 G에의해생성되는어떤문장이좌측유도나우측유도어느한가지를사용하더라도두 개이상의유도트리를갖는경우모호성을가짐 - 연산순위또는결합법칙의정보를이용하여생성규칙을추가해서모호성을제거할수있음 4 푸시-다운오토마타 - 보조기억장치를갖고있음 - 입력심벌의일정한개수를셀수있음 - 유한상태제어기(Finite State Control), 입력테이프(Input Tape), 스택(Stack) 으로구성 5) 정규언어 1 정규언어 (Regular Language) - 정규문법에의해생성된언어 2 정규표현 (Regular Expression) - 정규언어를표현하기위한방법 - 정규문법으로부터얻을수있음 - 정규집합을형성하는기초가됨 - 유한오토마타를구성하는데사용 - 상태전이도로나타낼수있음 - 유한길이의스트링뿐만아니라모든형태의표현 3 유한오토마타 (Finite Automate) - 입력과출력의유한수의내부상태를가진시스템의수학적모델 - 표현을받아들이기효율적인오토마타 - 유한상태오토마타(FSA : Finite Stats Automate) 라고도함 - 유한오토마타를정의하기위해서는상태들의유한집합, 입력심벌의유한집합, 상태전이함수, - 시작상태, 종료상태의집합에대한정보가필요결정적유한오토마타와비결정적유한오토마타로구분된다. 4 결정적오토마타 (DFA : Deterministic Finte Automate) - 임의의상태에서입력기호에대해전이가하나만존재하거나전이가없는오토마타로서, 태와입력에대해발생하는모든전이가유일 특정상 5 비결정적오토마타 (NFA : Non-deterministic Finte Automate) - 임의의상태에서입력기호에대해전이할수있는다음상태가하나이상존재할수있는오토마타로서, 하나의입력에대해전이할수있는다음상태가여러개존재

4. 언어번역(2) 1. 언어의번역 1) 컴파일러구조 - 고급언어로작성된프로그램을실행하기위해서실행하고자하는컴퓨터의기계어로번역해야함 - 논리적으로언어번역은두단계를사용함 1 분석단계 : 입력된소스프로그램을분석하는단계 2 생성단계 : 실행가능한목적프로그램을생성하는단계 분석단계( 전반부) 생성단계( 후반부) 세부단계 - 어휘분석(Lexical Analysis) - 구문분석(Syntax Analysis) - 의미분석(Sementic Analysis) - 코드최적화(Code Optimization) - 코드생성(Code Generate) 특징 - - 언어당하나씩필요기계톡립적인부분 - 목적기계당하나씩필요 - 기계종석적인부분 3 고급언어의번역단계

2) 컴파일과정 1 선행처리 (Preprocessor) - 원시프로그램을처리하기전에먼저필요한작업을수행하는과정 - 선행처리기에의해원시프로그램을기존의고수준컴파일러언어로전환 2 어휘분석 (Lexical Analysis) - 구문단위를형성하는어휘항목을식별하기위한과정 - 열된문자들을기초적인구성요소( 식별자, 구분문자, 연산기호, 핵심어, 주석등) 로그룹화하는 단계 토큰생성단계 - 프로그래머가사용한명칭의속성등초기정보는심벌테이블에보관 - 어휘분석기(Lexical Analyzer) 를이용하여원시프로그램의문자열(Stream) 을프로그램구성의 기본요소(Token) 로구분 2. 언어의번역 어휘분석기 (Lexical Analyzer) * 원시프로그램을하나의긴스트링으로보고원시프로그램을문자단위로스캐닝하여문법적으로의미있는일련의문자들로분할해내는역할 * 원시프로그램(Source Program) 을읽어들여토큰(Token) 이라는문법적단위 (Syntactic Entity) 로분석 * 프로그래머가프로그램의설명을위해쓴주석(Comment) 은어휘분석기에서모두처리 * 일명스캐너(Scanner) 라고도불림 1) 구문분석(Syntax Analysis) - 파싱(Parsing) 이라고함 - 작성된프로그램이프로그래밍언어의문법에맞게작성되었는지유무를체크하는과정 -토큰들을문법에따라분석 - 구문분석의결과로파스트리를생성 - 문법이틀렸을경우오류메시지를출력하고실행을종료 - 구문분석기( 파서) 에의해처리 2) 의미분석(Semantic Analysis)

- 컴파일과정중가장중요한단계 - 구문분석기에의해인식된구문구조가처리되고실행가능한목적코드의구조가형성되기시작하는단계 - 매크로의처리, 오류의탐지, 심벌테이블의유지등의기능을수행 - 파스트리를이용하여실행가능한중간코드를생성 3) 코드최적화(Code Optimization) - 실행시간과기억장소의낭비를줄이기위한과정 - 중간코드간의상호관계의효율성을고려하여최적화된코드로변환하는단계 - 실행결과에는변화를주지않음 4) 목적코드생성(Object Code Generation) - 최적화된코드를어셈블리어문장이나기계코드로출력되어야하는다른목적 - 프로그램의형태로바뀌는과정 5) 링크(Link) - 목적코드를실행가능한파일로변경하는과정 6) 구문분석(Syntax Analysis) 1 구문분석기파서의 ( ) 역할 - 입력으로받아들인스트링이주어진프로그래밍언어의문법에맞는가를판단하는기능을수행 - 문법에맞는가를파악하기위해파스트리를출력 7) 파싱기법의종류 1 상향식(Bottom-Up) 파싱 - Shift Reduce 파싱이라고함 - 우측유도(Right-Most Derivation) 과정의역순으로생성 - 단말노드(Terminal Node) 로부터시작하여루트노드(Root Node) 방향으로생성 - 시작심벌이만들어지면올바른문장이고, 그렇지않으면틀린문장 - 종류 : Shift Reduce Parser, LR Parser 2 하향식(Top-Down) 파싱 - 좌측유도(Left-Most Derivation) 과정으로생성 - 루트노드로부터시작하여단말노드방향으로생성 - 반복검조(Backtracking) 방법을사용 - 파싱할수있는문법에 Left Recursion 이없어야하고, Left Factoring을해야하므로상향식보 다일반적이지못함 - 종류 : Predictive Parser( 예측파서), LL Parser, Recursive Descent Parser( 재귀하향식파서) 8) LR과 LL 구문분석기법

1 2 LR 구문분석 - 입력문자열의왼쪽에서오른쪽으로읽음 Left to Right Scanning - 우측유도함 Right-Most Derivation - 가장보편적인파싱방법 - 상향식파싱 - 반복검조(Backtracking) 를하지않음 - Shift Reduce를할수있음 - 예측파서로파싱할수있는모든문법파싱이가능 - 구문오류검출이빠름 - 문맥자유문법으로쓰일수있는모든언어들을인식할수있음 - LR 파서와같은특정도구를필요 - 종류 : SLR(Simple LR), LALR(Look Ahead LR), CLR(Canonical LR) 등 LL 구문분석 - 입력문자열의왼쪽에서오른쪽으로읽음 Left to Right Scanning - 좌측유도함 Left-Most Derivation - 하향식파싱 - 하향식의반복검조(Backtracking) 또는좌측순환(Left Recursion) 의문제에대한해결책 - LR 에비해제약성이많아원래프로그램구조를문법규칙에나타내기어렵지만, 구조가단순한 언어에대해서는구현이용이 - 생성된터미널과입력심벌이같지않으면틀린문장으로간주 5. 순서제어(1) 1. 순서제어 1) 묵시적/ 명시적순서제어 1 묵시적(Implicit) 순서제어 - 프로그래머가제어를명시하지않으면해당언어에서정의한순서에따라제어 - 일반언어에서순서를명시적으로제어하는문장이없으면문장나열순서대로제어 - 수식에서괄호가없으면연산자우선순위에의해서수식이계산 2 명시적(Explicit) 순서제어 - 해당언어에서각문장이나연산의순서를프로그래머가직접변경 -GOTO문이나반복문을사용해서문장의실행순서를변경 - 수식의괄호를사용해서연산의순서를변경 2) 수식에서의순서제어 1 식 (Expression) 구성 - 피연산자와연산자로이루어짐 - 피연산자(Operand) : 상수, 변수, 함수호출등을 - 연산자(Operator) : 미리정의되어있거나사용자가정의하여사용

- 단항연산자 : 하나의피연산자를가짐예) NOT, COMPLEMENT, MOVE, SHIFT 등 - 이항연산자 : 두개의피연산자를가짐예)AND,XOR,OR등 - 삼항연산자 : 세개의피연산자를가짐예) 조건연산자조건 (? 참일때수식: 거짓일때수식) 일반적인연산순서 - 여러연산자가함께인경우연산자의우선순위와결합규칙을고려하여계산 - 연산자의우선순위는대수법칙의우선순위와같음 - 결합규칙은왼쪽에서오른쪽으로계산 - 괄호안의식을최우선순위로함 장점 : 괄호를사용하면프로그램을읽기쉬워짐단점 : 괄호를남용하면프로그램해석이난해함 3) 수식구문의표현방법 1 중위표기법 (Infix Notation) - 일반적으로많이사용하는표기법으로인간이가장이해하기쉬운표기법 - 수학적산술연산, 비교연산등이항(Binary) 연산에적합하지만단항(Unary) 연산에는적합하지않음 - 피연산자 연산자 피연산자순으로표기( A+B/C) 2 전위표기법 (Prefix Notation) - 기계어로표현하기쉬움 -연산자 피연산자 피연산자순으로표기 - 예) 중위표기법을전위표기법으로변환하기 1 A+B/C 중위표기법 2 (A+(B/C)) 연산순서에따라괄호로묶음 3 +(A/(BC)) 연산자를괄호왼쪽앞으로이동 4 +A/BC 괄호를제거 3 후위표기법 (Postfix Notation) - 스택을이용한계산에유용 -피연산자 피연산자 연산자순으로표기 - 예) 중위표기법을후위표기법으로변환하기 1 A+B/C 중위표기법 2 (A+(B/C)) 연산순서에따라괄호로묶음 3 (A(BC)/)+ 연산자를괄호오른쪽뒤로이동 4 ABC/+ 괄호를제거 4) 트리 - 비선형구조이며수식의순서제어를명료화 - 루트(Root) 노드를최상위레벨로하는계층적구조로구성 - 한노드에는자식노드들이연결되며, 자식노드또한자기의자식노드를가짐 - 한노드의바로상위노드를그노드의부모노드라고함 - 2 진트리 : 노드의차수(Degree) 가 2 이하인트리

트리에사용되는용어노드(Noed) : 트리를구성하는요소루트(Root) : 최상위레벨에있는노드간선(Edge) : 노드와노드를연결하는선차수(Degree) : 현재선택된노드에서갈라지는간선의수트리의차수: 트리내의노드의최대차수부모노드(Parent Node) : 노드에연결된바로상위노드자식노드(Child Node) : 노드에연결된바로하위노드형제노드(Brother/Sibling Node) : 동일한부모노드를갖는노드단노드(Terminal/Leaf Node) : 차수가0인노드간노드(Nonterminal/Branch Node) : 차수가0이아닌노드 5) 문장에서의순서제어 -순서제어방법 1 기본적인프로그램의문장실행순서는순차적 2 제어문을통해반복또는건너뛸수있음 - 순차실행 : 각문장이순서대로실행 - 선택실행 : 조건에따라두가지의수행경로에있는일련의문장들중하나가선택되어실행 - 반복실행 : 조건에따라실행하지않거나조건에만족할때까지반복되어실행 - GOTO 문 : 임의의위치로순서를바꿈 6) GOTO 문 : 무조건분기문 - 명령문과레이블명부분으로구분 - 레이블이있는문장으로제어가이동 - 블록개념이없는저급의제어구조 - 이론적으로는모든제어구조를표현 - 작은프로그램에서사용하기쉽고간단 - 프로그램의작성이비구조적 - 계층적인프로그램작성이어려움 - 디버깅및유지보수가어려움 - 많이사용할경우프로그램을이해하기어렵움 - FORTRAN, COBOL, BASIC 등에서사용 6 순서제어(2) 1. 구조적프로그래밍 1) 개요 - GOTO 문을사용하지않음 - 순차, 선택, 반복의 3가지구조를사용 - 하나의입력과출력을가짐 - 블록구조를가지는모듈화프로그램

- 기능별부프로그램으로작성 - 가독성이좋음 - 정확성을입증하기쉬움 -개발및유지보수가용이 2) 설계 - 프로그램의이해가쉽고디버깅작업이쉽도록함 -한개의입구와한개의출구구조를갖도록함 - 계층적설계를함 -GOTO 문을사용하지않도록함 - 모듈이블록구조를가지도록함 3) 구조적프로그램기본구조 1 순차구조 (Sequence Structure) - 문법에맞게논리적으로나열 - 일반적으로논리적으로나열된순서대로실행 2 선택( 조건) 구조(Selection 또는 Condition Structure) - 주어진조건에따라프로그램문장의실행순서를제어하는명령 3 IF문 - 조건식은불리언(Boolean) 수식 - else를사용하면조건에따라양자택일 양자택일 if문 - else if를사용하면여러가지조건으로판단 다중 if문 - 다중 IF 문의경우가독성이떨어짐 - 형식 단일 if문 If ( 조건) 문장 1; 양자택일 if문 If ( 조건) 문장 1; else 문장 2; 다중 if문 If ( 조건 1) 문장 1; else if( 조건 2) 문장 2; else 문장 3; 4 SWITCH 문 - 다중선택문 - 다중IF 문대신사용 - 다중 IF 문의문제점을해결

- 형식 switch ( 조건) { case 값 1 ; 문장1; break; case 값 n ; 문장n; break; default ; 문장 n+1; } BREAK 문 - 반복루프를탈출, SWITCH문에서필수적으로사용 CONTINUE 문 - 해당반복루프의시작으로돌아가다시반복을실행 4) 반복구조(Iteration 또는 Repetition Structure) - 특정부분을반복처리할때사용 1 FOR문 - 반복변수를이용한반복문 - 일정횟수만큼반복적으로수행하고자할때사용 - 초기식은변수를초기화하는부분으로딱한번수행 - 초기식, 조건식, 증감식모두생락이가능 모두생략되면무한루프 - 형식 for ( 초기식; 조건식; 증감식;) { 문장 1; ~ 문장 n; 2 WHILE 문 - 조건을검사한후실행문의실행및반복여부를판단 - 조건의초기값이거짓이면 WHILE 문내의문장은한번도실행되지않음 - 형식 while ( 조건) { 문장 1; ~ 문장 n; 3 DO~WHILE 문 - 문장을실행한후조건을검사하여반복여부를판단 - 최소한한번은문장을실행 - 형식 do {

문장 1: ~ 문장 n; 2. 매크로와부프로그램 1) 매크로(Macro) - Open Subprogram - 자주반복되는일련의명령을하나의블록으로묶어이름을부여한후사용할곳에이름을지정하여수행 - 프로그래머가어셈블리어언어(Assembly Language) 로프로그램을작성할때반복되는일련의같은연산을효과적으로하기위해필요 - 번역되기전매크로처리기에의해확장이일어남 - 실행이빠름 - 메모리사용량이많음 2) 부프로그램(Subprogram) - 주프로그램또는다른부프로그램에의해서사용되는하나의독립된단위 - 한프로그램내에서특정한일이여러번실행될필요가있을때이를부프로그램으로작성 - 고급언어에서는프로그램의모듈화를위해서부프로그램을지원 - 부프로그램은자신이호출될경우에실행이시작되는보조적인루틴 컴파일후실행시에 Call/Return에의해실행 -복귀반환 ( ) 주소의저장과조회를위해스택이라는자료구조를활용 - 부프로그램은함수(Function) 와서브루틴(Subroutine 또는 Procedure) 으로구분 - 부프로그램의장점 1 프로그래밍에드는시간을절약할수있음 2 작성된프로그램은다른여러프로그램에서공동으로사용할수있음( 재사용가능) 3 프로그램의크기가작아져기억장소가절약되고가독성이높아짐 4 프로그램의유지 보수가용이 - 부프로그램의단점 1 부프로그램호출시마다생성되어야하므로실행시간은상대적으로느려짐 3) 부프로그램선언시필요사항 - 부프로그램의이름 - 부프로그램인수 - 인수의유형 - 반환되는값 - 반환되는값의유형 - 부프로그램에서수행하는기능 4) 매개변수 - 함수의인수 -함수호출과실행에필요한데이터의전달변수 - 실매개변수와형식매개변수는항상 1:1로대응 - 형식매개변수 (Formal Parameter) 1 값을전달받는변수

2 함수의원형에있는매개변수 - 실매개변수 (Actual Parameter) 1 함수호출시전달되는실제의값 2 함수의호출에있는매개변수 -전달방법 값에의한호출 (Call by Value) - 주프로그램에서부프로그램을호출하여실행할때변수의값을전달하는방법 - 실매개변수의값을형식매개변수에복사하여일반지역변수처럼사용 - 실매개변수와형식매개변수는별도의기억장소를가지므로, 형식매개변수의값이변해도실매개변수의값은변하지않음 참조에의한호출 (Call by Reference) - 주소에의한호출(Call by Address) - 실매개변수의주소를형식매개변수에전달하는방법 - 실매개변수와형식매개변수는기억장소를공유하므로, 형식매개변수의값이변하면실매개변수의값은변함 이름에의한호출 (Call by Name) - 주프로그램에서부프로그램으로변수자체가전달되는방법 - 대부분의언어에서채택하지않는방식 5) 부프로그램순서제어 1 단순호출-반환부프로그램 - 호출된부프로그램은다시다른부프로그램을호출할수있음 - 호출된부프로그램이수행을종료하면호출한프로그램으로제어를반환 - 호출된부프로그램이제어를반환하면호출한위치바로다음부터다시실행 2 되부름부프로그램( 재귀적호출) - 부프로그램자신을다시호출하는형태 - 부프로그램 S 는자기자신(S) 을호출 - 부프로그램S는다른부프로그램F 를호출할수있고, F는다시S를호출 3 코루틴 (Coroutine) - 부프로그램의수행이완전히종료되기전에호출할수있는부프로그램의미 - 두모듈이서로호출하는형태로대등하게관계를가지며실행 - 코루틴이호출되면일부분만수행하고제어를반환할수있음 6) 활성레코드(Active Record) - 프로그램메인루틴의수행시에서브루틴을호출할때만들어짐 - 단위프로그램( 프로그램의선언/ 실행) 이활성화될때마다생성 - 지역변수및프로그램수행에필요한정보가들어있음 - 매개변수(parameter), 지역변수(local variable), 복귀주소(return address) 가들어있음 - 내용이나크기가가변적임

7. 자료형(1) 1. 형과객체의특징 1) 형(Type) 1 자료형 - 값의유형과값들에대한연산들의집합 컴퓨터언어에서의자료형 : 기본자료형, 구조화자료형 - 기본자료형 : 정수형, 실수형, 논리형(Boolean), 문자형, 열거형, 부분영역형등 - 구조화자료형 : 배열형, 레코드형, 포인터형등 정의주체에따른자료형: 프로그래머정의자료형, 시스템정의자료형 - 프로그래머 : 수, 배열, 입출력파일등 - 시스템: 스택, 버퍼, 참조환경등 2 형(Type) 정보의구분 명시적(Explicit) 형 - 정보주로선언문에나타남 묵시적(Implicit) 형 - 정보상수나값의형, 이름작성규칙, 문맥등에의해알수있음 2) 형에따른언어 1 강형언어 - Strongly Typed Language - 형을정적으로결정한다. - 형일관성및형추론규칙이완전하게정의된언어 - 형오류번역시모두검출할수있도록자료형이엄격하게정의된언어 - 자료형에관한모든특성들이컴파일시간에확정되는언어 - 프로그램의신뢰성, 유지보수성, 판독성을증가시킴 2 약형언어 - Weakly Typed Language - 정적인형체계를전혀갖추지않음 - 예) LISP, SNOBOL, APL 등 3) 형정보의이용 - 형정보를이용하여프로그램의신뢰성, 가독성, 효율성, 유지보수성을높일수있음 1 오류검출 : 번역기가형정보로연산의적합성을조사하여오류검출에사용 2 기억장소할당 : 번역기가형정보를기억장소의효율적인할당에사용 4) 형조사 - 번역과정( 의미분석단계) 에서프로그램내부에형정보의일관성이있는지조사하는과정 1 동적조사 - 약형언어, 인터프리터언어 - 실행시에형조사를함

- 실행부분만조사하므로형오류를찾아내지못할수도있음 - 프로그램설계시융통성을줌 - 대화형언어에적합함 - 프로그램이수행되는과정내에자료형을변경할수있음 - 프로그램수행중정보를유지할필요가있으므로추가기억장소를필요로함 - 프로그램의실행속도가떨어짐 2 정적조사 - 강형언어, 컴파일러언어 - 번역시에형조사를함 - 형조사가실행이전에컴파일러에의해이루어지므로오류를일찍발견 - 융통성이떨어짐 5) 변수와상수 1 변수 - 프로그래머가프로그램내에서정의하고이름을줄수있는자료 - 기억장소의한장소를추상화한것 - 이름, 속성의집합, 참조, 값으로구성 - 변수의속성들은실수, 정수등과같은값이가질수있는자료형을말함 - 변수의속성은컴파일시간에한번정해지면그다음부터일반적으로변할수없음 - 변수의값은프로그램이동작되는동안수시로바뀔수있음 2 상수 - 수명시간동안고정된하나의값과이름을가진자료 - 프로그램이동작되는동안값이절대로바뀌지않는공간을의미 6) 선언문 - 프로그램에서사용할자료형에관한정보를컴파일러나인터프리터에게알려주는문장 - 보다효율적인주기억장치의사용과접근이가능 - 보다효율적인주기억장치의할당기법을사용 - 컴파일시간에변수형검사가가능 7) 묵시적변수선언 - 일부언어는선언문을사용하지않고묵시적변수를선언하기도함 1 FORTRAN - 정수 : 변수의첫글자가 1에서 N사이의문자일경우 - 실수 : 그외 2 BASIC - 정수 : 변수의끝이 % 인경우 - 문자열 : 변수의끝이 $ 인경우 - 실수 : 그외 3 Pert - 배열 : 변수명앞에 @ 를붙인경우 - Scalar 형: 변수명앞에$ 를붙인경우 8) 배정문( 대입문) - 변수의내용을변경하는기본연산

- 프로그램에서가장일반적인연산문 식 A :=B; 의미 B의주소에저장된값을 A의주소값에대입 - A는 L-Value, B는 R-Value L-Value - Left-hand side Value - 주소를의미 - 지정연산자의왼쪽변수 -모든변수명은변수값이저장될 L-Value를가짐 R-Value - Right-hand side Value - 값을의미 - 지정연산자의오른쪽변수 -상수는 R-Value만을가짐 9) 유해요소 1 자료객체의별명 (Alias) - 자료객체는생존기간중여러별명을가질수있음 - 일반적으로별명은프로그램의이해를매우어렵게함 - 자료객체가여러가지별명을갖는경우프로그램의무결점검증이어려워짐 - 같은참조환경에서다른이름으로같은자료객체를참조할수있는언어의경우, 프로그래머에게심각한어려움을줄수있음 2 부작용 (Side Effect) - 프로그램을구성하는함수에서전역변수를사용하여함수의결과를반환하는경우, 함수에전달되는입력파라미터의값이같아도전역변수의상태에따라함수에서반환되는값이달라질수있는현상 - 전역변수를액세스하거나변경또는문장에나타나지않은변수의값을변경시킴 - 참조에의한전달(Call by Reference) 과이름에의한전달(Call by Name) 에서발생 - 전역변수의단점을보완하기위해서매개변수전달기법을사용 2. 기본자료형 1) 기본자료형 1 본래의구조이외에다른구조를가질수없는자료형 - 기존에정의된형 : 정수형, 실수형, 논리형, 문자형, 무치형(void) 등 - 기존에정의되지않은형 : 열거형, 부분범위형등 2 문자형 BCD 코드 - 2진화 10 진코드(Binary Coded Decimal) 로대표적인가중치코드(Weighted Code) 이며 8421 코드라고도함 -6비트로구성 ZONE(2 비트)+Digit(4 비트) -26의 64가지의서로다른문자를표현 BCD 코드변환하기 10진수 634를 BCD 코드로변환하기 (0110)2 (0011)2 (0100)2

2 수치형 ASCII 코드 - 미국표준기구에의해개발된표준형코드(American Standard Code for Information Interchange) 로대부분의언어에서사용 - 7비트로구성 ZONE(3 비트) + Digit(4 비트) -2 7 가지의서로다른문자를표현 - 데이터통신을위한정보교환코드로개인용컴퓨터에사용 - 오류를검출하는 1개의패리티비트 EBCDIC 코드 - 확장 2진화 10 진코드(Extended Binary Coded Decimal Interchange Code) 로 BCD를확장한코드 - 8비트로구성 ZONE(4 비트) + Digit(4 비트) -2 8 가지의서로다른문자를표현 - 대형컴퓨터에서많이사용 고정소수점방식 - 소수점위치가항상고정 - 연산속도가빠름 - 수표현범위가한정 - 가장왼쪽비트를부호비트로사용 - 수의표현범위 부호와절대치 -(2n-1-1) ~ 2n-1-1 1의보수 -(2n-1-1) ~ 2n-1-1 2의보수 -2n-1 ~ 2n-1-1 부동소수점방식 - 실수표현을위한방식으로지수부와가수부로구성 - 지수부와가수부로분리하기위한정규화과정이필요 - 소수점은자릿수를차지하지않는다. 소수점은지수부와가수부사이에있는것으로간주 - 아주큰수나아주작은수의표현이가능 - 연산속도가고정소수점방식에비해느림 3 논리형 - 불(Boolean) 자료형이라고도함

- 논리형의값은 True( 참) 와 False( 거짓) 로구성 - 하나의비트에대응 논리곱 (A AND B) :A,B 둘다참일때만참이고, 그외는거짓 논리합 (AORB) : A, B 둘다거짓일때만거짓이고, 그외는참 부정 (NOT A) : A 가참이면거짓이고, 거짓이면참 조건 (A Implies B) : A와B 의값참 (, 거짓이반대일때만참 ) 동치 (A Equivalent B) : A와 B의값이동일할때만참 4 열거형 - 순서가값에대치 - 사용자정의형(Scalar) 5 부분범위형 - 이미정의된나열가능한자료형의부분범위로서정의되는자료형 - 정수형, 열거형에적용할수있으나실수형에는허용되지않음 - PASCAL, Ada 등에서지원 2) 배열(Array) - 동일한형의자료들을모아서하나의변수에연속적으로저장하여사용 - 원소의구별은 첨자(index)' 로함 - 원소의수는정해져있음 - 선형리스트를의미하는순차구조를가짐 - 주기억장치에순차적으로사상 - 배열의 이름, 차원, 형(Type)',' 인덱스의범위 는명시적으로제시해야하는항목 1 1차원 - 자료형배열명 [ 첨자] 2 2차원 - 자료형배열명 [ 행첨자][ 열첨자] 3 3차원 - 자료형배열명 [ 면첨자][ 행첨자][ 열첨자] 3) 레코드(Record) - 서로다른자료형을갖는연관성있는자료들을하나의집합으로묶어사용 - 원소의구별은 이름( 식별자) 으로함 - 주기억장치에블록단위로구성 - COBOL, PL/I, PASCAL, C 등 4) 포인터(Pointer) - 다른객체를가리키는자료형 - 고급언어에서사용되는기법으로객체의참조를위해주소를값으로가짐 - 하나의자료에동시에많은리스트의연결이가능

- 커다란배열에원소를효율적으로저장할때이용 -C/C++,Ada,PASCAL,Module-2등 8. 자료형(2) 1. C 언어와자료형 1) C 언어의개요 1 C언어의특징 - 고급언어, 시스템프로그래밍언어, 컴파일언어에속함 - 고급언어와저급언어의특성을모두가짐 - 여러개의함수로구성 - 구조적프로그램기법 - 프로그램분석및수정이쉬움 - 하드웨어제어가가능 - 다양한연산자를가짐 - 이식성이뛰어난언어 2 C 프로그램작성규칙 - 예약어, 함수, 연산자, 식별어, 상수, 변수등의요소로이루워짐 - 프로그램은 main( ) 함수로부터시작 - 모든프로그램은한개이상의함수로구성되며, 함수는한개이상의문장을포함 - 함수내의문장은블록 { } 내에포함되어야함 - 한문장이끝날때마다반드시세미콜론(;) 을씀 - 한줄에두개이상의문장을쓸수있음 2) 기본구조 1 전자처리기선언부 - 소스파일을번역하기전에선행처리지시자가사용된문장을미리처리하는부분 - C언어문법과는관계없이독립적으로사용 - 프로그램을매우효율적으로작성하도록함 - 프로그램을표준화할수있음 - 선행처리지시자 : #include, #define, #undef, #if, #elif, #else 등... #include - 컴파일러가헤더파일을불러와프로그램에포함 #include <*.h> #include =#.h= #include 매크로상수 #define - 매크로정의를위해사용되는선행처리지시자 - 반복적으로사용되는상수또는문장등을간단한기호( 매크로명) 로정의해놓고소스작성시사용 #define 매크로명( 인수1, 인수2...) 치환내용

2 main 함수 - 프로그램이시작될수있도록하는프로그램의본체에해당 - 한프로그램에항상존재하여야하는주함수부분 -voldmain() { 선언문 ; 명령문 ; : } 3 사용자정의함수 - 함수란프로그램내에서특정한부분을수행하도록독립적으로만들어지는하나의단위 - 사용자가직접정의하여사용하는부분 -main() 을제외한각함수들은수평적관계를가짐 - 함수명() { 선언문 ; 명령문 ; : } 3) 블록구조 - 프로그램에서사용하는식별자또는변수의자료형을명시적으로선언 - 사용할프로그램의문장근처에서선언하기때문에프로그램의지역성(Locality) 을높임 - 프로그램의변수명과삽입되는라이브러리루틴의변수명이같더라도문제점이없음 - 프로그램의블록내포관계를기준으로지역변수와비지역변수의영역을정함 - 프로그램을구성하는블록을기준으로기억장소를동적으로할당 - 블록안에선언된변수는해당블록에서만유효하기때문에자료의보호와제어가용이 - 블록에선언된변수는블록의실행시간에만기억장소를할당받고, 블록의실행이끝나면자동적 으로회수되므로기억장소의사용을향상시킴 - 변수에대한기억장소의할당과창조에따른제어를프로그래머에게일임할수있음 - 프로그램의구성을단계적으로세분화하는데도움을줌 - 프로그램을간소화시켜프로그램의이해를향상시킴 - 프로그램의블록단위로삽입, 삭제, 수정할수있어개발이용이 - 프로그램의논리적오류를블록으로제한시켜프로그램수정용이 4) 자료형종류

5) 변수(Variable) -값데이터을저장할수있는기억장소 ( ) - 사용자가임의대로만들어사용할수있음 1 5 가지기본자료형 Ttype 의미크기 char 문자데이터 1byte int 부호있는정수 2byte float 실수 4byte double 배정도의실수 8byte void 값이없음 - 2 변수작성규칙 - 영문자의대/ 소문자, 숫자(0~9) 및 Underscore(_) 를조합하여구성 - 첫글자는반드시영문자이어야함 - 대소문자를구분 - 공백을사용할수없음 - 길이제한이없음 - 예약어는변수로사용할수없음 3 예약어 (Reserved Word) - 시스템이알고있는특수한기능을수행하도록이미용도가정해져있는단어 - 프로그래머가변수이름이나다른목적으로사용할수없는핵심어(Key Word) 4 기억클래스

- - 기억장소의할당에따라지역변수와전역변수로구분 전역(Global) 변수 : 함수외부에서선언한다. 프로그램어디에서나액세스가가능 지역(Local) 변수: 함수내부에서선언한다. 정의된함수내에서만액세스할수있음기억클래스의종류 저장클래스를명시하지않은경우기본적으로자동변수(auto) 로간주 6) 상수(Constant) 1 변하지않는값을의미 2 변수를기억장소로사용 종류지정자사용범위 자동변수 Auto 함수내부 정적변수 Static 함수내부 레지스터변수 Register 함수내부 전역변수 Extern 연결된모든파일 외부정적변수 static 하나의파일 3 변수와마찬가지로지정된자료형에맞는상수를사용 정수형상수 - 소수점이없는수를의미 - 부호를포함할수있으며, 부호가없으면양수로간주 -10 진수,8 진수,16 진수,long형상수를가짐 10 진수 : 0~9의조합으로만들어진수 8 진수 : 0~7 의조합으로만들어진다. 0으로시작 16 진수 : 0~9와 A~F 의조합으로만들어진다. 0x로시작 long 형상수: 숫자끝에L을붙여사용 실수형상수 - 소수점을갖는수를의미 - 부동소수점상수(Floating-Point Constant) 라고도함 - 지수형태로표현할수있으며, 지수형태로표현시부호, 지수부, 가수부로구분 문자상수 (Character Constant) - 사용가능한단일문자 - 인용부호' ' 안에지정 - 문자상수에해당하는 ASCII 코드값으로저장 문자데이터와정수형데이터의형변 - 환이자유로움예) 'A',' 4' 등 문자열상수 (String Constant) - 문자상수의집합 - 이중인용부호" " 안에지정한

- 문자열을사용하기위해서는배열변수를사용 - 기억공간은실제문자열수에 Null( 0) 문자가들어갈공간을포함하여할당 - 예) "min"= 3byte. 실제기억공간은4byte 기호상수 - 상수에부여한이름을의미 - #define 문을이용하여정의 7) 형변환(Type conversion) 1 자동형변환 - 묵시적형변환이라고함 - 여러개의변수가혼합되어사용되는경우변환규칙에따라자동으로형이변환 - 두개이상의자료형이혼합된연산에서는순위가높은자료형으로변환한후계산 - 형변환시자료형우선순위 char<short<int<long<float<double 2 수동형변환 - 명시적형변환이라고함 - cast 연산자에의해강제적으로형변환 - 프로그래머가직접지시 - 자동형변환보다우선시함 8) 연산자(Operator) -변수, 상수, 함수호출값에대해서연산을수행하여결과를제공 - 연산자의종류 연산자 종류 산술연산자 +,-,*,/,% 증감연산자 ++, -- 관계( 비교) 연산자 <, <=, >, >=, ==,!= 일반논리연산자 &&,II,! 비트단위연산자 비트논리연산자 &,I,~,^ Shift 연산자 <<, >> 조건( 선택) 연산자?: 산술연산자 - 단항연산자로쓰인 +,-는이항연산자보다우선순위가높음

- 이항연산자는 +,-는서로동일한우선순위 -*,/,% 는서로동일한우선순위 - 이항연산자 +,- 는 *, /, % 보다우선순위가낮음 -/( 나눗셈) 연산자는피연산자의자료에따라결과값의자료형이달라짐 -%( 나머지) 연산자는정수형에만사용할수있음 * 곱셈 / 나눗셈 % 나머지 + 덧셈 - 뺄셈 증감연산자 - 증감또는감소의수식을간략하게표현 - 전위형과후위형형태로사용 전위형 : 우선변수의값을 1 증가/ 감소시킨후변수의값을수식에사용예 ) ++a 후위형 : 현재변수의값을수식에사용한다음변수의값을증가/ 감소예 ) a++ ++ 1회증가 -- 1회감소 관계연산자 - 결과값은관계식이참(True) 이면 1, 거짓(False) 이면 0으로표시 - 관계연산자들은모두우선수위가같음 - 좌측에서우측으로실행 < ~ 보다작음 <= ~ 보다작거나같음 > ~ 보다큼 >= ~ 보다크거나같음 == ~ 와같음 I= ~ 와같지않음 일반논리연산자 - 관계연산자와마찬가지로결과값은관계식이참(True) 이면 1, 거짓(False) 이면 0으로표시 -NOT>AND>OR순으로우선순위를가짐

! && ll NOT 피연산자의값이참 거짓으로전환피연산자의값이거짓 참으로전환 AND 두피연산자의값이모두참일때만결과가참 OR 두피연산자의값이모두거짓일때만결과가거짓 비트논리연산자 - 연산대상이비트(bit) - 연산대상을 2진수로변환후연산 -NOT>AND>XOR>OR순으로우선순위 ~ NOT 1 0 으로변환, 0 1로변환 & ^ AND XOR 두비트모두참일때만결과가참 두비트가서로다르면결과가참 l OR 두비트가모두거짓일때만결과가거짓 Shift 연산자 - 비트단위로연산을행함 - 비트를왼쪽또는오른쪽으로이동시키는역할을함 - 이동후빈자리는0을삽입함 << >> X2^ 왼쪽으로비트를이동 a<<2 : a를 2진수로변환후왼쪽으로 2비트이동 /2^ 오른쪽으로비트를이동 조건연산자 -3 항연산자또는선택연산자 - IF~Else와같은의미를갖음 조건식? 참일때수식 : 거짓일때수식 변환(Cast) 연산자 - 변수또는상수의자료형을강제적으로변환 - 반드시괄호를사용 ( 자료형명) 변수 [ 또는상수] 콤마연산자 - 동일한형의변수나실행문의나열또는산술식에사용 sizeof 연산자 - 자료형이나수식의기억장소크기를알수있음

sizeof( 인수) 대입연산자 - 증감연산자처럼수식을간결하게표현 = A=b+c b+c는값을 A에저장 += A+=b A=A+b -= A-=b A=A-b *= A*=b A=A*b /= A/=b A=A/b %= A%=b A=A%b &= A&=b A=A&b l= Al=b A=Alb ^= A ^=b A=A^b <<= A<<=b A=A<<b >>= A>>=b A=A>>b - 연산자우선순위 괄호() > 단항 > 산술 > 관계 > 논리 > 대입 2. 제어문 1) 제어문 - 주어진조건의결과값에따라프로그램의수행순서를제어하거나문장들의수행횟수를조정 - 프로그램의흐름을지시하는데사용 1 IF 문 - 주어진조건에따라프로그램의순서를제어 -단일 IF 문, 양자택일 IF 문, 다중 IF 문으로구분 2 Switch~Case 문 - 다중선택문 - 다중 IF 문의복잡함을해결 2) 반복문 1 While 문 - 조건이만족하는동안 while 문안의내용을반복수행 - 조건이만족하지않으면한번도수행되지않을수있음 - 단일 while 문, 다중 while 문으로구분 2 do~while 문 - 조건이만족하지않아도일단은한번수행 - 조건식이참인동안 while 문의내용을반복수행 - 맨마지막에세미콜론(;) 이필요

3 for 문 - 조건식이만족하지않을때까지 for 문안이내용을반복 -단일 for문과다중 for문으로구분 3) 기타제어문 1 break 문 -for,while,switch문과 같은반복문이나조건문수행중범위를벗어나고자할경우사용 2 continue 문 - break 문과상반되는제어문 - continue 문이후문장을무시하고, 반복조건식으로이동 4) 변환문자 %d 인수를 10진수로변환 %o 인수를 8진수로변환 %x 인수를 16진수로변환 정수형 %u 인수를부호없는 10진수로변환 %c 인수를하나의문자로변환문자형 %s 인수를문자열로변환문자열 %f 인수를실수로변환 %e 인수를지수형태로변환 실수형 5) 확장문자(Escape Sequence) \ n New line 줄바꿈 \ t Horizontaltab 수평으로탭만큼칸을띄움 \ b Backspace 커서를뒤로한칸이동 \ r Carriage return 현재라인의처음으로커서를이동 \ o Null 낼문자를사용 \ f Form feed 한페이지를넘김 \\ Backsiash 역슬래시 (\) 를출력 \' Single quote 작은따옴표( ) 를출력 \" Double quote 큰따옴표( ) 를출력 \ a Beep 벨소리를발생

9. 운영체제관리 1. 운영체제관리 1) 프로세스(Process) 1프로세서(Processor) 에의해처리 2 특정한기능을수행하는단위프로그램 - 실행중인프로그램 - 프로세서가할당된개체(Entity) - 프로세서가활동중인것 - 디스패치(Dispatch) 가가능한단위 - 비동기적인행위(Asynchronous Activity) 를일으키는단위 - 운영체제가관리하는실행단위 2) 상태 1 준비(Ready) : CPU를할당받기위해주기억장치에서준비중인상태 2 실행(Running) : CPU를할당받아프로세스가실행중인상태 3 대기(Block) : 어떤사건이발생하기전까지실행될수없는상태 3) 프로세스제어블록(PCB : Process Control Block) 1 운영체제가프로세스에대한중요정보를저장해놓은자료구조 2 문맥교환발생시현재실행중인프로세스의정보를 PCB에저장한후제어가변경 3 PCB의내용 - 프로세스의고유식별자(Identifier) - 프로세스의우선순위 - 프로세스의현재상태 - 프로세스의부모와자식프로세스에대한정보 - 프로세스가위치한주기억장소의영역 - 프로그램카운터 -CPU레지스터정보 - 기억장치관리정보 - 계정(Accounting) 정보 - 입출력정보 4) 인터럽트(Interrupt) - 컴퓨터시스템에서발생하는예외적인사건을운영체제에의해적절히처리하기위한기법

- 인터럽트가발생하게되면인터럽트처리루틴을먼저수행한후원래의프로그램으로복귀 -시스템에변화가일어났을때만CPU에게보고하여조치를받을수있으므로CPU의효율성이향상 -처리과정 5) 종류 1 감시프로그램호출인터럽트 (SVC) ( 소프트웨어인터럽트) - 사용자프로그램명령어에의해발생 - 입출력수행, 기억장치의할당, 오퍼레이터와의대화등을위해발생 2 프로그램검사인터럽트( 내부인터럽트) - 불법적인명령의수행, 수치계산시 0 으로나누기, 보호된기억장소의침범, 스택의오버플로 등프로그램상의지정법이나명령법오류시발생 3 입/ 출력인터럽트 - 입/ 출력장치가발생 - 입/ 출력요구가완료되었을때또는입/ 출력도중에러등이발생하였을경우발생 - 프로세서에게채널이나입/ 출력기기의상태변화를알려줌 4 외부인터럽트 - 외부장치에의해발생 - CPU 타이머종료, 오퍼레이터의 INT 조작, 다른 CPU 로부터신호(Signal) 도착시발생 5 기계검사인터럽트 - 기계적인장애나에러시발생 6 재시작인터럽트 - 오퍼레이터가콘솔상에서재시작버튼(Reset) 이나 [CtrI] + [Art] + [Delete] 를누른경우발생 6) 교착상태(Deadlock) - 동일한자원을공유하고있는하나또는둘이상의프로세스들이다른프로세스가가지고있는자원을서로무한정기다리고있는상태 1 교착상태발생조건 상호배제 (Mutual Exclusion) 점유와대기 - 프로세스가자원을사용중일때다른프로세스는자원을사용하지못하고반드시대기해야하는경우를말함 - 프로세스가이미하나이상의자원을할당받은채다른프로세스의

(Hold and Wait) 비선점 (Non-Preemption) 환형대기 (Circular Wait) 자원이해제되기를기다리는경우를말함 - 프로세스에게할당된자원의사용이끝날때까지는다른프로세스는그자원을빼앗을수없는경우를말함 - 프로세스와자원들이원형을이루며, 각프로세스는자신에게할당된자원을가지면서상대방이자원을서로요청하는경우를말함 2 교착상태해결방안 예방 (Prevention) 회피 (Avoidance) - - - - 교착상태발생조건중하나를부정함으로써교착상태를해결자원의비효율성이발생시스템의운영상태를파악하여교착상태의발생가능성을피함시스템의상태를파악하는방법으로은행가알고리즘을사용 발견 (Detection) 회복 (Recovery) - 자원할당그래프또는대기그래프의사이클유무를판별하여프로세스간간선을소거 - 프로세스의종료 : 모든교착상태프로세스들을종료시키거나하나씩종류시킴 - 자원의선점 : 교착상태가없어질때까지프로세스로부터자원을강제적으로회수하여다른프로세스에게제공 2. 기억장치의관리 1) 중앙처리장치(CPU; Central Processing Unit) - 컴퓨터시스템의중심이되는장치 - 컴퓨터시스템전체를제어관리하며, 자료의연산및논리조작을수행하는등의중요한역할을담당 - 연산장치와제어장치로구성 1 연산장치 (ALU; Arithmetic Logic Unit) - 산술및논리연산등을담당하는장치 - 레지스터(Register) 를이용하여연산을수행 누산기 (ACC) - 산술연산및논리연산의결과를임시로기억하는레지스터 가산기 (Adder) - 데이터레지스터에보관된값과누산기의값을더하여결과를누산기에보냄 보스기 (Complementary) - 뺄셈을위해보수를만듦 시프트 (Shift) - 자리이동기 - 곱셈이나나눗셈을돕는등의연산보조기능을수행

기억레지스터 데이터레지스터 번지레지스터 - - - 주기억장치에보내는데이터를임시로기억하는레지스터 연산을사용할데이터를임시로기억하는레지스터 기억장치내의주소를기억하는레지스터 상태레지스터 - 연산실행결과의양수와음수, 자리올림(Carry) 과오버플로 (Overflow), 인터럽트상황등의상태를기억하는레지스터 인덱스레지스터 - 주소를변경하기위해사용되는레지스터 2 제어장치 (Control Unit) - 주기억장치에기억된프로그램을해독 - 입출력을제어하고주기억장치와연산장치사이의경로를결정하는등의모든장치의제어신호의처리, 통제, 관리하는기능을수행 프로그램카운터 (PC) 명령어레지스터 (IR) - - 다음에수행될명령어의주소를기억하는레지스터 현재실행중인명령어를임시로보관하는레지스터 번지해독기 명령해독 - 명령어레지스터가보낸주소를해독한후저장되어있는데이터를메모리로보냄 - 현재수행해야할명령을해독한후수행가능한여러제어신호를발생시킴 부호기 (Encoder) - 명령해독기에의해해독된내용을신호로변환하여각장치에전송 기억장치주소레지스터 (MAR) 기억장치버퍼레지스터 (MBR) - 실행시필요한프로그램이나데이터가저장된주기억장치의주소를기억하는레지스터 -MAR의내용을기억하는레지스터 2) 캐시기억장치(Cache Memory) - 중앙처리장치와주기억장치사이에있는버퍼메모리 - 중앙처리장치와주기억장치의속도차이를해결하기위하여개발 - SRAM이사용 3) 주기억장치(Main Memory) - CPU 의명령어나입력, 출력에사용될데이터등의정보를기억 -입력장치를통하여읽어들인데이터나프로그램, 처리결과등을기억 1 종류 롬 (ROM) - Read Only Memory - 비휘발성메모리

- 쓰기가자유롭지못함 램 (RAM) - Random Access Memory - 휘발성메모리 - 사용자가원하는정보를마음대로기억시키고읽을수있음 2 관리전략 반입 (Fetch) 배치 (Placement) 교체 (Replacement) - 언제(When) - 주기억장치에넣을프로그램이나데이터를보조기억장치에서주기억장치로언제옮길것인가를결정 - 요구반입전략 : CPU 가필요로할때( 실행중인프로세스의호출시) - 예상반입전략: CPU가필요로할때를예상하여미리옮겨둠 - 어디에(Where) - 반입전략에의해새로반입된프로그램을주기억장치의어느곳에위치 시킬것인지를결정 - 최초적합(First-fit) 전략 : 입력된프로그램이할당될수있는공간중가 장먼저발견된공간에배치 - 최적적합(Best-fit) 전략 : 입력된프로그램이할당될수있는공간중가 장작은공간에배치 - 최악적합(Worst-fit) 전략 : 입력된프로그램이할당될수있는공간중 가장큰공간에배치 - 무엇을(What) - 새로주기억장치에배치되어야할프로그램이들어갈장소를마련하기위해어떤프로그램과데이터를제거할것인지를결정 4) 가상기억장치 -주기억장치의용량부족을해결하기위한것 -보조기억장치의일부를주기억장치처럼사용 - 프로세스의논리공간에서사용된주소를가상주소라고하며, 가상주소를메모리내의실주소로변환하기위해주소사상기구를사용 - 구현방법 : 페이징, 세그먼테이션 1 페이징 (Paging) - 기억장소를일정한크기( 페이지) 로분할해서사용 - 가변분할의외부단편화문제를해결 - 가상주소공간내의페이지들이주기억장치의어느페이지프레임에사상되었는가를알기위해페이지사상표(PMT) 또는연관사상표(AMT) 를이용 직접사상 (Direct Mapping) 페이지사상표의페이지번호와변위를실제주소로변환하는방법 가상주소공간을구성하는모든페이지가페이지사상표에있을때 실제주소를찾아가기위해서는두번의기억장치참조가이루어짐 사용

연관사상 (Associative Mapping) 연관기억장치에페이지사상표를집어넣고사용하는방법 주소변환시간을빠르게하기위해연관메모리가사용되지만구현에따른가격이비싸실제사용되지않음 연관/ 직접사상 연관사상과직접사상을혼용 저렴한가격에연관사상의장점을활용 최근창조된페이지는연관사상표에보관하고나머지는페이지사상표를이용 2 세그먼테이션 (Segmentation) - 기억장치의운용을사용자관점에서정의하는개념 - 논리적가변단위인세그먼트를사용 - 내부단편화는없앨수있지만외부단편화가발생 - 최초, 최적, 최악기법을사용하는동적기억장치할당방법을사용 - 다중사용자의세그먼트보호를위해기억장치보호키를이용 5) 페이지교체알고리즘(Page Replacement Method) 선입선출 (FIFO) 최적화 (Optimal) LRU First In First Out 참조된때와관계없이주기적장치에먼저들어온페이지가먼저교체구현하기쉽고간단참조된시점에서그이후로가장오랫동안사용되지않을페이지를선택미래예측이불가능하므로최적화기법은비현실적 Least Recently Used 가장오랫동안사용되지않은페이지를교체할페이지로선택지역성을활용하는알고리즘카운터또는스택을이용하는구현이가능각페이지의사용기간을기억해야하므로오버헤드가큼 LFU Least Frequently Used 페이지별로사용횟수를기억하여사용빈도가가장적은페이지를교체할페이지로선택 바로직전에사용한페이지가교체대상이될수도있음 Not Used Recently 최근에사용하지않은페이지는나중에도사용하지않을가능성이높기때문에최근에 NUR 사용되지않은페이지를교체할페이지로선택 변형비트와참조비트를이용하여교체될페이지의순서를정함 5) 구역성구분 시간지역성 - Temporal Locality - 최근에참조된기억장소가가까운미래에도계속참조될가능성이높음 - 순환(Looping), 서브루틴(Subroutine), 스택(Stack), 계산(Counting) 과집계 (Totaling) 에사용되는변수등

공간지역성 - Spatial Locality - 어떤기억장소가참조되면그근처의기억장소가계속참조될가능성이높음 - 배열(Array Traversal), 순차적코드실행(Sequential Code Execution) 3 과목총정리문제풀이(1) 1. 기계어와가장유사한언어는? 가. Cobol 나. Assembly 다. C 라. Basic 2. 기계어에대한설명으로옳지않은것은? 가.2진수 0과 1 만사용하여명령어와데이터를나타낸다. 나. 컴퓨터가직접이해할수있어실행속도가빠르다. 다. 모든기계에서공통으로사용가능하여호환성이높다. 라. 전문적인지식이없으면이해하기힘들다. 3. 문자열대치, 복사, 치환등과같은문자열의조작을편리하게수행할수있도록여러가지기능을제공하며, 스트림자료활용의예가많은언어는? 가. SNOBOL 나. C 다. PL/I 라. ADA 4. 시스템프로그래밍에가장적합한언어는? 가. C 나. Cobol 다. Fortran 라. Pascal 5. 객체지향프로그래밍언어에해당하지않는것은? 가. C++ 나. Ada95

다. SmallTalk 라. Algol 6. 프로그램개발과정에서프로그램안에내재해있는논리적오류를발견하고수정하는작업은? 가. 컴파일나. 로딩다. 코딩라. 디버깅 7. 어셈블리에서 16 진수상수를정의한명령어는? 가. DC CL3"A2" 나. DC XL3"A2" 다. DC BL3"111" 라. DC PL3"38" 8. 고급언어를기계어로바꾸는역할을하는것은? 가. 로더나. 컴파일러다. 운영체제라. 링커 9. 인터프리터언어에해당하는것은? 가. FORTRAN 나. ALGOL 다. Ada 라. BASIC 10. 원시프로그램컴파일러가수행되고있는컴퓨터의기계어로번역하는것이아니라, 계어로번역하는것은? 가. 프리프로세서 나. 인터프리터다. 로더라. 크로스컴파일러 다른기종에맞는기 11. 대부분의고급프로그래밍언어에서제공하는예약어목록에관한설명으로거리가먼것은? 가. 예약어의사용은프로그램의판독성을저해한다. 나. 프로그램을번역할때예약어의사용은심볼테이블검색시간을단축시킨다. 다. 예약어의사용은오류가발생하였을때오류회복(error recovery) 을가능케한다. 라. 예약어의수가필요이상으로늘어나면프로그래머가모두기억하기가어려우므로프로그래밍이번거롭게될수도있다.

12. 특별한정보는갖고있지않으나, 판독성을향상시키기위하여사용하는구문요소는? 가. 핵심어나. 예약어다. 잡음어라. 연산식 13. 구문도표(syntax diagram) 표기시사용되는기호가아닌것은? 가. [ ] 나. 다. 라. 14. 프로그래밍언어의구문형식을정의하는데가장일반적인표현방식은? 가. Backus-Naur Form 나. Algorithm 다. DNF 라. HIPO 15. BNF 심볼에서정의를나타내는것은? 가. ::= 나. < > 다. 라. 3 과목총정리문제풀이(2) 1. 컴파일러의컴파일단계로옳은것은? 1 어휘분석 2 구문분석 3 중간코드생성 4 의미분석 5 코드생성 6 코드최적화 가. 124365 나. 124563 다. 143562 라. 123456 2. 번역의가장기본적인단계로나열된문자들을기초적인구성요소들인식별자, 구분문자, 연산기호, 핵 심어, 주석등으로그룹화하는단계는? 가. 어휘분석나. 구문분석다. 의미분석

라. 코드생성 3. 고급언어로작성된프로그램을구문분석하여파서에의하여생성되는결과물로서, 구조에따라트리형태로구성한것은? 가. 어휘트리 나. 구조트리다. 파스트리라. 중간트리 각각의문장을문법 4. 어휘분석기(Lexical Analyzer) 에대한설명으로옳지않은것은? 가. 원시프로그램(Source Program) 을읽어들여토큰(Token) 이라는문법적단위(Syntactic Entity) 로분석한다. 나. 프로그래머가프로그램의설명을위해쓴주석(Comment) 은어휘분석기에서모두처리된다. 다. 어휘분석기는일명스캐너(Scanner) 라고도불린다. 라. 어휘분석기는그결과물로서파스트리(Parse Tree) 를생성한다. 5. 주어진문장이정의된문법구조에따라정당하게하나의문장으로서합법적으로사용될수있는가를확인 하는작업으로토큰들을문법에따라분석하는작업을수행하는단계는? 가. 어휘분석(Lexical analyzer) 단계 나. 구문분석(Syntax analyzer) 단계 다. 중간코드생성(Intermediate code generation) 단계 라. 코드최적화(Code optimization) 단계 6. 프로그램에서하나의값을저장할수있는기억장소의이름을의미하는것은? 가. 상수나. 변수다. 주석라. 라이브러리 7. 자료형변환중 widening 에해당하는것은? 가. 정수형을실수형으로변환나. 실수형을정수형으로변환다. 정수형을문자형으로변환라. 문자형을실수형으로변환 8. 동적( 실행시간) 형검사에대한설명으로옳지않은것은? 가. 프로그램설계시융통성을준다. 나. 프로그램이수행되는과정내에자료형을변경할수있다. 다. 대화형언어에적합하다. 라. 프로그램수행중에정보를유지할필요가없다.

9. 프로그램을구성하는함수에서전역변수를사용하여함수의결과를반환하는경우, 함수에전달되는입력파라미터의값이같아도전역변수의상태에따라함수에서반환되는값이달라질수있는현상을무엇이라하는가? 가. reference 나. side effect 다. aliasing 라. recursive 10. 자료객체의별명(Alias) 에관한설명으로옳지않은것은? 가. 자료객체는생존기간중여러별명을가질수있다. 나. 일반적으로별명은프로그램의이해를매우어렵게한다. 다. 자료객체가여러가지별명을갖는경우프로그램의무결점검증이쉬워진다. 라. 같은참조환경에서다른이름으로같은자료객체를참조할수있는언어의경우, 프로그래머에게심각한어려움을줄수있다. 11. C 언어에대한설명으로옳지않은것은? 가. 구조적프로그래밍이가능하다. 나. 시스템소프트웨어를작성하기에편리하다. 다. 기계어에해당한다. 라. 이식성이높은언어이다. 12. C 언어에서반드시포함해야하는것은? 가.main 함수나. 주석문다. 출력문라. 할당문 13. 블록구조에의한영역개념을사용함으로써얻어지는장점으로거리가먼것은? 가. 변수를사용할프로그램의문장근처에서선언하도록하기때문에프로그램의지역성(locality) 을높여준다. 나. 프로그램문장과변수들의지역성은필요로하는기억장소의크기를작게만들게되며, 이는운영체제의working set 을크게하는장점이있다. 다. 프로그램의변수명과삽입되는라이브러리루틴의변수명이같더라도문제점이없게된다. 라. 프로그램의구성을단계적으로세분화하는데도움을준다. 14. C 언어에서사용되는예약어가아닌것은? 가. case 나. switch 다. virtual 라. enum

15. C 언어의자료형이아닌것은? 가. long 나. integer 다. float 라. double 3 과목총정리문제풀이(3) 1. 프로그래머가직접제어를표현하지않았을경우, 는순서제어는? 가. 구조적 나. 명시적다. 묵시적라. 문장수준 그언어에서미리정해진순서에의해제어가이루어지 2. 이항(Binary) 연산에해당하지않는것은? 가. AND 나. OR 다. XOR 라. MOVE 3. 단항연산자(unary) 연산에해당하는것은? 가. AND 나. OR 다. Complement 라. XOR 4. 수학적수식"A+B" 를"+AB" 로표현한기법은? 가. PREFIX 나. INFIX 다. SUFFIX 라. POSTFIX 5. A+(B*C) 를 PREFIX 로표현한것은? 가. +A*BC 나. ABC*+ 다. +*ABC 라. CBA*+ 6. 구조적프로그램의기본구조가아닌것은?

가. 순차(Sequence) 구조 나. 조건(Condition) 구조 다. 일괄(Batch) 구조 라. 반복(Repetition) 구조 7. C 언어에서문장의실행순서를제어하는제어구조(Control Structure) 에해당하는문장으로볼수없는것은? 가. for 나. while 다. if 라. printf 8. 구조화프로그램을설계하기위한설명으로옳지않은것은? 가. 프로그램의이해가쉽고디버깅작업이쉽도록한다. 나. 한개의입구와한개의출구구조를갖도록한다. 다. 실행시간의단축을위해 GOTO 문을가급적많이사용한다. 라. 계층적설계를한다. 9. COBOL 언어의 PERFORM 문, C 언어의 FOR 문에해당되는것은? 가. 반복문나. 선택문다. 조건문라. 선언문 10. C 언어의제어문중성격이다른것은? 가.break문나.continue문다.goto문라.switch문 11. 교착상태의필요조건에해당하지않는것은? 가. 상호배제조건(mutual exclusion) 나. 대기조건(wait) 다. 환형대기조건(circular wait) 라. 중단조건(preemption) 12. PCB(process control block) 의포함정보가아닌것은? 가. 프로세스의현재상태나. 프로세스의생성율및부재율다. 프로세스의고유식별자라. 프로세스의우선순위

13. 주기억장치관리기법중배치(placement) 전략에서입력된작업을가장큰공백에배치하는전략은? 가. best-fit 나. worst-fit 다. first-fit 라. large-fit 14. 인터럽트의종류중프로그래머에의해발생하는인터럽트로서보통입출력의수행, 오퍼레이터와의대화등의작업수행시발생하는것은? 가. 입출력인터럽트 나. 외부인터럽트다. 기계인터럽트라.SVC인터럽트 기억장치의할당및 15. 시간구역성의예가아닌것은? 가. 배열순례(array traversal) 나. 순환(looping) 다. 부프로그램(subprogram) 라. 집계(totaling) 등에사용되는변수