• 검색 결과가 없습니다.

제11장 프로그래밍

N/A
N/A
Protected

Academic year: 2023

Share "제11장 프로그래밍"

Copied!
69
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

제11장 프로그래밍

컴퓨터공학 개론

(2)

학습 목표

 프로그램의 정의와 개발 방법에 대해 배운다

 저수준 언어와 고수준 언어의 차이점을 이해한다

 어셈블리 프로그래밍 언어의 예를

이용하여 저수준 언어의 기초를 배운다

 알고리즘과 의사코드를 포함한

프로그램의 구조에 대해 배운다

(3)

학습 목표 (계속)

 Java의 예를 이용하여 고수준 언어의 기본을 이해한다

 변수에 대해 배우고 그 활용 방법을 배운다

 Java 연산자를 사용해본다

 프로그래밍에 사용되는 제어 구조를 경험해본다

 객체-지향 프로그래밍과 연관된 용어를

(4)

프로그램의 정의

 어떤 문제를 해결하기 위한 문장이나 명령을 수행하는 절차들의 집합

 컴퓨터가 이해할 수 있는 언어로 변환되어야 한다

알고리즘: 논리적으로 순서화된 문장의 집합

변환 작업은 인터프리터 또는 컴파일러를 통해 수행된다

인터프리터는 프로그램 문장을 한 줄씩 해석한다

컴파일러는 모든 문장을 읽어와서 완성된 프로그램을

(5)

컴퓨터와 대화하기

 여러분이 어떤 언어를 사용할 지 결정한다

어셈블리어는 하드웨어 제어에 적합

Java, JavaScript는 인터넷 응용에 주로 사용

Lisp는 인공지능 분야에 사용

Visual Basic은 단순하지만 강력한 그래픽 사용자 인터페이스 환경을 제공

그 밖에 C, C++, Smalltalk, Delphi, ADA, FORTRAN, COBOL 등의 언어가 사용된다

(6)

프로그래밍 언어의 유형

 저수준 언어

사람보다는 컴퓨터가 이해하는 방식에 가까운 프로그래밍 언어

기계어는 컴퓨터가 바로 이해할 수 있는 최저 수준의 언어

어셈블리어는 최저수준 언어와 고수준 언어 사이의 언어

어셈블러는 어셈블리어 코드를 기계어로 번환

 고수준 언어

사람에게 친숙하고 자연스러운 언어

(7)

그림 11-1

프로그래밍 언어의 유형

(8)

저수준 언어

 기계어는 이진수만으로 이루어진다

 어셈블리어는 기계어에 비해 영어와 유사하다

각 문장이 기계 명령어에 대응된다

고수준 언어에 비해 빠른 실행이 가능하다

특정 CPU 유형에 매우 밀접한 특성을 지닌다

고수준 언어보다 읽고 이해하기가 어렵다

(9)

어셈블리어의 문장

 연산자와 레지스터 등을 포함하는 알파벳 형식의 명령어로 구성된다

mov 문은 값들을 이동시킨다

mov cx, 8

add 문은 값을 더한다

mov cx, 3

mov dx, 8

add dx, cx

(10)

어셈블리어의 문장(계속)

inc 문은 레지스터의 값을 증가시킨다

inc dx

cmp 문은 두 값을 비교한다

mov cx, 4

mov dx, 7

cmp dx, cx (dx - cx = 0이면 제로 플래그가 1이

된다)

jnz 문은 프로그램의 특정 위치로 이동시킨다

jnz stop (제로 플래그가 1일 때 stop으로

표기된 위치로 이동한다)

(11)

고수준 언어

 저수준 언어에 비해 읽고, 쓰고, 이해하기가 쉽다

 한 개의 문장으로 보다 많은 작업을 수행할 수 있다

 일반적으로 느리다

컴파일이나 인터프리트 과정이 필요하다

 많은 언어들이 통합 개발 환경(IDE:Integrated Development Environment)을 포함한다

편집기, 컴파일러, 그래픽 디자이너 등을

(12)

그림 11-2

(13)

프로그램의 구조

 프로그램의 구조는 알고리즘을 기반으로 하는데, 이는 주로 의사코드로 표현된다

알고리즘: 어떤 문제를 해결하기 위해 따라야 하는 실행 가능한 단계

