슬라이드 1

Similar documents
<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

슬라이드 1

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint Presentation

Microsoft PowerPoint - Lect04.pptx

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

JUNIT 실습및발표

금오공대 컴퓨터공학전공 강의자료

JAVA PROGRAMMING 실습 05. 객체의 활용

슬라이드 1

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

슬라이드 1

chap 5: Trees

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

Microsoft PowerPoint - C++ 5 .pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

TEST BANK & SOLUTION

슬라이드 1

Microsoft PowerPoint - 2강

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

JVM 메모리구조

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint 장강의노트.ppt

슬라이드 1

Design Issues

PowerPoint Presentation

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - chap06-1Array.ppt

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

쉽게

07 자바의 다양한 클래스.key

Microsoft PowerPoint - Chapter 6.ppt

쉽게 풀어쓴 C 프로그래밍

gnu-lee-oop-kor-lec11-1-chap15

슬라이드 1

17장 클래스와 메소드

유니티 변수-함수.key

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

제11장 프로세스와 쓰레드

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

교육자료

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

Microsoft PowerPoint - chap10-함수의활용.pptx

11장 포인터

adfasdfasfdasfasfadf

Microsoft PowerPoint - chap06-2pointer.ppt

쉽게 풀어쓴 C 프로그래밍

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Microsoft PowerPoint - Lect07.pptx

JAVA PROGRAMMING 실습 02. 표준 입출력

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

09-interface.key

ThisJava ..

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint 프레젠테이션

Network Programming

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

gnu-lee-oop-kor-lec06-3-chap7

4장.문장

Microsoft PowerPoint - additional01.ppt [호환 모드]

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

C++ Programming

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

쉽게 풀어쓴 C 프로그래밊

슬라이드 1

Microsoft PowerPoint - [2009] 02.pptx

C# Programming Guide - Types

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

설계란 무엇인가?

슬라이드 1

Spring Data JPA Many To Many 양방향 관계 예제

쉽게 풀어쓴 C 프로그래밍

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

No Slide Title

설계란 무엇인가?

PowerPoint Presentation

PowerPoint Presentation

Transcription:

6. 자바라이브러리 학습목표 진짜닷컴게임을만듭니다. ArrayList 에대해알아봅니다. 자바 API 를활용하는방법에대해알아봅니다.

자바 API를알아봅시다 정말인가? 우리가직접만들지않아도되는건가?

SimpleDotComGame의버그 정상적인실행결과 버그가나는경우 %java SimpleDotComGame enter a number 1 miss enter a number 2 miss enter a number 3 miss enter a number 4 hit enter a number 5 hit enter a number 6 kill 6 guesses %java SimpleDotComGame enter a number 2 hit enter a number 2 hit enter a number 2 kill 3 guesses 일단어떤숫자를한번맞추고나면그숫자를두번더입력하기만하면게임이끝납니다.

문제의원인 public String checkyourself(string stringguess) { int guess = Integer.parseInt(stringGuess); String result = "miss"; for (int i = 0; i < locationcells.length; i++) { if (guess == locationcells[i]) { result = hit ; numofhits++; break; } } if (numofhits == locationcells.length) { result = kill ; } System.out.println(result); return result; }

어떻게고쳐야할까요? 0 1 2 3 4 5 6 4 5 6 DotCom 의셀위치를저장하기위한배열인스턴스변수. 이닷컴에는 4, 5, 6 이라는세값이들어있고사용자는이세개의숫자를맞춰야합니다. 0 1 2 locationcells (DotCom 의인스턴스변수 )

고치는방법 첫번째옵션 배열을하나더만들고사용자가위치를맞출때마다그맞춘위치를두번째배열에집어넣습니다. 사용자가위치를입력할때마다그배열을확인하여그셀을이미맞췄는지확인합니다. false false true 0 1 2 hitcells (DotCom 의인스턴스변수 ) 단점 : 작업이복잡해집니다.

고치는방법 두번째옵션 원래배열을그냥사용하면서맞춘셀의값은 -1로바꿉니다. 4 5-1 0 1 2 locationcells (DotCom 의인스턴스변수 ) 장점 : 배열을추가할필요가없습니다. 단점 : 여전히지저분합니다.

