슬라이드 1

Download Report

Transcript 슬라이드 1

Chapter 05
프로그램 개발과 언어
컴퓨터의 이해
Understanding of COMPUTERS(Second Edition)
• Section 1 프로그램 정의와 특징
• Section 2 프로그래밍 언어의 종류와 특성
– 2-1 저수준 언어
– 2-2 고수준 언어
– 2-3 초고수준 언어
• Section 3 프로그래밍 기법
– 3-1 프로그래밍 절차
– 3-2 프로그램 개발 방법
• Section 4 프로그램 번역과 실행
• Section 5 객체지향 프로그램
– 5-1 객체지향 프로그램의 등장 배경
– 5-2 객체지향 프로그램의 목표
– 5-3 객체지향 프로그래밍 언어들의 특징
– 5-4 객체지향 프로그램의 기본 개념들
– 5-5 여러 가지 객체지향 프로그래밍 언어들
컴퓨터 프로그램이란 무엇인지 알아보고, 그 특징을 살펴보자.
프로그래밍 언어의 종류와 그 특성에 대해서 알아보자.
프로그래밍 기법에 대해서 학습하자.
프로그램을 번역하고 실행하는 원리에 대해서 학습하자.
객체지향 프로그램이 무엇이고, 그 특징은 무엇인지 학습해 보자.
1. 프로그램 정의와 특징
• 프로그램
– 컴퓨터가 처리할 일들을 순서에 맞게 계획해 놓은 것
• 특징
– 프로그래밍 언어의 개념은 단순 명료하고 통일성을 가져야 한다.
– 프로그래밍 언어의 구조는 체계적이어야 한다.
– 응용문제에 자연스럽게 적용할 수 있어야 한다.
– 확장성이 있어야 한다.
– 효율적이어야 한다.
– 외부적인 지원이 가능해야 한다.
05 프로그램 개발과 언어
4
1. 프로그램 정의와 특징
• 최초의 프로그램 내장 방식의 컴퓨터 (130p)
– 1949년에 개발된 에드삭(EDSAC : Electronic Delay Storage Automatic
Computer)
– 헝가리 태생의 수학자인 존 폰 노이만(John von Neumann, 1903~1957)에 의하
여 개발
05 프로그램 개발과 언어
5
2. 프로그래밍 언어의 종류와 특성
2-1 저수준 언어
• 기계어(machine language)
– 컴퓨터의 전기적 회로에 의해 직접적으로 해석되어 실행되는 언어
– 장점 : 컴퓨터 자원을 효율적으로 활용할 수 있음
– 단점 : 복잡하고 어렵기 때문에 프로그래밍 시간이 많이 걸리고 에러가 많음
• 어셈블리어(assembly language)
– 기계어의 명령들을 알기 쉬운 기호로 표시하여 사용한 것
– 장점 : 프로그램의 수행시간이 빠르고, 주기억장치를 매우 효율적으로 이용할 수
있다
– 단점 : 프로그래밍 언어 상호 간의 호환성이 없다
05 프로그램 개발과 언어
6
2. 프로그래밍 언어의 종류와 특성
2-2 고수준 언어
• 절차지향 언어(procedural language)
– 프로그래머가 명령을 순서에 맞게 코드화
– 순차적으로 명령이 실행되면서 문제를 해결할 수 있도록 지원
– FORTRAN, COBOL, PASCAL, C, BASIC 등
• 객체지향 언어(OOP : Object Oriented Programming)
– 객체, 클래스, 상속이라는 개념을 기본으로 사용
– 객체 : 데이터와 데이터에 관련된 연산(operation)으로 구성
– 클래스 : 객체들의 공통적인 성질을 정의
– 상속 : 객체의 정보를 세분화 또는 일반화의 원칙에 따라 조직화하는 방법
– 객체가 상하 계층에서 함께 링크되도록 개발
– 응용프로그램 안에서 되풀이하여 사용 가능
– 응용프로그램들과 공유 가능
– Smalltalk, C++, Java 등
05 프로그램 개발과 언어
7
2. 프로그래밍 언어의 종류와 특성
2-3 초고수준 언어
• 프로덕션지향 언어(production oriented language)
– 주로 컴퓨터 전문가의 프로그래밍과 대형 컴퓨터를 이용한 정보 시스템 개발을
위해 설계
– 컴퓨터 제작 회사의 데이터베이스 관리 시스템 소프트웨어와 함께 구성
– ADR’s Ideal, Software AG’s Natural 2., Cincom’s Mantis 등
• 사용자지향 언어(User oriented language)
– 최종 사용자들을 위해 설계
– 데이터베이스로부터 정보를 얻어내고 기능 중심의 정보를 만들기 위하여 프로그
램을 작성
– Mathematica Products Group’s RAMIS II와 Application Builders’ FOCUS 등
05 프로그램 개발과 언어
8
2. 프로그래밍 언어의 종류와 특성
프로그램 분류 (133p)
구분
종류
기계어
(machine
language)
•제1세대 언어
•폰 노이만의 프로그램 내장 방식에 의해 출현
•컴퓨터가 이해할 수 있는 유일한 언어
•숫자를 사용하여 프로그래밍
•기종에 따라 기계어가 다름(호환성 없음)
어셈블리어
(assembly
language)
•제2세대 언어
•기계어와 1:1로 대응하는 기호 언어
•문자를 사용하므로 기계어에 비해 쉬움
•기종 간의 호환성에서 기계어보다 융통성이 있음
•기계 의존적
저수준
언어
고수준
언어
최고수준
언어
설명
절차지향 언어
(procedural
language)
•제3세대 언어
•1950년대 중반 이후 등장
•자연어에 가까운 단어와 문장으로 구성된 언어
•컴파일러 또는 인터프리터 사용
•기계 독립적
객체지향 언어
(OOP : Object
Oriented
Programming)
•제3세대 언어
•객체, 클래스, 상속 기본 개념 사용
•객체는 상하 계층에서 함께 링크되도록 개발됨
•객체의 재사용 허용
•객체를 다른 응용프로그램에서도 사용 가능
프로덕션지향 언어
(production
oriented
language)
사용자지향 언어
(User oriented
language)
05 프로그램 개발과 언어
•제4세대 언어
•컴퓨터 전문가의 프로그래밍과 대형 컴퓨터를 이용한 정보 시스템 개발을 위해 설계
•컴퓨터 제작 회사의 데이터베이스 관리 시스템 소프트웨어와 함께 구성
•제4세대 언어
•최종 사용자들을 위해 설계
•데이터베이스로부터 정보를 얻어내고 기능 중심의 정보를 만들기 위하여 프로그램을 작성
9
3. 프로그래밍 기법
3-1 프로그래밍 절차 (135p)
05 프로그램 개발과 언어
10
3. 프로그래밍 기법
3-1 프로그래밍 절차
• 문제 분석
– 프로그램에 의하여 해결해야 할 문제가 무엇인지를 명확히 정의
– 문제를 해결하기 위한 여러 가지 방법을 비교, 분석하여 최선의 방법을 결정
– 입력 데이터와 출력 정보 및 프로그래밍에 소요되는 비용이나 기간 등에 대한 조
사, 분석을 통하여 경제적 혹은 능률적인 측면에서의 타당성을 검토
• 입출력 설계
– 입력 설계 : 입력 데이터의 크기와 형태를 결정한 후, 어떤 입력 매체에 어떤 순
서로 배열할 것인가 등을 구체적으로 결정하는 것
– 출력 설계 : 출력 결과를 어떤 매체에 어떤 항목을 어떤 순서로 배열하여 출력할
것인지를 상세히 결정하는 것
05 프로그램 개발과 언어
11
3. 프로그래밍 기법
3-1 프로그래밍 절차
• 입출력 설계 고려사항
– 입력 데이터의 종류와 양을 표현
– 구체적인 데이터 항목, 데이터의 크기와 성격을 표현
– 입력 매체를 결정하여 일정한 양식의 용지에 표현
– 자료 항목을 코드화함
– 출력 설계는 이용 목적에 맞는 적절한 출력 매체를 선정
– 문자 외에 그림, 동영상, 음성 등을 출력할 수 있도록 고려
05 프로그램 개발과 언어
12
3. 프로그래밍 기법
3-1 프로그래밍 절차
• 순서도 작성
– 순서도(flowchart) : 문제를 처리하기 위한 방법과 순서를 단계적으로 일정한 기
호를 사용하여 논리적으로 도표화한 것
• 순서도 작성 요령
– 국제 표준화 기구(ISO : International Standard Organization)에서 정한 표준 기
호 사용
– 논리적인 흐름의 방향은 위에서 아래로, 왼쪽에서 오른쪽으로 서로 교차되지 않
게함
– 간단 명료하게 작성
– 큰 줄거리에서 점차 구체적으로 작성
– 논리적인 흐름이 복잡하고 어려울 때에는 여러 단계로 구분하여 작성
– 순서도 기호 내부에 처리할 내용을 간단히 기술
05 프로그램 개발과 언어
13
3. 프로그래밍 기법
3-1 프로그래밍 절차
• 순서도 기호 (137p)
05 프로그램 개발과 언어
14
3. 프로그래밍 기법
3-1 프로그래밍 절차
• 순서도의 기본 형태 (137p)
05 프로그램 개발과 언어
15
3. 프로그래밍 기법
3-1 프로그래밍 절차
• 프로그램 코딩 및 입력
– 입출력 설계와 순서도의 작성이 끝나면 적절한 프로그래밍 언어를 선택하여 프
로그램 명령문들을 기술하는 과정
• 번역 및 착오 검색
– 컴파일러에 의해 목적 프로그램을 만듬
– 오류와 문법상의 오류가 발생되면 그 원인을 찾아 오류 수정(error debugging)
작업을 한 후 테스트 데이터를 입력하여 논리적인 오류가 발생되는지를 검사
05 프로그램 개발과 언어
16
3. 프로그래밍 기법
3-1 프로그래밍 절차
• 프로그램의 실행
– 프로그램의 문법 오류 및 논리 오류의 수정이 완료되어 완전한 프로그램이 만들
어지면 실제 데이터를 입력하여 처리하고 그 결과를 얻어 활용
• 문서화
– 프로그램의 운영에 필요한 사항을 문서로써 정리하여 기록하는 작업
– 효과
•
프로그램의 개발 목적 및 과정을 표준화하여 효율적인 작업이 이루어지게 함
•
프로그램의 유지 보수를 쉽게 함
•
개발과정에서의 추가 및 변경에 따른 혼란을 줄일 수 있음
05 프로그램 개발과 언어
17
3. 프로그래밍 기법
3-2 프로그램 개발 방법
• 상향식 프로그래밍(bottom-up programming)
– ‘밑에서 위로’ 프로그래밍하는 것
– 현실적인 사물의 구조에 기초해서 개발을 하기 때문에 일반화하기가 쉬워서 유
연한 코드를 작성할 수 있음
– 구조가 너무 복잡해져 프로그래밍 분석과 수정이 어려워질 수 있음
• 하향식 프로그래밍(top-down programming)
– ‘위에서 아래로’ 프로그래밍을 하는 것
– 초반에 기능을 구현할 때 고려해야 하는 범위가 좁기 때문에 개발할 때 많이 고
민할 것 없이 해당 기능에 맞게 간단하게 구현이 가능
– 너무 간단하게만 생각한 나머지 자칫 딱딱하고 고정적인 프로그램을 만들 수 있
음
05 프로그램 개발과 언어
18
3. 프로그래밍 기법
3-2 프로그램 개발 방법
• 구조적 프로그래밍 방법
– 다익스트라(Edsger Wybe Dijkstra, 1930~2002)가 일반화시켰음
– 프로그램의 각 요소들을 작은 규모로 조직화하여 프로그램 전체를 명확한 구조
로 나타낼 수 음
– 단일 입출구를 가지게 하고, 순차(직선형구조), 선택(분기형구조), 반복(반복형구
조)의 세 가지 구조만으로 구성
– 신뢰도와 이해도 및 검증성을 높여주고 있음
• 객체지향 프로그래밍 방법
– 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많
이 사용
– 개발과 보수가 간편
– 직관적인 코드 분석을 가능
05 프로그램 개발과 언어
19
4. 프로그램 번역과 실행
• 어셈블러 (140p)
– 어셈블리어로 작성된 원시 프로그램을 기계어로 번역하는 언어 처리기
– 어셈블리어는 기계어와 1:1의 대응관계로 기호화한 언어이므로 번역 절차가 비
교적 간단
– 어셈블러에 의하여 목적 프로그램이 만들어지면 로더에 의하여 실행 가능한 형
태로 주기억장치에 적재되어 실행 프로그램으로서의 기능을 수행
05 프로그램 개발과 언어
20
4. 프로그램 번역과 실행
• 컴파일러 (140p)
– 포트란, 코볼, 파스칼, C 등과 같은 고급언어로 작성된 원시 프로그램을 기계어로
번역하는 언어 처리기
• 인터프리터
– 원시 프로그램을 입력받아 명령문 단위로 기계어로 해석하여 바로 실행하는 방
법
05 프로그램 개발과 언어
21
5. 객체지향 프로그램
5-1 객체지향 프로그램의 등장 배경
• 소프트웨어 생산성의 위기(software productivity crisis)
– 초창기 소프트웨어는 규모 면에서도 작았을 뿐만 아니라 기능도 비교적 단순
– 시간이 흘러감에 따라 규모를 키우기 시작
– 소프트웨어가 점차 대형화되어 가면서 유지하고 보수하는 작업 역시 어려운 작
업이 되어감
– 근본적인 원인인 다른 기종, 다른 전산 환경을 해결하는 개방형 소프트웨어 기술
과 점차 복잡해져 가는 소프트웨어의 효율적인 개발 문제를 해결하지 못하였기
때문
– 위기를 해결하기 위해서는 새로운 개발 방법과 원칙이 필요
– 근본적인 원인을 해결하고자 객체지향 프로그래밍 기술이 등장
05 프로그램 개발과 언어
22
5. 객체지향 프로그램
5-2 객체지향 프로그램의 목표
• 객체지향 프로그램의 궁극적 목표
– 각각의 소프트웨어 모듈(module)을 하나의 객체(object)로 만들어 보관
– 다른 소프트웨어를 개발할 때에 프로그램 코드를 전혀 변경하지 않고 다시 사용
할 수 있도록 함
– 소프트웨어의 모듈들을 재사용할 수 있도록 하여 소프트웨어 개발의 생산성을
향상시키고자 하는 것
05 프로그램 개발과 언어
23
5. 객체지향 프로그램
5-2 객체지향 프로그램의 목표
• 구조적 프로그램 방법 vs. 객체지향 프로그램 방법 (142p)
05 프로그램 개발과 언어
24
5. 객체지향 프로그램
5-3 객체지향 프로그래밍 언어들의 특징
• 기존 대부분의 언어들이 프로그램의 프로세스 흐름을 표현하는데
비중을 두고 개발
• 객체지향 언어들은 데이터나 정보의 표현에 비중을 두고 개발
– 데이터 주도 프로그램 설계(Data-driven Program Design)
• 객체지향 언어들은 전역 변수를 거의 사용하지 않음
• 객체와 클래스란 장치를 사용하여 프로그램을 설계함으로써 모듈
간의 높은 독립성을 유지
• 객체지향 프로그래밍 언어들은 클래스 간의 상속 관계를 정의할 수
있도록 하여 한 프로그램 내의 중복 코드를 최소화
• 유지 보수가 쉽다.
05 프로그램 개발과 언어
25
5. 객체지향 프로그램
5-4 객체지향 프로그램의 기본 개념들
• 객체 (143p)
– 객체지향 기술의 핵심 개념
– 실세계의 객체들은 상태(state)와 행동
(behavior)의 두 가지 특징을 가짐
– 실세계 객체를 바탕으로 모델링
– 상태를 나타내기 위하여 한 개 혹은 그
이상의 변수(variables)들을 사용
– 행동들은 메소드(method)로 표현
•
객체와 관련된 함수(function)
05 프로그램 개발과 언어
26
5. 객체지향 프로그램
5-4 객체지향 프로그램의 기본 개념들
• 추상화(abstraction)
– 객체지향 프로그램에서 객체는 추상화 개념으로 표현
– 실세계에 있는 여러 객체들 중 실제 프로그램에 사용될 요소를 추출하는 것
– 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는
것
– 클래스(Class)라는 개념을 사용함으로써, 프로그래머가 임의로 데이터 타입을 정
의하여 사용할 수 있음
05 프로그램 개발과 언어
27
5. 객체지향 프로그램
5-4 객체지향 프로그램의 기본 개념들
• 클래스
– 자료형
•
컴퓨터가 어떤 값을 기억하고 있기 위해서 사전에 그 정보(값)가 어떤 종류인지 알려서 효율적으로 제
한된 컴퓨터 자원을 사용할 수 있게 하려고 만들어진 개념
– 클래스
•
원래 자료형에서 출발된 개념
•
자료형은 하나밖에 자료를 담지 못하는 한계 때문에 여러 개를 담기 위하여 배열이라는 것을 만듬
•
한 가지 자료형밖에 못 넣는 배열의 한계를 극복하고자 구조체가 만들어졌음
•
구조체는 자료형 값이 나타내는 상태만 담을 수 있을 뿐이지 행위는 담지 못함
•
구조체에 메소드(함수)를 포함시켜 탄생된 것이 클래스
– 객체지향 프로그램에서 클래스(class)
•
특정 종류의 객체 내에 있는 변수와 메소드를 정의하는 일종의 틀, 템플릿(template)
•
프로그래머가 직접 만들 수 있는 일종의 특별한 자료형
05 프로그램 개발과 언어
28
5. 객체지향 프로그램
5-4 객체지향 프로그램의 기본 개념들
• 캡슐화(encapsulation) 와 정보은닉(information hiding) (145p)
– 소프트웨어의 객체 구조는 상태를 가지는 변수를 메소드가 감싸고 있는 형태
– 내부에 있는 변수가 외부의 메소드에 의하여 보호되는 형태
– 객체 외부 동작이 일어날 때 내부의 일에 대해서는 알 필요가 없다는 개념으로
이해
05 프로그램 개발과 언어
29
5. 객체지향 프로그램
5-4 객체지향 프로그램의 기본 개념들
• 상속 (145p)
– 클래스는 다른 클래스에 의해 정의될 수 있음
– 승용차, 트럭, 승합차는 모두 자동차의 한 종류
•
승용차, 트럭, 승합차는 모두 자동차 클래스의 서브 클래스(subclass)
•
자동차 클래스는 승용차, 트럭, 승합차의 슈퍼 클래스(superclass)
– 서브 클래스들은 슈퍼 클래스로부터 상태와 행위를 상속
05 프로그램 개발과 언어
30
5. 객체지향 프로그램
5-4 객체지향 프로그램의 기본 개념들
• 다형성과 오버로딩
– 객체지향 프로그래밍에서는 다형성(polymorphism) 또는 연산자 오버로딩
(operator over-loading)이라는 개념을 지원
– 다형성
•
•
•
객체지향의 중요 개념 중에 하나
“one interface, multiple implementation”이란 용어로 표현
하나의 인터페이스를 이용하여 서로 다른 구현 방법을 제공하는 것
– 연산자 오버로딩
•
프로그래밍 언어 또는 프로그래머에 의하여 이미 어떤 함수가 정의되어 있을 때, 동일한 이름을 가지
는 새로운 함수를 정의함으로써 과거에 정의되었던 함수가 사용되지 못하도록 하는 개념
•
다형성의 바탕에서 성립될 수 있는 프로그래밍 개념
05 프로그램 개발과 언어
31
5. 객체지향 프로그램
5-5 여러 가지 객체지향 프로그래밍 언어들
• 혼합(Hybrid) 객체지향 언어
– 기존의 절차적(Procedural) 언어를 객체지향식 프로그래밍도 가능하도록 확장
– 한 프로그램 안에서 절차적 프로그래밍과 객체지향 프로그래밍이 모두 가능
– 이미 개발된 절차적 프로그램이나 라이브러리를 활용하면서 객체지향식 프로그
램을 개발할 경우는 이런 혼합 언어가 적절
• 순수(Pure) 객체지향 언어
– SIMULA라는 언어에서 시작
– Smalltalk, Eiffel, Actor 등으로 연결이 되는데, Smalltalk 언어가 대부분의 중요한
객체지향 언어들에 많은 영향을 주었음
– 널리 사용되는 C++ 언어도 기존의 C 언어와 Smalltalk 언어에서 발전된 것
05 프로그램 개발과 언어
32
5. 객체지향 프로그램
5-5 여러 가지 객체지향 프로그래밍 언어들
• 언어 선택의 일반적인 지침 (147p)
– 목표 시스템에 대한 알려져 있는 정보를 나열한다.
– 목표 시스템에서 요구되는 기능, 성능 사항, 특성 및 상황을 분석한다.
– 각 대상 언어가 가지는 기능과 특성을 나열한다.
– 목표 시스템의 요구 사항들을 가장 많이 지원하는 언어를 선택한다.
05 프로그램 개발과 언어
33
• 컴퓨터 프로그램
•
컴퓨터가 처리할 일들을 순서에 맞게 계획해 놓은 것
• 프로그래밍 언어의 종류
– 저수준 언어
•
기계어, 어셈블리어
– 고수준 언어
•
절차지향 언어, 객체지향 언어
– 초고수준 언어
•
프로덕션지향 언어, 사용자지향 언어
• 프로그래밍 절차
•
문제 분석 → 입출력 설계 → 순서도 작성 → 프로그램 코딩 및 입력 → 번역 및 착
오 검색 → 실행 → 문서화
• 프로그램 개발 방법
– 상향식 프로그래밍
•
‘밑에서 위로’ 프로그래밍
– 하향식 프로그래밍
•
‘위에서 아래로’ 프로그래밍
– 구조적 프로그래밍
•
순차, 선택, 반복의 세 구조로 구성
– 객체지향 프로그래밍
•
객체들의 모임으로 파악
• 프로그램 번역
•
작성된 프로그램을 컴퓨터에서 읽을 수 있도록 변형
•
종류 : 어셈블러, 컴파일러, 인터프리터
• 객체지향 프로그램
– 등장 배경
•
소프트웨어 생산성의 위기를 극복하고자 등장
– 목표
•
모듈의 재사용, 유지, 보수, 확장을 개선
– 특징
•
데이터나 정보의 표현에 비중을 둠
•
전역 변수를 거의 사용하지 않음
•
중복 코드의 최소화
•
유지 보수가 쉬움
– 기본 개념들
•
객체 : 실세계에서 찾아볼 수 있는 것
•
추상화 : 실세계에 있는 여러 객체들 중 실제 프로그램에 사용될 요소 추출
•
클래스 : 사용자가 정의한 자료형
•
캡슐화, 정보은닉 : 상태를 가지는 변수를 메소드가 감싸고 있는 형태
•
상속 : 클래스는 다른 클래스에 의해 정의 가능
•
다형성 : 하나의 인터페이스를 이용하여 서로 다른 구현 방법을 제공