의사코드: 사람의 언어 형식으로 작성된 알고리즘에 대한 판독 가능한 설명문

프로그래밍 언어 구문으로 변환될 템플릿

(14)

의사코드의 예

 화씨 온도에서 섭씨 온도로의 변환

사용자에게 화씨 온도를 입력받는다

입력된 온도를 섭씨 온도로의 변환식에 대입한다

섭씨 온도 = (5/9) * (화씨 온도 - 32)

화씨 온도 ##에서 변환된 섭씨 온도 XX를 출력

(15)

알고리즘의 선택과 테스팅

어떤 임무를 수행하거나 목표를 달성하기 위해서는 여러 가지 다양한 방법들이 사용될 수 있다

무수한 결정요인들을 기반으로 프로젝트에 가장 적합한 알고리즘을 선택하라

알고리즘의 테스트를 위해 여러분이 최종 사용자라고 가정하고 프로그램을 구동시켜봐야 한다

온도변환의 예: 만약 사용자가 숫자를 입력하지 않는다면?

유효한 값이 입력되었는지를 검사하도록 의사코드를 변경한다

(16)

테스팅을 통해 의사코드를 변경

 사용자에게 화씨 온도를 입력받는다

 숫자가 입력된다면

입력된 온도를 변환식에 대입한다

섭씨 온도 =

(5/9) * (화씨 온도 - 32)

화씨 온도 ##에서 변환된 섭씨 온도 XX를 출력한다

 그렇지 않다면

(17)

프로그래밍 언어의 구문

 프로그램 작성은 요리법 (알고리즘이나

의사코드)에 따라 재료들을 정확히 섞어 음식 (프로그램)을 만들어내는 과정에 비유될 수 있다

 음식의 재료들은 다음과 같다

변수

연산자

제어 구조

(18)

Java의 요리법

 Java는 썬에 의해 개발된 고수준 언어이다

친숙한 구문 (C++ 구문과 유사)

이식성이 좋다

재컴파일 없이도 다른 컴퓨터에서 동작 가능

강력하다

많은 작업을 수행할 수 있는 풍부한 라이브러리를 가지고 있다

상용화되어 있다

다양한 응용의 개발에 사용되고 있다

(19)

변수

 변수: 컴퓨터 메모리의 특정 위치와 값을 식별하기 위해 사용되는 이름

실제 하드웨어의 주소를 알 필요없이 컴퓨터 메모리에 접근할 수 있는 방법을 제공

변수에 식별자를 부여하는 것을 변수를 선언한다고 말한다

변수를 선언할 때, 식별자나 자료형, 내용 등과 같은 여러 속성을 지정하게 된다

(20)

식별자와 명명 기법

 Java의 변수 선언 규칙

영문자, 밑줄, 숫자만 사용

영문자로 시작한다

Java에서 특수한 프로그래밍 의미를 가지는 예약어는 사용할 수 없다

 명명 기법

의미있는 이름으로 식별자를 정하여라

첫 번째 단어의 첫 문자는 소문자로 하되, 후속된 단어들의 첫 문자는 대문자로 하라

(21)

변수의 종류

 모든 변수는 강한 타입(strongly typed)을 가진다

각 변수에 저장될 데이터의 타입을 선언해주어야 한다

8가지의 데이터 타입 제공 (표 11-1에서 11-4까지 제공)

 변수 선언 구문

type variableName;s

 예

float salary;

boolean deserveRaise;

(22)

11-1, Java

의 정수형 데이터 타입

(23)

11-2, Java

의 실수형 데이터 타입

(24)

11-3, Java

의 문자형 데이터 타입

(25)

11-4, Java

의 불리언 데이터 타입

(26)

문자열 데이터 타입

 문자형 데이터 타입은 단일 인용 부호 안에 영문자 하나를 포함한다

 문자열 데이터 타입은 이중 부호의 쌍 안에 하나 또는 그 이상의 영문자를 포함한다

String sFirstName = “Joe”;

String sLastName = “Blow”;

 문자열 접합 연산자(+)는 여러 문자열을 하나로 결합시킨다

String sFullName;

(27)

헝가리 표기법

 변수의 명명 방법

변수 앞에 그 변수의 데이터 타입을 나타내는 문자를 붙이는 방법

단지 가독성을 높이기 위한 방법임

