Download presentation
Presentation is loading. Please wait.
1
입문
2
소프트웨어 구분 컴파일러, 에디터 유틸리티
3
시스템 소프트웨어 컴퓨터 하드웨어 자원 (CPU, Memory, 기타 device …)을 관리/제어하는 소프트웨어
예) 운영체제 일반 사용자들이 사용하는 응용 프로그램들을 개발하고 실행하기 위해 기본적으로 필요한 핵심적인 소프트웨어. 예) 쉘(사용자 명령 수행기), 에디터, 컴파일러,…
4
응용 소프트웨어 응용 소프트웨어 (Application Software) 특정한 응용 분야에 사용되는 프로그램
예) 워드프로세서, 웹 브라우저, 항공정보시스템, 급여 프로그램, 성적 프로그램, 인사관리 프로그램, …
5
응용 소프트웨어 예) 웹 브라우저
6
응용 소프트웨어 예) 그래픽/멀티미디어 소프트웨어
7
응용 소프트웨어 예) 이미지 처리/압축 소프트웨어 이미지 변형 이미지 압축
8
Programming Lang. 종류 기계어machine language 어셈블리어assembly language
컴퓨터가 직접 이해가능한 언어 0과1의 조합 어셈블리어assembly language 0과1의 조합을 상징적인 코드로 변환하여 인간의 이해도를 향상 컴퓨터에서 실행되려면 결국 기계어로 변환되어야 함 어셈블러(Assembler)라는 소프트웨어 필요 고급수준언어high-level programming language 인간이 이해하기 가장 쉬운 언어 역시, 기계어로 변환시켜 주는 소프트웨어가 필요 예) FORTRAN, COBOL, PASCAL, BASIC, C, C++, Java...
9
Programming Programming Algorithm 작성 Coding +
10
알고리즘 표현 방법 논리적 순서 표현 i <- 0 sum <- 0 i<- i+1 sum<-sum+i
Flow Chart 방식 start i <- 0 sum <- 0 i < 101 i<- i+1 sum<-sum+i print sum end T F 1부터 100까지의 숫자를 더하기위한 순서도
11
알고리즘 표현 방법 자연어로 표현 의사코드 (pseudo code) 방식 결과값을 0으로 초기화
단계값을 1에서 부터 100까지 증가 연속적으로 결과값에 단계값을 더함 단계값이 100에 다다를 때까지 의사코드 (pseudo code) 방식 코딩하기 전 프로그램 형태 Sum 0 Step 0 While (step <= 100) Sum sum + step Step step + 1 Print Sum
12
Programming Language를 익힌다는 것은?
문법 (Syntax) 변수 (variables) 단위변수, 구조체, 클래스 (객체) 컴퓨터 내부 자료 표현 흐름제어 (sequence control) 반복, 분기, 순차 개발환경 컴파일러 (compiler) 편집기 (editor) 디버거 (debugger) 프로그래밍 알고리즘 작성 코딩
13
Chapter 01 컴퓨터와 프로그램
14
컴퓨터의 구성요소 컴퓨터 compute(계산)하는 기계 컴퓨터는 사람과는 달리 창조적으로 사고할 수 있는 능력이 없으며, 단순히 주어진 명령들만을 수행 컴퓨터의 행동을 지시하는 이러한 명령들을 우리는 프로그램(program)이라고 부르며 이 프로그램을 이용하여 단순한 ‘사실’(fact)을 의미 있는 ‘정보’(information)로 변환하는 역할을 수행하는 것이 컴퓨터가 하는 주요 일 컴퓨터는 기본적으로 전기적인 On/Off 즉 1과 0의 두 가지 신호밖에 인식하지 못한다. 따라서 컴퓨터는 1과 0의 조합으로 구성된 문자, 숫자 등의 데이터를 처리 계산함으로써 원하는 결과를 생성
15
하드웨어와 소프트웨어 하드웨어(Hardware) 소프트웨어(Software)
컴퓨터를 구성하는 물리적인 장치(device)를 의미 소프트웨어(Software) 컴퓨터가 수행할 작업을 지시하는 명령어들의 집합(프로그램) 소프트웨어는 응용 소프트웨어와 시스템 소프트웨어로 나누며, 시스템 소프트웨어는 하드웨어를 작동시키는 기본 소프트웨어
16
컴퓨터의 자료표현 자료표현 원리 비트와 바이트 2진수 체계를 사용 Bit byte 워드 Binary Digit
0 또는 1의 두 개 정보 표현하는 정보의 최소 단위 byte 연속된 8개의 비트 워드 연속된 4 개의 바이트, 총 32비트 실질적으로 시스템마다 워드의 크기는 다를 수 있음
17
저장단위의 크기 단위 현실에서의 기억용량의 단위
18
코드체계 문자 코드 아스키 코드 엡시딕 코드 유니 코드 N비트의 조합에 일정한 문자를 할당하여 지정한 것을 문자 코드
국제 표준인 문자 코드는 아스키코드, 엡시딕코드, 유니코드 아스키 코드 ASCII(American Standard Code for Information Interchange) 국제적인 표준으로 사용하는 문자 코드 체계로서 7비트를 사용하여 128개의 문자, 숫자, 특수문자 코드를 규정 엡시딕 코드 EBCDIC(Extended Binary Coded Decimal Interchange Code)은 8비트를 사용하여 문자를 표현하는 코드 표준으로 IBM에서 제정한 표준 유니 코드 전 세계의 문자를 모두 표현하기 위한 16비트(2바이트)로 확장된 코드 체계 자바 언어에서 기본으로 이용
19
아스키 코드 코드표 아래의 표에서 행의 4개의 비트는 총 7비트의 하위 4개 비트로 표현하며, 열의 3개 비트는 상위 3개 비트를 표현 즉 대문자 A의 코드는 이며, 소문자 a의 코드는
20
여러 진법 10진법 2진법 0에서 9까지의 수를 사용하며, 이 10 가지의 수를 한 자리의 기본 단위로 하는 진법
0과 1의 조합으로 숫자를 표시하는 방법 컴퓨터의 자료 표현은 한 비트가 두 가지 표현이 가능
21
8, 16진법 8진법 16진법 0부터 7까지의 8가지의 수를 이용하여 숫자를 표시하는 진법
0에서 9까지 그리고 A에서 F까지(소문자도 이용 가능) 총 16개의 숫자나 문자를 사용하여 표시하는 진법 문자 A는 10을 의미하며, B는 11, C는 12, D는 13, E는 14, F는 15를 의미
22
양수의 이진표현 10진법의 양수를 2진법으로 바꾸는 규칙 26을 2진수로 바꾸는 과정
위의 계산 과정을 통하여 26 = 단계 1 : 주어진 값을 2로 나누고 그 나머지를 기록한다. 단계 2 : 몫이 0이 아니면 계속해서 새로운 몫을 2로 나누고 그 나머지는 기록한다. 단계 3 : 몫이 0이면 원래 값의 2진 표현은 나머지가 기록되는 순서대로 왼쪽에서 오른쪽으로 나열한다.
23
소수의 이진 표현 10진법의 소수를 2진법으로 바꾸는 규칙
단계 1 : 10진수에 2를 곱하여 나온 결과에서 정수 부분으로의 자리 올림수와 소수점 아래 부분을 따로 보관한다. 단계 2 : 단계 1에서 소수 부분이 0이면 단계 3으로 넘어가고, 아니면 소수점 아래 부분을 다시 새로운 10진수로 하여 단계 1을 반복한다. 단계 3 : 구해진 정수 부분으로의 자리 올림수를 순서대로 나열한다. 위의 규칙을 이용하여 0.625를 2진수로 바꾸는 과정을 그림으로 표현
24
2진수, 8진수, 16진수간 상호관계 2진수, 8진수 그리고 16진수 사이의 관계
8 = 23, 16 = 24 의 관계가 존재하므로 이를 이용하면, 2진수로 표현된 수를 각각 8진수, 16진수로 표현하는데 쉽게 변환이 가능 2진수의 4자리씩을 16진수로 변환하면 쉽게 2진수를 16진수로 변환이 가능 2진수의 3자리씩을 8진수로 변환하면 쉽게 2진수를 8진수로 변환이 가능 26.625를 각각 2진수, 8진수, 16진수로 표현하면 다음 그림과 같음
25
보수(complement) 이진수의 연산에서 1의 보수(complement) 연산 2의 보수
이진수의 비트를 각각 0은 1로, 1은 0으로 변환하는 연산 즉 4비트의 이진수 0100의 1의 보수를 구하면 1011 2의 보수 음수를 표현하는 방식 중 가장 많이 사용되는 방식이 2의 보수 이해를 돕기 위하여 비트의 수가 4인 경우 2의 보수 표현법을 이용한 음수와 양수를 나타낸 표
26
2의 보수 음수의 이진수 표기인 2의 보수를 구하는 방법 1 2의 보수를 구하는 방법 2 2n에서 음수의 절대값을 빼는 방법
예를 들어 –4를 4비트로 2의 보수로 표현하자면, 표현되는 비트의 수가 4개이므로 24 – 4 = 12 = 1100 2의 보수를 구하는 방법 2 예를 들어 –4를 4비트로 2의 보수로 표현하자면
27
정수의 연산 음수는 보수 표현으로 2의 보수를 이용한 음수의 표현 방법을 이용하여 정수의 빼기를 계산하면 그 연산이 매우 간단
즉 4비트의 정보를 표현하는 방법에서 다음과 같이 4-4를 4+(-4)로 표현하여, 각 수를 이진수로 계산하면 간단히 0000이 계산
28
컴퓨터의 정수 표현 정보의 표현 n비트의 표현 컴퓨터는 양수와 음수를 표현하는데, 이진수와 2의 보수 방법을 이용
8비트의 메모리로는 28 가지(256)의 정보를 표현 양수와 음수를 모두 표현하면 -(27)에서 (27 - 1)까지의 범위를 표현 n비트의 표현 결과적으로 2의 보수를 이용하여 n개의 비트를 가지고 정수를 표현하면, 수의 범위는 -(2n-1)에서 (2n-1 - 1)까지의 정수
29
표현범위와 오버플로우 표현범위 오버플로우 다음은 저장공간의 비트 크기에 따른 정수 표현 범위의 최대 값, 최소 값을 나타낸 표
n개의 비트들로는 표현의 한계가 있으므로 이 범위를 넘는 수는 값을 표현할 수 없다는 의미를 가지며 이러한 현상을 오버플로우 한 예로 M = 00112= 3, N = = 6일 때, M + N = = 인데, 이 수는 –7이라는 결과가 나온다. 이는 우리가 원했던 9와는 상이한 답
30
프로그램과 소프트웨어 프로그램 소프트웨어 프로그램은 컴퓨터에게 어떤 일의 수행을 지시하는 명령어(instruction) 집합
소스 특정한 프로그램 언어로 이 명령어의 집합을 모아 놓은 파일을 프로그램 소스(source) 실행파일 이 소스 파일로부터 만들어진 실행 파일은 컴퓨터가 이해할 수 있는 기계어로 명령어를 모아 놓은 파일 소프트웨어 소프트웨어는 보통 ‘프로그램’이라고 부르는 것 외에도 데이터와 문서까지를 포함하는 포괄적인 개념
31
프로그램 소스 C 언어로 작성한 프로그램 소스의 예 1에서 10까지 더한 결과를 출력하는 명령어를 가지는 C 프로그램
32
구현 단계는 흐름도 또는 의사코드를 컴퓨터가 이해할 수 있는 프로그래밍 언어로 번역(translation)하는 단계
소프트웨어의 개발단계 소프트웨어의 생명주기 구현 단계는 흐름도 또는 의사코드를 컴퓨터가 이해할 수 있는 프로그래밍 언어로 번역(translation)하는 단계
33
분석 설계 단계 문제의 분석 단계 설계 단계 시스템을 사용할 사용자의 요구사항을 파악하여 분석하는 단계
사용자의 요구사항은 보통 ‘명세서’를 통하여 제시 예를 들어, 어떤 정수를 입력 받아 해당 정수까지 덧셈을 수행해야 한다면 이러한 내용에 대한 기술이 명세서 설계 단계 분석단계가 끝나면 프로그래머는 소프트웨어 설계에 들어가는데, 알고리즘(algorithm)을 이용하여 설계 사용자 요구사항이 많을수록 알고리즘이 복잡해지며, 이를 지원하기 위하여 사용하는 툴(tool)로서 흐름도(flow chart)나 의사코드(pseudo code) 등을 사용 흐름도는 데이터의 흐름과 수행되는 연산들의 수행순서를 시각적인 기호를 이용하여 나타내는 방법
34
흐름도 하나의 정수 n을 입력 받아서 1부터 n까지 더하는 과정을 계산하는 흐름도
35
의사 코드 1부터 10까지 더하는 과정을 나타내는 의사코드 /* 1부터 10까지 더하는 의사코드 예 */ 프로그램 시작
변수 선언 및 기본값 저장 옆 조건을 만족하면 계속 반복 (i <= 10) { sum = sum + I i = i + 1 } 출력 sum 프로그램 종료
36
구현 단계 흐름도 또는 의사코드를 컴퓨터가 이해할 수 있는 프로그래밍 언어로 번역(translation)하는 단계
위 분석단계의 흐름도 예를 C 언어를 이용한 프로그램 /* file : addn.c */ #include <stdio.h> int main(void) { int i, n; int sum = 0; printf("정수를 입력하세요 : "); scanf("%d", &n); for (i = 1; i <= n; i++) sum = sum + i; } printf("1부터 %d까지의 합은 %d입니다.\n", n, sum); return 0;
37
검사 단계 다음 단계는 프로그램의 검사 및 디버깅(debugging) 단계 구문 오류 논리 오류
디버깅이란 오류를 찾아내고 이를 수정하는 것을 의미 오류에는 구문 오류(syntax error)와 논리 오류(logic error) 두 가지 구문 오류 구문 오류는 문법적인 오류가 있을 때 발생 예를 들어 위의 C프로그램 소스 코드에서 문장 마지막에 위치하는 세미콜론(;)이 빠지면 구문 오류가 발생 논리 오류 반면, for(i = 1; i <= n; i++) 대신 for(i = 1; i < n; i++)로 입력하는 경우에는 논리 오류가 발생 이 경우, 1에서 n-1까지의 합을 구하는 오류가 발생
38
유지 보수 마지막 단계는 프로그램의 문서화 및 유지보수 단계 프로그램에 대한 관리를 쉽게 하기 위해서는 체계적인 문서화가 필요
사용자의 요구사항이 변화했을 경우에는 프로그램을 적절하게 변경시켜야 하는 등 유지보수 작업이 중요
39
소프트웨어 공학 Software engineering 소프트웨어 공학의 목표 장점
소프트웨어 공학은 1970년대 “소프트웨어 위기(Software Crisis)”로 인한 문제점을 해결하기 위한 방안으로 등장 소프트웨어의 품질, 유지관리 등과 관련한 총체적인 어려움을 지칭하는 용어 소프트웨어 공학은 신뢰성 있고 실제 기계에서 효과적으로 작동하는 소프트웨어를 경제적으로 얻기 위해서 올바른 공학적 원리들을 체계화시키고 이용한 것 소프트웨어 공학의 목표 소프트웨어를 경제적으로 개발하며, 신뢰성을 갖춘 소프트웨어의 개발, 소프트웨어의 품질 향상, 개발자의 생산성 향상 및 직무만족도 제고 이러한 목표는 앞에서 언급한 ‘소프트웨어 위기’로 인하여 발생하는 문제점에 대한 해답이라고 볼 수 있음 장점 프로그램 개발에 있어 소프트웨어 공학을 도입함으로써 단순한 프로그래밍으로부터 탈피할 수 있고, 오류의 사후처리가 아닌 사전예방이 강화될 수 있음 아울러 소프트웨어의 재활용 가능성이 높아지는 이점 소프트웨어 공학은 비단 소프트웨어 개발에만 사용되는 것이 아니라, 소프트웨어의 생산성 및 품질을 측정하는 데 있어서 중요한 측정수단 아울러 소프트웨어의 유지/보수에 활용함으로써 보다 효율적인 작업이 가능
40
프로그램 개발환경 개발환경 IDE 개발환경 주요 구성요소
프로그램을 개발하기 위해서는 기본적으로 에디터(editor), 컴파일러(compiler), 링커(linker), 로더(loader), 디버거(debugger) 등이 필요 IDE 이러한 도구를 통합적으로 제공하는 개발 환경을 통합 개발 환경(Integrated Development Environments) 개발환경 주요 구성요소 Compiler 고급언어로 작성된 프로그램을 기계어로 바꾸어주는 프로그램 링커 이러한 여러 개의 목적 코드들을 하나의 프로그램으로 합치는 작업을 수행 디버거 프로그램의 명령을 수행함에 있어 컴퓨터의 상태를 보여주거나 오류 발생시 오류를 쉽게 찾을 수 있도록 도와주는 프로그램
41
컴파일러 프로그램을 만들기 위한 특수한 프로그램 고급언어로 작성된 프로그램을 기계어로 바꾸어주는 프로그램
컴파일러에 의해 처리되기 전의 프로그램을 원시 코드(source code) 컴파일러에 의해 기계어로 번역된 프로그램을 목적 코드(object code) 이러한 원시 코드와 목적 코드가 저장된 파일이 각각 소스 파일, 목적 파일
42
인터프리터와 컴파일러 인터프리터 컴파일러와의 차이 컴파일러처럼 고급언어를 기계어로 번역해주는 역할을 수행
컴파일러는 원시 코드 전체를 읽은 다음 이를 기계어로 번역해 주는데 비하여, 인터프리터는 원시 코드를 한 줄씩 읽어 들여 목적 코드로 변환 프로그램 언어 베이직(BASIC)이 인터프리터를 사용하는 대표적인 프로그램
43
프로그램 제작과정 링커(linker) 디버거(debugger) 로더(loader) 라이브러리
이러한 여러 개의 목적 코드들을 하나의 프로그램으로 합치는 작업 디버거(debugger) 프로그램의 명령을 수행함에 있어 컴퓨터의 상태를 보여주거나 오류 발생시 오류를 쉽게 찾을 수 있도록 도와주는 프로그램 로더(loader) 작성된 프로그램을 컴퓨터의 주기억장치에 로드(load)함으로써 프로그램을 실행 가능하게 하는 역할을 수행 라이브러리 자주 사용하는 프로그램들은 프로그램을 작성할 때마다 새로 작성하는 것이 아니라 미리 만든 다음 컴파일하여 저장해놓는데, 이러한 파일들을 라이브러리(library)
44
프로그래밍 언어 프로그래밍 언어의 필요성 프로그래밍 언어의 분류
사람과 컴퓨터가 서로 의사교환을 하기 위하여 만든 것이 프로그램 언어 프로그램 언어는 사람이 컴퓨터에게 지시할 명령어를 기술하기 위하여 만들어진 언어 프로그래밍 언어의 분류 기계어 0과 1로 표현되는 프로그래밍 언어로서 컴퓨터가 직접 이해할 수 있는 유일한 언어 어셈블리어 기계어의 연산코드와 피연산자를 프로그래머가 좀 더 이해하기 쉬운 기호 형태로 일대일 대응시킨 프로그래밍 언어 고급언어 사람이 이용하는 언어와 유사하여 사람에게 더욱 친근한 프로그램 언어
45
프로그램 언어 프로그램 언어의 발달 프로그램 언어 분류
46
객체지향과 절차적 언어 고급 언어의 분류 절차지향 언어와 객체지향 프로그래밍 언어의 특징
고급 언어로 분류하는 여러 방법 중의 하나가 절차지향(Procedural) 언어와 객체지향(Object oriented) 언어로 나누는 방법 절차지향 언어와 객체지향 프로그래밍 언어의 특징
47
고급 언어의 종류 포트란 포트란(FORTRAN)은 FORmula TRANslating system(수식 번역 시스템)의 약자 과학과 공학 및 수학적 문제들을 해결하기 위해 고안된 프로그래밍 언어 베이직 베이직(BASIC)은 Beginner’s All-purpose Symbolic Instruction Code의 약어 초보자도 쉽게 배울 수 있도록 만들어진 대화형 프로그래밍 언어 코볼 코볼(COmmon Business Oriented Language)은 기업의 사무처리에 적합한 프로그래밍 언어 파스칼 PASCAL은 프랑스의 수학자인 파스칼(Pascal)의 이름에서 따온 언어 프로그램의 작성 즉, 구조적 프로그래밍 및 알고리즘 학습에 적합하도록 개발된 프로그래밍 언어
48
고급 언어의 종류 C C++ C는 유닉스(UNIX)의 운영체제 작성을 위한 시스템 프로그래밍 언어로 설계된 언어
컴파일러나 수많은 소프트웨어 도구(Tool)들도 C언어로 개발 C언어는 프로그램을 기계어 명령에 가까운 형태로 작성할 수 있으므로 다른 고급언어에 비하여 하드웨어에 대한 보다 확실한 통제가 가능 특정 컴퓨터 기종에 의존하지 않으므로 프로그램의 이식성(portability)이 높음 풍부한 연산자와 데이터 형(data type)을 갖고 있기 때문에 범용 프로그래밍 언어로서 널리 보급되었으며, 응용 소프트웨어의 개발에 널리 이용 C++ C++은 객체지향 프로그래밍(OOP Object-Oriented Programming)을 지원하기 위해 C언어가 가지는 장점을 그대로 계승하면서 객체의 상속성(inheritance) 등의 개념을 추가한 효과적인 언어 C++는 C언어의 확장이라고 볼 수 있으므로 기존의 C언어로 개발된 모든 프로그램들을 수정 없이 그대로 사용 가능
49
고급 언어의 종류 자바 자바(JAVA)의 시초는 1992년 미국의 SUN 사에서 가전 제품들을 제어하기 위한 언어에서부터 비롯됨 운영체제나 CPU와는 독립적으로 실행 가능한 프로그래밍 언어 자바는 C++언어의 기초 위에 객체지향 개념을 구현하도록 설계된 언어 분산 네트워크상에서의 프로그래밍이 용이 자바 프로그램의 실행은 운영체제의 가상 머신(Virtual Machine) 위에서 인터프리터 방식으로 작동하므로 프로그램의 속도가 떨어진다는 단점도 지적
50
C, C++, Java 프로그래머에게 매우 중요한 언어 기본은 모두 C 언어
Similar presentations