컴퓨터공학개론 제 11 장프로그래밍 1
학습목표 프로그램의정의와개발방법에대해배운다 저수준언어와고수준언어의차이점을이해한다 어셈블리프로그래밍언어의예를이용하여저수준언어의기초를배운다 알고리즘과의사코드를포함한프로그램의구조에대해배운다 2
학습목표 ( 계속 ) Java 의예를이용하여고수준언어의기본을이해한다 변수에대해배우고그활용방법을배운다 Java 연산자를사용해본다 프로그래밍에사용되는제어구조를경험해본다 객체 - 지향프로그래밍과연관된용어를이해한다 3
프로그램의정의 어떤문제를해결하기위한문장이나명령을수행하는절차들의집합 컴퓨터가이해할수있는언어로변환되어야한다 알고리즘 : 논리적으로순서화된문장의집합 변환작업은인터프리터또는컴파일러를통해수행된다 인터프리터는프로그램문장을한줄씩해석한다 컴파일러는모든문장을읽어와서완성된프로그램을생성한다 4
컴퓨터와대화하기 여러분이어떤언어를사용할지결정한다 어셈블리어는하드웨어제어에적합 Java, JavaScript 는인터넷응용에주로사용 Lisp 는인공지능분야에사용 Visual Basic 은단순하지만강력한그래픽사용자인터페이스환경을제공 그밖에 C, C++, Smalltalk, Delphi, ADA, FORTRAN, COBOL 등의언어가사용된다 5
프로그래밍언어의유형 저수준언어 사람보다는컴퓨터가이해하는방식에가까운프로그래밍언어 기계어는컴퓨터가바로이해할수있는최저수준의언어 어셈블리어는최저수준언어와고수준언어사이의언어 어셈블러는어셈블리어코드를기계어로번환 고수준언어 사람에게친숙하고자연스러운언어 6
그림 11-1 프로그래밍언어의유형 7
저수준언어 기계어는이진수만으로이루어진다 어셈블리어는기계어에비해영어와유사하다 각문장이기계명령어에대응된다 고수준언어에비해빠른실행이가능하다 특정 CPU 유형에매우밀접한특성을지닌다 고수준언어보다읽고이해하기가어렵다 8
어셈블리어의문장 연산자와레지스터등을포함하는알파벳형식의명령어로구성된다 mov 문은값들을이동시킨다 mov cx, 8 add 문은값을더한다 mov cx, 3 mov dx, 8 add dx, cx sub 문은한숫자에서다른숫자를뺀다 9
어셈블리어의문장 ( 계속 ) inc 문은레지스터의값을증가시킨다 inc dx cmp 문은두값을비교한다 mov cx, 4 mov dx, 7 cmp dx, cx (dx - cx = 0이면제로플래그가 1이 된다 ) jnz 문은프로그램의특정위치로이동시킨다 jnz stop ( 제로플래그가 1일때 stop으로 표기된위치로이동한다 ) 10
고수준언어 저수준언어에비해읽고, 쓰고, 이해하기가쉽다 한개의문장으로보다많은작업을수행할수있다 일반적으로느리다 컴파일이나인터프리트과정이필요하다 많은언어들이통합개발환경 (IDE:Integrated Development Environment) 을포함한다 편집기, 컴파일러, 그래픽디자이너등을포함하는인터페이스 11
그림 11-2 마이크로소프트의 Visual Studio.NET 은소프트웨어개발을용이하게한다 12
프로그램의구조 프로그램의구조는알고리즘을기반으로하는데, 이는주로의사코드로표현된다 알고리즘 : 어떤문제를해결하기위해따라야하는실행가능한단계 의사코드 : 사람의언어형식으로작성된알고리즘에대한판독가능한설명문 프로그래밍언어구문으로변환될템플릿 13
의사코드의예 화씨온도에서섭씨온도로의변환 사용자에게화씨온도를입력받는다 입력된온도를섭씨온도로의변환식에대입한다 섭씨온도 = (5/9) * ( 화씨온도 - 32) 화씨온도 ## 에서변환된섭씨온도 XX 를출력 14
알고리즘의선택과테스팅 어떤임무를수행하거나목표를달성하기위해서는여러가지다양한방법들이사용될수있다 무수한결정요인들을기반으로프로젝트에가장적합한알고리즘을선택하라 알고리즘의테스트를위해여러분이최종사용자라고가정하고프로그램을구동시켜봐야한다 온도변환의예 : 만약사용자가숫자를입력하지않는다면? 유효한값이입력되었는지를검사하도록의사코드를변경한다 15
테스팅을통해의사코드를변경 사용자에게화씨온도를입력받는다 숫자가입력된다면 입력된온도를변환식에대입한다 섭씨온도 = (5/9) * ( 화씨온도 - 32) 화씨온도 ## 에서변환된섭씨온도 XX 를출력한다 그렇지않다면 입력된값이유효하지않다는메시지를출력한다 16
프로그래밍언어의구문 프로그램작성은요리법 ( 알고리즘이나의사코드 ) 에따라재료들을정확히섞어음식 ( 프로그램 ) 을만들어내는과정에비유될수있다 음식의재료들은다음과같다 변수 연산자 제어구조 객체 17
Java 의요리법 Java 는썬에의해개발된고수준언어이다 친숙한구문 (C++ 구문과유사 ) 이식성이좋다 재컴파일없이도다른컴퓨터에서동작가능 강력하다 많은작업을수행할수있는풍부한라이브러리를가지고있다 상용화되어있다 다양한응용의개발에사용되고있다 18
변수 변수 : 컴퓨터메모리의특정위치와값을식별하기위해사용되는이름 실제하드웨어의주소를알필요없이컴퓨터메모리에접근할수있는방법을제공 변수에식별자를부여하는것을변수를선언한다고말한다 변수를선언할때, 식별자나자료형, 내용등과같은여러속성을지정하게된다 int numticketsbought; 19
식별자와명명기법 Java 의변수선언규칙 영문자, 밑줄, 숫자만사용 영문자로시작한다 Java 에서특수한프로그래밍의미를가지는예약어는사용할수없다 명명기법 의미있는이름으로식별자를정하여라 첫번째단어의첫문자는소문자로하되, 후속된단어들의첫문자는대문자로하라 20
변수의종류 모든변수는강한타입 (strongly typed) 을가진다 각변수에저장될데이터의타입을선언해주어야한다 8 가지의데이터타입제공 ( 표 11-1 에서 11-4 까지제공 ) 변수선언구문 예 type variablename;s float salary; boolean deserveraise; 21
표 11-1, Java 의정수형데이터타입 22
표 11-2, Java 의실수형데이터타입 23
표 11-3, Java 의문자형데이터타입 24
표 11-4, Java 의불리언데이터타입 25
문자열데이터타입 문자형데이터타입은단일인용부호안에영문자하나를포함한다 문자열데이터타입은이중부호의쌍안에하나또는그이상의영문자를포함한다 String sfirstname = Joe ; String slastname = Blow ; 문자열접합연산자 (+) 는여러문자열을하나로결합시킨다 String sfullname; sfullname = slastname +, + sfirstname; 26
변수의명명방법 헝가리표기법 변수앞에그변수의데이터타입을나타내는문자를붙이는방법 단지가독성을높이기위한방법임 변수가반드시해당데이터값을저장해야하는것은아니다 27
표 11-5, Java 의헝가리표기법 28
변수의내용 변수초기화는변수를선언하면서동시에그변수에값을할당하는것을말한다 프로그래밍언어에서디폴트값을할당하게하는것보다는변수초기화를하는방법이더낫다 두문장을사용하는방법 int istudentcount; istudentcount = 456; 한문장으로결합시킨방법 int istudentcount = 456; 29
연산자 데이터조작에기호가사용된다 데이터타입에의한분류 덧셈, 뺄셈, 곱셈, 나눗셈, 모듈로연산을위한산술연산자 이진수식에사용될수있는약식표기 ifirstnum = ifirstnum + isecondnum; 은다음의문장과같다 ifirstnum += isecondnum; 30
표 11-6, 산술연산자 31
증감연산자 (++, --) 연산자 ( 계속 ) 변수의값에서 1 만큼증가시키거나감소시킨다 전치증가또는전치감소연산자는해당소스코드의행에서맨먼저수행한다 후치증가또는후치감소연산자는해당소스코드의행에서맨나중에수행한다 int icount = 5; int iresult = 0; iresult = icount++ + 10; 결과값은 15 이다 ; icount 는결과값이계산된후에맨나중에 6 으로증가한다 32
연산자 ( 계속 ) 관계연산자 ( 표 11-7) 값을비교 논리연산자 ( 표 11-8) 수식을비교할때진리표를생성한다 수식이란실행된후결과값을반환해주는프로그래밍문장이다 33
표 11-7, Java 의관계연산자 34
표 11-8, Java 의논리연산자 35
표 11-9, 불리언수식의대표적인예제 36
우선순위 연산자들사이의우선순위가결과값을좌우한다 높은우선순위의연산자가그보다낮은우선순위의연산자들보다먼저수행된다 (2+3) * 4 2-5 * 2 의결과값은 20 이다 의결과값은 -8 이다 37
그림 11-5, 관계, 산술연산자들사이의우선순위 38
Java 제어구조와프로그램흐름 제어구조는프로그램내에서구문의실행순서를지시하는문장이다 고수준언어의네가지제어구조 호출 하향식제어 선택적제어 반복적제어 39
호출 모든 Java 프로그램은시작점을알리는 main 이라는함수를가지고있다 public static void main(string[] args) {} public 은다른어떤소스코드에게도보여질수있다는것을의미한다 static 은함수가해당클래스에속한다는것을나타낸다 void 는반환값이없다는것을의미한다 String[] args 는프로그램이실행될때파라미터나값을수신할수있다 40
하향식제어 ( 시퀀스 ) 프로그램문장이시간상으로상단에서하단으로한번에하나씩연속적으로실행된다 모든프로그래밍언어에서발견되는가장보편적인프로그래밍제어구조이다 다른어떤소스코드를호출하지않고순서대로문장을실행함으로써구현할수있다 41
코드의블록 여러개의문장을시작및종료중괄호안에묶어단일블록문장으로만들수있다 중괄호안의문장들은서로기능적으로연관된다 중괄호를누락시켰을때프로그램이부정확하게동작할수있다 이밖에도중괄호가필요한경우가있다 호출, 선택, 반복과같은제어구조와함께흔히사용된다 42
데이터의출력 System.out.print() 나 System.out.println() 문장을이용하여현재출력장치로데이터를출력할수있다 print() 는출력된데이터의맨마지막에현재의삽입지점이오게한다 println() 는출력된데이터의다음행에삽입지점이오게한다 \n ( 새라인출력제어문자 ) 는시스템에게다음행으로이동하라고요구한다 수식은결합될수있다 (+ 연산자 ) 43
표 11-10, Java 출력문장의대표예제 44
데이터의입력 System.in 은현재의입력장치로부터데이터를읽어오는여러메소드를제공한다 입력스트림으로부터문자를읽어오기위해새로운변수를생성한다 문자들은새로입력된문자열을저장할일종의메모리버퍼역할을하는다른변수에한글자씩옮겨쓴다 이값은다시 readline() 메소드를호출함으로써선언된문자열변수에할당된다 45
호출에대한부언 호출은무엇또는누구를부르는행위이다 Java 는함수또는메소드를부름으로써호출을구현한다 함수는어떤작업을수행하고때에따라서는결과값을반환할수있다 메소드는클래스에속한함수이다 함수의이름이나오면시스템은해당함수이름으로시작되는소스코드의첫번째라인으로제어를옮긴다 함수의실행이끝나면시스템은함수를호출했던지점으로제어를되돌린다 46
if 문 선택 if ( 조건 ) { 한개또는그이상의문장 } if-else 문 if ( 조건 ) { 한개또는그이상의문장 } else { 한개또는그이상의문장 } 47
선택 ( 계속 ) if-else-if 문 if ( 조건 ) { 한개또는그이상의문장 } else if { 한개또는그이상의문장 } // 다수의 else if 문을포함할수있다 else { 한개또는그이상의문장 } 프로그램이실행되는동안프로그램내에서어떤변수의상태에따라특정코드블록을수행한다 48
switch 문 switch ( 수식 ) { case 값 _1; 문장 _1; break; case 값 _2 문장 _2 break; default; // 선택적문장 _3; } 선택 ( 계속 ) 49
반복 ( 루핑 ) for 문 for ( 변수선언 ; 수식 ; 증가 / 감소 ) { 문장 ( 들 ); } 루프에서카운터로사용되는변수를변경할때 증가및감소연산자가자주사용된다 for (icount = 1; icount <= 5; icount++) for 와 while 루프는선조건루프이다 루프안의문장들을실행하기이전에조건식을먼저검사한다 50
반복 ( 계속 ) while 문 while ( 수식 ) { 문장들 ; } do while 문 do { 문장 ( 들 ); } while ( 수식 ); do while 루프는후조건루프이다 조건식이검사되기이전에최소한한번은실행된다 51
프로그램의실행 Java 를구매하거나다운로드받는다 썬마이크로시스템사에서는 Java 와 JDK 를무료로제공한다 프로그램을작성할편집기를선택한다 통합개발환경 (IDE) 또는메모장과같은단순한텍스트편집기를사용할수있다 javac 명령어로프로그램을컴파일한다 javac MyProg1.java java 명령어로프로그램을실행한다 java MyProg1 52
객체 - 지향프로그래밍 요소, 물체, 사람을객체로표현하고객체의행위를둘러싼논리에기반을둔프로그래밍형태 객체는세가지특징을가진다 특성 ( 속성 ) 행위 반응 ( 이벤트에대한 ) OOP 는재사용성과유지관리의효율성을제공한다 53
그림 11-7 객체는특성, 행위, 반응이라는특징을가진다 54
틀만들기 OOP 의작동법 클래스혹은템플릿을만든다 모형만들기 틀의특성을정의한다 동작모양만들기 모형이수행할수있는동작과어떤이벤트에대한반응등을정의한다 55
클래스 OOP 용어 새로운객체유형을그속성과행위에따라정의하는데사용되는템플릿또는틀 객체 데이터와프로시저모드로이루어진독립적인개체 인스턴스화 클래스를바탕으로객체를생성하는과정 생성자 객체를인스턴스화하는데사용되는클래스메소드 56
특성 ( 속성 ) 객체의특징 메소드 OOP 용어 ( 계속 ) 객체가수행하는행위 ; 클래스내에서된다 이벤트 클래스에의해인식되는행위 이벤트핸들러 이벤트에대해클래스가반응하는방식 57
그림 11-8 플라스틱인형을만드는과정은 OOP 개념을설명한다 58
계승 범용클래스를기반으로좀더세부적인클래스를생성하여클래스기능을추가적으로제공하는프로세스 부모클래스 계승을통해다른클래스들을생성할수있는범용클래스 서브클래스 부모클래스로부터생성된상세한클래스 메소드호출시정의된클래스를찾을때까지연쇄적으로부모클래스로거슬러올라간다 59
그림 11-9 계승은코드재사용성을촉진한다 60
캡슐화 다른객체들에게한객체의연산들을숨기는과정 객체를블랙박스와같이취급한다 어떤객체를사용하기위해서그객체가어떻게동작하는지에대해전혀알필요가없다 잠재적인오류를방지한다 문제가있는객체로부터오류를분리시킨다 61
폴리모피즘 상이한연산을표시하는데동일한표현을사용할수있는객체의능력 연산이호출되면시스템이실행시에어떤연산이사용될지를결정한다 예 : 모든기하학적인모양 ( 사각형, 삼각형, 원 ) 에대하여 Draw 연산을사용 Draw 가호출되면, 시스템은모양을정확하게출력하기위하여어떤객체의메소드를호출해야할지를결정한다 62
Java 와 OOP Java 의모든것은클래스, 그속성과메소드로귀결된다 여러분자신이나다른누군가에의해생성된객체들을재사용함으로써작성할코드의양을줄일수있다 사용가능한객체나라이브러리들을보여주는자료를이용하라 많은프로그램, 알고리즘, 작업등이다른누군가에의해이미구현되어있다 63
프로그래밍언어의선택 고려사항 기능 판매자의능력 인기도 관련직종 Price 학습의용이함 성능 64
맺는말 프로그램은여러분이하라고시킨일만한다 프로그램이정확하게동작하지않는대부분의경우는컴퓨터가아닌프로그램개발자의잘못에서기인한다 책임감있는프로그래머가되라 사회에일조할수있는훌륭한프로그램을개발할수있다 여러분이개발한프로그램이사회에심각한결과를초래할수도있다 65
요약 프로그램은프로그램을개발하는프로그래머만큼중요하다 프로그램은도처에서여러분이하는대부분으일들에사용된다 프로그램은해석되거나컴파일된다 저수준언어는컴퓨터가이해하는기계어와보다밀접하다 어셈블리어는저수준프로그래밍언어이다 66
요약 ( 계속 ) 고수준언어는인간의언어와더밀접하다 알고리즘은논리적인방법으로문제를해결하기위해개발된다 의사코드는프로그램이수행해야할일들을프로그래머가사람의언어로정밀하게계획하는방법이다 알고리즘을개발하는일은프로그램개발에서가장중요한과정이다 67
요약 ( 계속 ) Java 는원래인터넷을염두에두고설계된고수준언어이다 변수는특정데이터타입에할당되는임시저장위치 계산이나저장용도로사용된다 Java 는수학, 관계, 논리연산자를사용한다 프로그램에서사용되는제어구조에는하향식, 호출, 선택, 반복등의네가지유형이있다 68
요약 ( 계속 ) 객체 - 지향프로그래밍 (OOP) 은프로그래머로하여금코드를재사용하여프로그램의유지관리가효율적으로이루어지게한다 OOP 는객체를생성할수있는템플릿또는틀역할을하는클래스를생성한다 객체는속성, 메소드, 이벤트핸들러를포함한다 Java 는 OOP 모델과밀접하게연관된다. 훌륭한프로그래머가되기위해서는실습, 실습, 또실습해야한다. 69