변수가 반드시 해당 데이터 값을 저장해야 하는 것은 아니다

(28)

11-5, Java

의 헝가리 표기법

(29)

변수의 내용

 변수 초기화는 변수를 선언하면서 동시에 그 변수에 값을 할당하는 것을 말한다

프로그래밍 언어에서 디폴트 값을 할당하게 하는 것보다는 변수 초기화를 하는 방법이 더 낫다

 두 문장을 사용하는 방법

int iStudentCount;

iStudentCount = 456;

 한 문장으로 결합시킨 방법

(30)

연산자

 데이터 조작에 기호가 사용된다

 데이터 타입에 의한 분류

덧셈, 뺄셈, 곱셈, 나눗셈, 모듈로 연산을 위한 산술 연산자

이진 수식에 사용될 수 있는 약식 표기

 iFirstNum = iFirstNum + iSecondNum;

은 다음의 문장과 같다

iFirstNum += iSecondNum;

(31)

11-6,

산술 연산자

(32)

연산자 (계속)

증감 연산자 (++, --)

변수의 값에서 1만큼 증가시키거나 감소시킨다

전치 증가 또는 전치 감소 연산자는 해당 소스 코드의 행에서 맨 먼저 수행한다

후치 증가 또는 후치 감소 연산자는 해당 소스 코드의 행에서 맨 나중에 수행한다

int iCount = 5;

int iResult = 0;

iResult = iCount++ + 10;

결과값은 15이다; iCount는 결과값이 계산된 후에 맨

(33)

연산자 (계속)

관계 연산자 (표 11-7)

값을 비교

논리 연산자 (표 11-8)

수식을 비교할 때 진리표를 생성한다

수식이란 실행된 후 결과 값을 반환해주는 프로그래밍 문장이다

(34)

11-7, Java

의 관계 연산자

(35)

11-8, Java

의 논리 연산자

(36)

11-9,

불리언 수식의 대표적인 예제

(37)

우선순위

 연산자들 사이의 우선순위가 결과값을 좌우한다

 높은 우선순위의 연산자가 그보다 낮은 우선순위의 연산자들보다 먼저 수행된다

(2+3) * 4 의 결과값은 20이다

2 - 5 * 2 의 결과값은 -8 이다

(38)

그림

11-5,

관계

,

산술 연산자들 사이의 우선순위

(39)

Java 제어 구조와 프로그램 흐름

 제어 구조는 프로그램 내에서 구문의 실행 순서를 지시하는 문장이다

 고수준 언어의 네 가지 제어 구조

호출

하향식 제어

선택적 제어

반복적 제어

(40)

호출

 모든 Java 프로그램은 시작점을 알리는

“main”이라는 함수를 가지고 있다

public static void main(String[] args) {}

“public”은 다른 어떤 소스 코드에게도 보여질 수 있다는 것을 의미한다

“static”은 함수가 해당 클래스에 속한다는 것을 나타낸다

“void”는 반환 값이 없다는 것을 의미한다

“String[] args”는 프로그램이 실행될 때

(41)

하향식 제어 (시퀀스)

 프로그램 문장이 시간상으로 상단에서 하단으로 한번에 하나씩 연속적으로 실행된다

 모든 프로그래밍 언어에서 발견되는 가장 보편적인 프로그래밍 제어 구조이다

 다른 어떤 소스 코드를 호출하지 않고

순서대로 문장을 실행함으로써 구현할 수

있다

(42)

코드의 블록

 여러 개의 문장을 시작 및 종료 중괄호 안에 묶어 단일 블록 문장으로 만들 수 있다

중괄호 안의 문장들은 서로 기능적으로 연관된다

중괄호를 누락시켰을 때 프로그램이 부정확하게 동작할 수 있다

이 밖에도 중괄호가 필요한 경우가 있다

호출, 선택, 반복과 같은 제어 구조와 함께 흔히

(43)

데이터의 출력

 System.out.print()나 System.out.println()

문장을 이용하여 현재 출력 장치로 데이터를 출력할 수 있다

print()는 출력된 데이터의 맨 마지막에 현재의 삽입 지점이 오게 한다

println() 는 출력된 데이터의 다음 행에 삽입 지점이 오게 한다