고치는방법 세번째옵션 맞출때마다각셀위치를삭제하고배열을작게줄입니다. 하지만배열의크기를바꿀수는없기때문에매번새로운배열을만들고이전배열에남아있는셀을복사하고새로만든작은배열로옮겨야합니다. 4 5 6 4 6 0 1 2 locationcells 아무셀도맞추지않은상태 0 1 locationcells 1 번인덱스에들어있는 5 를맞춘상태 장점 : 아주이상적인해결책입니다. 단점 : 배열의크기를바꿀수있어야깔끔합니다.

checkyourself 준비코드 메소드 : String checkyourself(string userguess) 사용자가추측한위치를 String 매개변수로받아옴사용자가추측한위치를 int로변환 int 배열의각셀에대해다음작업반복 // 사용자가추측한위치를셀과비교만약사용자가추측한것이맞으면맞춘개수증가 // 마지막위치인지확인만약맞춘회수가 3이면 kill을리턴그렇지않으면 hit 리턴만약부분끝그렇지않으면 miss 리턴만약부분끝반복부분끝메소드끝 메소드 : String checkyourself(string userguess) 사용자가추측한위치를 String 매개변수로받아옴사용자가추측한위치를 int로변환남아있는각위치셀에대해다음작업반복 // 사용자가추측한위치를셀과비교만약사용자가추측한것이맞으면그셀을배열에서제거 // 마지막위치인지확인만약배열이비어있으면 kill을리턴그렇지않으면 hit 리턴만약부분끝그렇지않으면 miss 리턴만약부분끝반복부분끝메소드끝

라이브러리 자바에는미리만들어진클래스가엄청나게많이있습니다. 이렇게미리만들어져있는클래스는이책에나오는인스턴트코드랑비슷하다고보면되는데모두미리컴파일이된상태로제공됩니다. 라이브러리에들어있는클래스는필요에맞게잘찾아서쓰기만하면됩니다.

ArrayList add(object o) 객체매개변수 (o) 를목록에추가 remove(int index) index 매개변수로지정한위치에있는객체를제거 remove(object elem) 주어진객체가 ArrayList 에들어있으면제거 contains(object elem) 객체매개변수 elem 에매치되는것이있으면 true 리턴 isempty() 목록에아무원소도없으면 true 리턴 indexof(object elem) 객체매개변수 (elem) 의인덱스또는 -1 을리턴 size() 현재목록에들어있는원소의개수리턴 get(int index) 주어진 index 매개변수위치에있는객체를리턴

ArrayList로할수있는것 1. 새로만듭니다. ArrayList<Egg> mylist = new ArrayList<Egg>(); 2. 뭔가를집어넣습니다. Egg s = new Egg(); mylist.add(s); 3. 다른것을또집어넣습니다. Egg b = new Egg(); mylist.add(b);

ArrayList로할수있는것 4. 몇개가들어가있는지알아냅니다. int thesize = mylist.size(); 5. 어떤것이안에들어있는지찾아냅니다. boolean isin = mylist.contains(s); 6. 어떤것의위치 ( 인덱스 ) 를찾아냅니다. int idx = mylist.indexof(b); 7. 비어있는지확인합니다. boolean empty = mylist.isempty(); 8. 목록에들어있는것을제거합니다. mylist.remove(s);

바보같은질문은없습니다 ArrayList 가참좋은건알겠는데, 그런게있다는것을어떻게알아내죠? 그런걸알아내는능력이자바프로그래머로성공하는데있어서가장중요한것가운데하나라고할수있습니다. 필요한것을찾아내서적용할수있어야만하지요. 귀찮고자질구레한부분은남들이만들어놓은것을잘활용하고자신의아이디어만구현하는 게으름의미덕 을충분히활용할수있어야합니다.

바보같은질문은없습니다 ArrayList 라는것이필요하다는것은어떻게알아내죠? API 를어떻게활용할지를알아내는방법이궁금합니다. 이강의가끝날무렵에는자바라는언어에대해서는잘알수있을것입니다. 중요한것은어떤문제를어떻게해결할지, 그리고어떻게하면최소한의코드만으로해결할수있는가하는것입니다. 잠시후에이와관련된이야기가나올것입니다. 조금만기다려주세요.

