CHAPTER 05 프로그래밍
차례 프로그래밍이란 프로그래밍 언어 프로그램 구현 기법 프로그램 실행 과정 프로그래밍 절차 C로 작성한 프로그램 예
SECTION 01 프로그래밍이란
01 프로그래밍이란 프로그램(program) 프로그래밍(programming) 특정한 작업을 수행하기 위해 컴퓨터가 실행하는 명령어의 나열 컴퓨터에게 주어지는 일련의 명령문들 프로그래밍(programming) 프로그램을 만드는 과정 프로그래머들이 컴퓨터가 일을 하도록 명령하는 일련의 창의적인 과정 프로그래밍 언어(programming language)
Quiz C 언어 C 언어 프로그램
Program Development Life Cycle 프로그램을 개발하기 위한 일련의 반복적인 과정
Who / How Good Programmer ?
SECTION 02 프로그래밍 언어
What is best programming language ? 02 프로그래밍 언어 기계어와 자연 언어의 중간 형태로 고안된 언어 컴퓨터가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 서술하기 위한 표기 체계 작성된 프로그램을 기계어로 번역해주는 프로그램 필요 주어진 문제의 종류나 프로그램의 용도 등을 고려하여 선택 What is best programming language ?
기계어 (machine language) 저급 언어(low-level language) 하드웨어에 의존적인 언어 컴퓨터가 직접 이해할 수 있는 언어(0과 1의 이진수) [Quiz] 만일 컴퓨터가 32bits 에서 62bits로 변경되면… By Human In MIPS 001001 11101 11101 1111111111111000 001000 00001 00000 0000000000001010 001000 00001 00001 0000000000000010 101011 11101 00001 0000000000000000 001000 00010 00001 0000000000000100 101011 11101 00010 0000000000000100 001001 11101 11101 0000000000001000 x = 10+2 y = x+4
어셈블리어 (assembly language) 니모닉화한 언어 : 기계어의 명령문을 기호로 나타낸 언어 어셈블러(assembler)를 이용하여 기계어로 번역함 예: X와 Y를 더한 값을 Z에 저장한다
고급 언어(high-level language) C, C++, Java 등 컴파일러(compiler)를 이용하여 기계어로 번역함 예: X와 Y를 더한 값을 Z에 저장한다
2.2 프로그래밍 언어의 세대 세대 종류 1세대 1945년 기계어 2세대 1950년대 중 어셈블리어 3세대 1960년대 초 고급 언어. Fortran, COBOL, BASIC, C 절차적 언어 4세대 1970년대 초 초고급 언어, C++, VB, Delphi 문제 해결형 언어(비절차적 언어) (예)마우스나 키보드 이벤트가 일어나면 절차에 상관없이 비절차적으로 실행 5세대 1980년대 초 자연 언어 시각적 그래픽 인터페이스를 통해 3G/4G 언어 컴파일러로 컴파일 할 수 있는 원시코드를 작성
포트란(FORTRAN, FORmula TRANslation) 1954년 IBM컴퓨터에서 과학 계산을 위해 개발된 고급 언어 수학 연산식의 기술이 용이 Fortran 77 (~1990년대), Fortran 90/95, Fortran 2003, Fortran 2008 최신 버전에서는 VS2008에서 Visual Fortran 실행 Source.f90 PROGRAN power READ (*,*) x,y Z=x**y WRITE (*,*) z END PROGRAN
COBOL (COmmon Business Oriented Language) 제3세대 프로그래밍 언어이고, 1959년 일반 사무처리 언어로 개발되어 지금도 사용 코볼 2002(COBOL 2002)부터 객체 지향 프로그래밍도 포함
BASIC (Beginner’s All-purpose Symbolic Instruction Code) 1964년에 교육용으로 개발된 절차형 언어 인터프리터 방식 또는 컴파일러 방식 10 PRINT "Hello, world!“ 20 END INPUT "이름을 입력하세요"; UserName$ PRINT "안녕하세요 "; UserName$ DO INPUT "별이 몇 개 필요하세요? "; NumStars Stars$ = "“ Stars$ = REPEAT$("*", NumStars) '<-ANSI BASIC PRINT Stars$ INPUT "별이 더 필요하세요(Y/N)?"; Answer$ LOOP UNTIL Answer$ <> "“ LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "Y“ PRINT "안녕히 가세요 "; FOR A = 1 TO 200 PRINT UserName$; " "; NEXT A PRINT
C 1972년에 유닉스 운영체제에서 사용하기 위해 개발된 프로그래밍 언어 시스템 프로그램 개발에 적합 (하드웨어에 대한 직접 제어가 가능) #include <stdio.h> int main(void) { printf("hello, world\n"); return 0; }
C++ C 언어의 확장 (C 언어 + 객체지향성)이므로 시스템 프로그래밍에 적합 Class, 연산자 중복, 가상 함수와 상속성 비야네 스트롭스트룹
Visual C++, Visual.NET MS사가 개발한 C++언어와 windows의 개발통합환경을 결합하여 Windows 시스템을 쉽게 개발할 수 있는 소프트웨어 언어 및 도구 # include <iostream> // std::cout을 제공 using namespace std; // std namespace를 사용할 수 있게 함 int main() { cout << "Hello, world!" << endl; return 0; }
JAVA 가전제품의 네트워크 제어를 목적으로 탄생 (SUN Microsystem 社) 현재 웹 어플리케이션 개발과 모바일 기기용 소프트웨어 개발에 널리 사용 문법적으로 C 언어에 매우 유사 Java 언어로 작성된 프로그램을 컴파일러는 바이트코드라는 바이너리 형태로 변환 이를 실행하기 위해서는 JVM(Java Virtual Machine)이 필요. 따라서, 바이트코드는 CPU나 운영체제의 제한이 없음 결과적으로, 플랫폼에 독립적인 객체지향 언어가 탄생 Eclipse, J builder는 자바와 Windows 통합 개발 환경을 결합한 소프트웨어 언어 및 도구 애플릿 (Applet) - HTML에 포함되어 웹 브라우저에서 실행되는 자바 프로그램 James Gosling
HTML (Hyper Text Markup Language) 웹 문서를 작성할 수 있도록 한 표준형식 (일종의 서식언어) 기능의 한계 Flash – 웹 애니메이션 VRML – 3D 구현 JAVA – 다양한 효과 JavaScript – 동적인 효과 ASP – 게시판 방명록 Tim Berners <html> <head> <title>Hello HTML</title> </head> <body> <p>Hello World!</p> </body> </html>
TIOBE programming community index
SECTION 03 프로그램 구현 기법
번역 기법 (translation) 원시 프로그램을 컴퓨터가 이해할 수 있는 기계어로 번역하여 목적 프로그램(object program)으로 만드는 방법 목적 프로그램 목적 코드(object code) 기계어로 번역된 프로그램 프로그래밍 언어마다 각각 다름 어셈블러(assembler) 컴파일러(compiler)
어셈블러 (Assembler) 어셈블리어로 작성된 원시 프로그램을 기계어로 번역하여 목적 프로그램으로 만들어주는 번역기
컴파일러(compiler) 고급 언어(포트란, 코볼, C, C++ 등)로 작성된 원시 프로그램을 기계어로 된 목적 프로그램으로 만들어주는 번역기
인터프리터(interpreter) 베이직과 같은 고급 언어로 작성된 원시 프로그램을 명령문 단위로 하나씩 읽어서 기계어로 번역한 후에 바로 실행되도록 함 인터프리터 고급언어로 작성된 원시 프로그램 입력자료 실행결과
하이브리드(hybrid) 기법 번역 기법과 인터프리터 기법 모두를 사용하는 기법 (예) 네트워크를 통한 Java 프로그램 실행 과정
혼합 기법: Java의 프로그램 변환 & 실행 Java Compiler (javac) Interpreter (java) Class Name .class .java 실행 결과
프로그래밍 언어와 자바 언어의 비교 Java 소스코드 일반 A기종 컴파일러 B기종 BYTE 코드 (플랫폼 독립) 기계어 코드 인터프리터
SECTION 04 프로그램 실행 과정
프로그램 실행 과정 Syntax Error Linking Runtime Compile Link Load 원시 프로그램 (Source) 목적 프로그램 (Object) 실행 프로그램 Compiler Linker Loader Compile Link Load Library Syntax Error Linking Runtime
코딩(coding) 원시 프로그램을 작성하는 과정 문서 편집기(text editor) 사용
컴파일 목적 파일(object file) 생성
링크 따로 작성되거나 컴파일된 파일들을 모아 실행 가능한 하나의 단위로 만들어진 프로그램으로 연결하는 과정 실행 파일(executable file) 생성
실행 결과 실행 결과 확인 프로그램 실행 과정 원시 파일 => 컴파일러 => 목적 파일 => 링커 => 실행 파일 => 로더 => 실행
SECTION 05 프로그래밍 절차
05 프로그래밍 절차
5.1 문제 분석 해결해야 할 문제를 정확하게 이해하는 단계 프로그램 사용자 파악 컴퓨터로 처리 가능한지의 여부 결정 입출력 데이터의 내용과 형식 등 결정
5.2 알고리즘 설계 (1/2) 알고리즘(algorithm) 순서도(flowchart) 등을 사용하여 설계 문제를 해결하기 위한 방법과 절차 순서도(flowchart) 등을 사용하여 설계 순서도(flowchart) 처리할 일의 내용과 흐름을 약속된 기호로 간결하게 나타내는 그림
5.2 알고리즘 설계 (2/2) 구조적 프로그래밍(structured programming) 하향식 설계(top-down design) 방법, 모듈화, 제어 구조(control structure)를 사용하여 작성하는 방식 세 가지 기본적인 제어 구조
5.3 프로그램 구현 설계된 알고리즘에 따라 적합한 프로그래밍 언어를 선택하여 코딩(coding) 함 컴파일 과정을 거치면서 구문 오류(syntax error)가 발생하면 수정하고 다시 컴파일 과정을 반복함 모의 실행을 통해 논리 오류(logical error)를 수정함
5.4 프로그램 문서화 및 유지 보수 프로그램의 문서화(program documentation) 하드웨어와 소프트웨어의 요구 사항, 입출력과 프로그램 파일 관리 등 프로그램 운영에 필요한 모든 사항을 문서로 정리하여 기록하는 작업 유지 보수(maintenance) 프로그램을 항상 오류가 없는 상태, 최신의 상태로 유지하기 위한 활동
SECTION 06 C로 작성한 프로그램 예
6.1 세 과목의 점수를 출력하는 프로그램 프로그램 출력 결과
6.2 세 과목의 점수를 입력받고 총점을 출력하는 프로그램 출력 결과
6.3 세 학생의 점수를 입력받고 총점을 출력하는 프로그램 출력 결과
The End