“\n” (새 라인 출력제어 문자)는 시스템에게 다음 행으로 이동하라고 요구한다

수식은 결합될 수 있다 (+ 연산자)

(44)

11-10, Java

출력 문장의 대표 예제

(45)

데이터의 입력

 System.in은 현재의 입력 장치로부터

데이터를 읽어오는 여러 메소드를 제공한다

입력 스트림으로부터 문자를 읽어오기 위해 새로운 변수를 생성한다

문자들은 새로 입력된 문자열을 저장할 일종의 메모리 버퍼 역할을 하는 다른 변수에 한 글자씩 옮겨 쓴다

이 값은 다시 readLine() 메소드를 호출함으로써

(46)

호출에 대한 부언

호출은 무엇 또는 누구를 부르는 행위이다

Java는 함수 또는 메소드를 부름으로써 호출을 구현한다

함수는 어떤 작업을 수행하고 때에 따라서는 결과 값을 반환할 수 있다

메소드는 클래스에 속한 함수이다

함수의 이름이 나오면 시스템은 해당 함수 이름으로 시작되는 소스 코드의 첫 번째 라인으로 제어를 옮긴다

함수의 실행이 끝나면 시스템은 함수를 호출했던 지점으로 제어를 되돌린다

(47)

선택

 if 문

if (조건)

{ 한 개 또는 그 이상의 문장 }

 if-else 문

if (조건)

{한 개 또는 그 이상의 문장 } else

{한 개 또는 그 이상의 문장 }

(48)

선택 (계속)

 if-else-if 문

if (조건)

{한 개 또는 그 이상의 문장 } else if

{한 개 또는 그 이상의 문장 }

… // 다수의 else if문을 포함할 수 있다 else

{한 개 또는 그 이상의 문장 }

프로그램이 실행되는 동안 프로그램 내에서 어떤

(49)

선택 (계속)

 switch 문