ArrayList와일반배열 ArrayList 일반배열 ArrayList<String> mylist = new ArrayList<String>(); String[] mylist = new String[2]; String a = new String( whoohoo ); String a = new String( whoohoo ); mylist.add(a); mylist[0] = a; String b = new String( Frog ); String b = new String( Frog ); mylist.add(b); mylist[1] = b; int thesize = mylist.size(); int thesize = mylist.length;

ArrayList와일반배열 ArrayList 일반배열 Object o = mylist.get(1); String o = mylist[1]; mylist.remove(1); mylist[1] = null; boolean isin = false; boolean isin = mylist.contains(b); for (int i = 0; i < mylist.length; i++) { if (b.equals(mylist[i])) { isin = true; break; } }

ArrayList와일반배열 1. 일반배열은만들어질때부터유형과크기가정해집니다. 하지만 ArrayList 에서는 ArrayList 유형의객체만만들면됩니다. 객체를추가하거나제거할때마다저절로커지거나작아지기때문에따로크기를지정할필요가없습니다.

ArrayList와일반배열 2. 객체를일반배열에집어넣을때는위치를지정해야합니다. 인덱스가배열의끝을넘어가면큰문제가생길수있습니다. 하지만 ArrayList 를쓸때는 add(someobject) 같은식으로객체를추가하기만하면새로추가된객체가들어갈자리를알아서만들어줍니다.

ArrayList와일반배열 3. 배열에서는다른어떤자바객체에서도쓰지않는문법을사용합니다. 배열에서는 mylist[1] 과같은특별한문법을쓰지만 ArrayList 는일반자바객체이므로그러한특별한문법을익히지않아도됩니다.

ArrayList와일반배열 4. 자바 5.0 에는 ArrayList 가매개변수화되어있습니다. 자바 5.0 에서는 ArrayList 에매개변수화된유형 (parametrized type) 이라는특별한기능이추가되었습니다. ArrayList<String> 에서 String 은유형매개변수입니다. 특정유형의객체들만저장할수있는컬렉션을만들수있습니다.

DotCom을고칩시다. public class DotCom { int[] locationcells; int numofhits = 0; public void setlocationcells(int[] locs) { locationcells = locs; } } public String checkyourself(string stringguess) { int guess = Integer.parseInt(stringGuess); String result = "miss"; for (int cell : locationcells) { if (guess == cell) { result = hit ; numofhits++; break; } } if (numofhits == locationcells.length) { result = kill ; } System.out.println(result); return result; }