switch (수식) { case 값_1;

문장_1;

break;

case 값_2 문장_2 break;

default; // 선택적 문장_3;

(50)

반복 (루핑)

 for 문

for (변수 선언; 수식;

증가/감소) { 문장(들); }

루프에서 카운터로 사용되는 변수를 변경할 때 증가 및 감소 연산자가 자주 사용된다

for (iCount = 1; iCount <= 5; iCount++)

 for와 while 루프는 선조건 루프이다

루프 안의 문장들을 실행하기 이전에 조건식을 먼저 검사한다

(51)

반복 (계속)

 while 문

while (수식) { 문장들; }

 do while 문

do {

문장(들);

} while (수식);

do while 루프는 후조건 루프이다

(52)

프로그램의 실행

 Java를 구매하거나 다운로드 받는다

썬 마이크로 시스템 사에서는 Java와 JDK를 무료로 제공한다

 프로그램을 작성할 편집기를 선택한다

통합 개발 환경(IDE) 또는 메모장과 같은 단순한 텍스트 편집기를 사용할 수 있다

 javac 명령어로 프로그램을 컴파일한다

javac MyProg1.java

 java 명령어로 프로그램을 실행한다

(53)

객체-지향 프로그래밍

 요소, 물체, 사람을 객체로 표현하고

객체의 행위를 둘러싼 논리에 기반을 둔 프로그래밍 형태

 객체는 세 가지 특징을 가진다

특성 (속성)

행위

반응 (이벤트에 대한)

 OOP는 재사용성과 유지 관리의 효율성을

제공한다

(54)

그림 11-7

(55)

OOP의 작동법

 틀 만들기

클래스 혹은 템플릿을 만든다

 모형 만들기

틀의 특성을 정의한다

 동작 모양 만들기

모형이 수행할 수 있는 동작과 어떤 이벤트에 대한 반응 등을 정의한다

(56)

OOP 용어

 클래스

새로운 객체 유형을 그 속성과 행위에 따라 정의하는데 사용되는 템플릿 또는 틀

 객체

데이터와 프로시저 모드로 이루어진 독립적인 개체

 인스턴스화

클래스를 바탕으로 객체를 생성하는 과정

 생성자

(57)

OOP 용어 (계속)

 특성 (속성)

객체의 특징

 메소드

객체가 수행하는 행위; 클래스 내에서 된다

 이벤트

클래스에 의해 인식되는 행위

 이벤트 핸들러

(58)
(59)

계승

 범용 클래스를 기반으로 좀 더 세부적인 클래스를 생성하여 클래스 기능을

추가적으로 제공하는 프로세스

 부모 클래스

계승을 통해 다른 클래스들을 생성할 수 있는 범용 클래스

 서브 클래스

부모 클래스로부터 생성된 상세한 클래스

메소드 호출시 정의된 클래스를 찾을 때까지

(60)
(61)

캡슐화

 다른 객체들에게 한 객체의 연산들을 숨기는 과정

 객체를 블랙박스와 같이 취급한다

어떤 객체를 사용하기 위해서 그 객체가 어떻게 동작하는지에 대해 전혀 알 필요가 없다

 잠재적인 오류를 방지한다

문제가 있는 객체로부터 오류를 분리시킨다

(62)

폴리모피즘

 상이한 연산을 표시하는데 동일한 표현을 사용할 수 있는 객체의 능력

 연산이 호출되면 시스템이 실행 시에 어떤 연산이 사용될 지를 결정한다

예: 모든 기하학적인 모양(사각형, 삼각형, 원)에 대하여 Draw 연산을 사용

Draw가 호출되면, 시스템은 모양을 정확하게

출력하기 위하여 어떤 객체의 메소드를 호출해야 할 지를 결정한다

(63)

Java와 OOP

 Java의 모든 것은 클래스, 그 속성과 메소드로 귀결된다

 여러분 자신이나 다른 누군가에 의해

생성된 객체들을 재사용함으로써 작성할 코드의 양을 줄일 수 있다

 사용 가능한 객체나 라이브러리들을 보여주는 자료를 이용하라

많은 프로그램, 알고리즘, 작업 등이 다른 누군가에

(64)

프로그래밍 언어의 선택

 고려 사항

기능

판매자의 능력

인기도

관련 직종

Price

학습의 용이함

성능

(65)

맺는 말

 프로그램은 여러분이 하라고 시킨 일만 한다

 프로그램이 정확하게 동작하지 않는

대부분의 경우는 컴퓨터가 아닌 프로그램 개발자의 잘못에서 기인한다

책임감 있는 프로그래머가 되라

사회에 일조할 수 있는 훌륭한 프로그램을 개발할 수 있다

여러분이 개발한 프로그램이 사회에 심각한 결과를

(66)

요약

 프로그램은 프로그램을 개발하는 프로그래머만큼 중요하다

 프로그램은 도처에서 여러분이 하는 대부분으 일들에 사용된다

 프로그램은 해석되거나 컴파일된다

 저수준 언어는 컴퓨터가 이해하는 기계어와

보다 밀접하다

(67)

요약(계속)

 고수준 언어는 인간의 언어와 더 밀접하다

 알고리즘은 논리적인 방법으로 문제를 해결하기 위해 개발된다

 의사코드는 프로그램이 수행해야 할 일들을 프로그래머가 사람의 언어로 정밀하게 계획하는 방법이다

 알고리즘을 개발하는 일은 프로그램

개발에서 가장 중요한 과정이다

(68)

요약(계속)

 Java는 원래 인터넷을 염두에 두고 설계된 고수준 언어이다

 변수는 특정 데이터 타입에 할당되는 임시 저장 위치

계산이나 저장 용도로 사용된다

 Java는 수학, 관계, 논리 연산자를 사용한다

 프로그램에서 사용되는 제어 구조에는

하향식, 호출, 선택, 반복 등의 네 가지 유형이

(69)

요약(계속)

 객체-지향 프로그래밍(OOP)은 프로그래머로 하여금 코드를 재사용하여 프로그램의 유지 관리가 효율적으로 이루어지게 한다

 OOP는 객체를 생성할 수 있는 템플릿 또는 틀 역할을 하는 클래스를 생성한다

 객체는 속성, 메소드, 이벤트 핸들러를 포함한다

 Java는 OOP 모델과 밀접하게 연관된다.

 훌륭한 프로그래머가 되기 위해서는 실습, 실습,

수치

그림  11-1
그림  11-2
표  11-1, Java 의 정수형 데이터 타입
표  11-3, Java 의 문자형 데이터 타입
+7

참조

관련 문서

And the research have said that computer programming education have helped to increasing of students' creativity during find answer of problem through