새로고친 DotCom 클래스 import java.util.arraylist; public class DotCom { private ArrayList<String> locationcells; // private int numofhits; public void setlocationcells(arraylist<string> loc) { locationcells = loc; } } public String checkyourself(string userinput) { String result = miss ; int index = locationcells.indexof(userinput); if (index >= 0) { locationcells.remove(index); if (locationcells.isempty()) { result = kill ; } else { result = hit ; } } return result; } 직접한번실행시켜봅시다.

Go2.com RUNNING HEADER, 14 PT., ALL CAPS, Line Spacing=1 line 진짜닷컴가라앉히기게임 A B C D E F G 0 1 Pets.com AskMe.com 2 3 4 5 6 %java DotComBust Enter a guess A3 miss Enter a guess B2 miss Enter a guess C4 miss Enter a guess D2 hit Enter a guess D3 hit Enter a guess A3 Ouch! You sunk Pets.com :( kill Enter a guess B4 miss Enter a guess G3 hit Enter a guess G4 hit Enter a guess G5 Ouch! You sunk AskMe.com :(

고쳐야할부분 DotCom 클래스 ( 닷컴클래스 ) name 변수추가 닷컴의이름을저장하기위한변수. 닷컴이죽었을때그이름을출력합니다. DotComBust 클래스 ( 게임클래스 ) DotCom 객체세개만들기 세닷컴을 7x7 그리드에배치 세닷컴에대해사용자가추측한위치확인 모든닷컴이가라앉을때까지게임진행 main 메소드종료

필요한클래스와객체 DotComBust 게임클래스 DotCom 을만들고사용자의입력을받아들이고모든닷컴이죽을때까지계속진행 DotComBust 실제 DotCom 객체 닷컴명, 위치, 사용자가추측한위치가맞는지확인하는방법등을제공 DotComBust 보조클래스 사용자가명령행에입력한것을받아오는방법, DotCom 의위치를만들어내는방법등을제공 DotComBust DotCom GameHelper

DotComBust 객체에서일어나는일 1 DotComBust 게임클래스 DotComBust 객체 2 DotComBust 객체 GameHelper 객체 3 GameHelper 객체 DotComBust 객체 ArrayList 객체

DotComBust 객체에서일어나는일 4 GameHelper 객체 DotComBust 객체 ArrayList 객체 DotCom 객체 5 GameHelper 객체 DotComBust 객체 DotCom 객체 ArrayList 객체 ArrayList 객체

DotComBust 객체에서일어나는일 6 GameHelper 객체 DotComBust 객체 DotCom 객체 ArrayList 객체 ArrayList 객체

DotComBust 준비코드 DotComBust GameHelper helper ArrayList dotcomslist int numofguesses setupgame() startplaying() checkuserguess() finishgame() GameHelper 인스턴스를만들고 helper라는인스턴스변수선언 DotCom 목록세개를저장하기위한 dotcomslist라는 ArrayList 선언추측회수를저장하기위한 numofguesses라는 int 선언, 0으로설정 setupgame() 메소드선언 startplaying() 메소드선언 finishgame() 메소드선언메소드 : void setupgame() // DotCom 객체세개만들고이름을붙임 DotCom 객체세개를생성각 DotCom의이름을설정모든 DotCom을 dotcomslist라는 ArrayList에추가 dotcomslist에들어있는각 DotCom 객체에대해다음을반복 helper 객체의 placedotcom() 메소드호출 placedotcom() 을호출한결과를바탕으로각 DotCom의위치설정반복끝메소드끝

DotComBust 준비코드 메소드 : void startplaying() 음 DotCom 이남아있는동안다음을반복 helper 의 getuserinput() 메소드호출, 사용자로부터입력을받 checkuserguess() 메소드로사용자가추측한위치를평가 반복끝 메소드끝 메소드 : void checkuserguess(string userguess) // 명중된 DotCom 객체가있는지확인 numofguesses 변수에저장된추측회수증가 result 라는지역변수를 miss 로설정 dotcomslist 에들어있는각 DotCom 객체에대해다음을반복 DotCom 객체의 checkyourself() 메소드로추측한위치평가리턴값에따라 result 의값을 hit 또는 kill 로설정 만약결과가 kill 이면그 DotCom 을 dotcomslist 에서제거 반복끝 result 값출력 메소드끝

DotComBust 준비코드 메소드 : void finishgame() 게임이끝났음을알리는메시지를출력만약추측한회수가적으면축하메시지를출력그렇지않으면결과가좋지않다는메시지를출력만약부분끝메소드끝 여기에서는테스트코드를만들고있지않지만, 실제로프로그래밍을할때는준비코드를만드는것이좋습니다. 각메소드에대해테스트코드를만들면서그테스트를통과할수있는메소드 ( 실제코드 ) 를만들고, 다시테스트코드를수정하고그테스트코드를통과할수있는메소드실제코드를만드는식의작업을반복하다보면실제코드가완성이되겠죠?

부울연산자 &&, && 는양쪽에있는부울표현식이모두참인경우에, 는양쪽에있는부울표현식중하나이상이참인경우에참이됩니다. if (price >= 300 && price < 400) { } if (brand.equals( A ) brand.equals( B )) { }!=,! 논리적 NOT 을의미하는연산자. if (model!= 2000) { } if (!brand.equals( X )) { }

부울연산자 단락연산자 (&&, ) if (price >= 300 && price < 400) { } if (brand.equals( A ) brand.equals( B )) { } if (refvar!= null && refvar.isvalidtype()) { } 비단락연산자 (&, ) 반드시양쪽표현식을모두실행시키고싶은경우에는비단락연산자를쓰면됩니다.

라이브러리 ( 자바 API) 자바 API 에서클래스는패키지단위로묶여있습니다. API 에들어있는클래스를사용하려면그클래스가어떤패키지에들어있는지알아야합니다. System(System.out.println()) Math(Math.random()) String

클래스의전체이름 클래스를사용하려면클래스의전체이름을알아야합니다. 예외 : java.lang 패키지에들어있는클래스 ArrayList 의전체이름 java.util.arraylist

클래스의이름을알려주는방법 A. import 선언문을씁니다. import java.util.arraylist; B. 일일이입력합니다. java.util.arraylist list = new java.util.arraylist(); public void go(java.util.arraylist list) { } public java.util.arraylist foo() { }

바보같은질문은없습니다 왜꼭전체이름이필요하죠? 패키지의목적이그것뿐인가요? 프로젝트또는라이브러리를더용이하게편성할수있습니다. 이름영역을지정해서같은이름때문에충돌이생기는것을방지할수있습니다. 어느정도의보안기능을제공할수있습니다.

바보같은질문은없습니다 전체이름을사용하면어떤장점이있습니까? 클래스명뿐아니라패키지명까지똑같이붙이면어떻게해야하나요? 자바에는이런문제가생기는것을방지하기위한명명규칙같은것이있습니다. 이규칙만지키면별로문제가생기지않겠죠.

핵심정리 ArrayList 는자바 API 에포함되어있는클래스입니다. ArrayList 에뭔가를집어넣을때는 add() 를쓰면됩니다. ArrayList 에서뭔가를제거할때는 remove() 를쓰면됩니다. ArrayList 에들어있는어떤것의위치를알고싶다면 ( 또는들어있는지알고싶다면 ) indexof() 를쓰면됩니다. ArrayList 가비어있는지확인할때는 isempty() 를쓰면됩니다. ArrayList 의크기 ( 원소의개수 ) 를알고싶다면 size() 메소드를쓰면됩니다.

핵심정리 일반배열의길이 ( 원소의개수 ) 를알고싶을때는 length 변수를쓰면됩니다. ArrayList 는필요에따라그크기가동적으로바뀝니다. ArrayList 를선언할때는거기에저장할객체유형을매개변수로지정합니다. ArrayList 에는객체만저장할수있지만원시유형을집어넣어도컴파일러에서자동으로처리해줍니다. 클래스는패키지단위로묶입니다. 클래스에는패키지명과클래스명을합쳐서만든전체이름이있습니다. ArrayList java.util.arraylist java.lang 을제외한다른패키지에들어있는클래스를사용하려면자바에클래스의전체이름을알려줘야합니다.

바보같은질문은없습니다 import 를사용하면클래스가커지나요? 그렇게불러온클래스나패키지가내가만든코드에추가되어같이컴파일되나요? C 를쓰고있었다면그렇게생각할지도모르겠습니다만자바에서는그렇지않습니다. import 를쓴다고해서코드분량이늘어나거나느려지는일은없습니다. import 는단순히클래스의전체이름을알려주기위한도구에불과합니다.

바보같은질문은없습니다 그러면 String 이나 System 같은클래스는왜 import 선언문없이써도괜찮은가요? java.lang 패키지는 import 선언문을쓰지않아도자동으로들어갑니다. 예를들어 String, System 같은클래스는따로 import 선언문을쓰지않아도전체이름이아닌클래스이름만으로사용할수있습니다.

바보같은질문은없습니다 내가만든클래스도패키지에집어넣어야하나요? 어떻게하죠? 정말그렇게할수있나요? 아마실제프로그래밍을할때는항상클래스를패키지에넣어야할것입니다. 자세한내용은나중에패키징과관련된장에서알아보도록하겠습니다.

API 활용방법 라이브러리에는어떤클래스가들어있을까? 책을훑어봅니다. 클래스를찾았을때그것으로무엇을할수있을지어떻게알수있을까? HTML API 문서를활용합니다.

책을뒤져보는방법

HTML API 문서를활용하는방법 직접 API 문서를살펴봅시다.

숙제 본문을다시한번꼼꼼히읽어봅시다. 6 장본문및맨뒤에나와있는연습문제를직접풀어봅시다. 6 장에나와있는닷컴가라앉히기게임을직접타이핑해서컴파일및실행시켜봅시다. java.sun.com 에서 HTML API 문서를둘러봅시다.