6. 자바 라이브러리 (api)

19
6. 자자 자자자자자 (API)

Upload: paloma

Post on 07-Feb-2016

114 views

Category:

Documents


0 download

DESCRIPTION

6. 자바 라이브러리 (API). 버그의 발생. < terminated> SimpleDotCo .. enter a number 1 hit enter a number 1 hit enter a number 1 kill 3 guesses. public String checkYourself (String … … if(guess == locationCells [ i ]) { result = “hit”; numOfHits ++; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 6.  자바 라이브러리 (API)

6. 자바 라이브러리 (API)

Page 2: 6.  자바 라이브러리 (API)

Head First JAVA

버그의 발생

2

public String checkYourself(String …

if(guess == locationCells[i]) { result = “hit”; numOfHits++; break; }

}

<terminated>

SimpleDotCo..

enter a number 1

hit

enter a number 1

hit

enter a number 1

kill

3 guesses

한 번 맞추고 나서같은 숫자를 계속 입력해도게임을 끝낼 수 있음

- 한 번 맞춘 뒤에도 그 위치에만 들어오면 무조건 맞춘다고 간주- 이미 맞췄는지 확인할 방법 필요

Page 3: 6.  자바 라이브러리 (API)

Head First JAVA

버그 고치기 (1/5)

3

셀 일곱 개가 들어있는 가상의 행이 있고 ,

DotCom 객체는 연속적인 셀 세 개를 차지

0 1 2 3 4 5 6

DotCom 이4, 5, 6 번 셀에있는 것으로 가정

DotCom 에는 그 객체의 셀 위치를 저장하기 위한 인스턴스 변수가 있음

0 1 2

4 5 6 - locationCells (DotCom 의 인스턴스 변수 )

- 인스턴스 변수는 int 배열 - 사용자는 4, 5, 6 이 세 개의 숫자를 맞춰야 함

지금까지 파악한 내용

Page 4: 6.  자바 라이브러리 (API)

Head First JAVA

버그 고치기 (2/5)

4

배열을 하나 더 만들고 위치를 맞출 때마다그 맞춘 위치를 두 번째 배열에 집어넣음

위치를 맞출 때마다 이미 맞췄는지 그 배열을 확인함

0 1 2

false

false

true

첫 번째 옵션

hitCells 배열

(DotCom 에 새로

추가할

부울 배열 인스턴스 변

수 )

- 각 셀의 ‘상태’를 나타내는 값 세 개가 들어감 ex) 2 번에 들어있는 셀을 맞췄다면 true 로 바뀜

Page 5: 6.  자바 라이브러리 (API)

Head First JAVA

버그 고치기 (3/5)

5

원래 배열을 사용하면서 맞춘 셀의 값은모두 -1 로 바뀜 . 배열을 굳이 두 개 사용할 필요 없음

0 1 2

4 5 -1

두 번째 옵션

locationCells

(DotCom 의 인스턴스 변

수 )

- 음수가 있으면 그 셀을 이미 맞췄음을 의미- 배열에서 음이 아닌 숫자만 찾으면 됨

Page 6: 6.  자바 라이브러리 (API)

Head First JAVA

버그 고치기 (4/5)

6

맞출 때마다 각 셀 위치를 삭제 , 배열을 더 작게 고침배열의 크기를 바꿀 수 없기 때문에 새로운 배열을

만들고 , 이전 배열에 남아 있는 셀을 복사하고 새로운 배열로 옮김

세 번째 옵션

0 1 2

4 5 6

locationCells

아직 아무 셀도 맞추지

않은 상태

0 1

4 6

locationCells

1 번 인덱스에 들어 있던

‘5’ 를 맞춘 후의 상태

Page 7: 6.  자바 라이브러리 (API)

Head First JAVA

버그 고치기 (5/5)

7

int 배열에 있는 각 셀에 대해 다음 작업 반복// 사용자가 추측한 위치를 비교하는 부분

만약 사용자가 추측한 것이 맞으면

맞춘 개수를 증가 // 마지막 위치 셀인지 확인

만약 맞춘 회수가 3 이면 “ kill” 을 리턴

그렇지 않으면 “ hit” 을 리턴 만약 부분 끝

그렇지 않으면 “ miss” 를 리턴 만약 부분 끝

반복 부분 끝

기존의 준비코드

남아있는 각 위치셀에 대해 다음 작업 반복// 사용자가 추측한 위치를 비교하는 부분

만약 사용자가 추측한 것이 맞으면

그 셀을 배열에서 제거 // 마지막 위치 셀인지 확인

만약 맞춘 회수가 3 이면 “ kill” 을 리턴

그렇지 않으면 “ hit” 을 리턴 만약 부분 끝

그렇지 않으면 “ miss” 를 리턴 만약 부분 끝

반복 부분 끝

세 번째 옵션

Page 8: 6.  자바 라이브러리 (API)

Head First JAVA

Array List (1/2)

8

add(Object elem)

: 객체 매개변수 (elem) 를 목록에 추가

remove(int index)

: index 매개변수로 지정한 위치에 있는 객체를 제거

remove(Object elem)

: 주어진 객체가 ArrayList 에 있으면 그 객체를 제거

contains(Object elem)

: 객체 매개변수 elem 에 매치되는 것이 있으면 ‘참을 리턴

Page 9: 6.  자바 라이브러리 (API)

Head First JAVA

Array List (2/2)

9

isEmpty()

: 목록에 아무 원소도 없으면 ‘참’을 리턴

indexOf(Object elem)

: 객체 매개변수 (elem) 의 인덱스 또는 -1 을 리턴

size()

: 현재 목록에 들어있는 원소의 개수를 리턴

get(int index)

: 주어진 index 매개변수 위치에 있는 개체를 리턴

Page 10: 6.  자바 라이브러리 (API)

Head First JAVA

Array List 로 할 수 있는 것 (1/2)

10

새로 만든다

ArrayList<Egg> myList = new ArrayList<Egg>();

뭔가를 집어넣는다

Egg s = new Egg();

myList.add(s);

다른 것을 또 집어넣는다

Egg b = new Egg();

myList.add(s);

ArrayList 라는 객체가힙에 만들어짐

ArrayList 객체는Egg 객체를 담기위한 ‘상자’가 됨

Egg 객체를 담기 위해ArrayList 객체가더 커짐

Page 11: 6.  자바 라이브러리 (API)

Head First JAVA

Array List 로 할 수 있는 것 (2/2)

11

몇 개가 들어가 있는지 알아낸다int theSize = myList.size();

2 개가 들어 있기 때문에 2 를 리턴

어떤 것이 안에 들어있는지 찾아냄boolean isIn = myList.contains(s);

어떤 것의 위치 ( 인덱스 ) 를 찾아냄int idx = myList.indexOf(b);

비어 있는지 확인boolean empty = myList.isEmpty();

목록에 있는 것을 제거myList.remove(s);

‘s’ 라는 Egg 객체가 들어있기 때문에 true 리턴

‘b’ 는 두 번째로 추가되었기때문에 ‘ 1’ 을 리턴

두 개가 들어있기때문에 false 리턴

크기가 줄어들어‘b’ Egg 객체만 남음

Page 12: 6.  자바 라이브러리 (API)

Head First JAVA

일반 배열과의 차이점

12

ArrayList

ArrayList<String> myList = newArrayList<String>();

String a = new String(“whoohoo”);

myList.add(a);

myList.add(b);

int theSize = myList.size();

myList.remove(1);

Boolean isIn = myList.contains(b);

일반 배열

String [] myList = new String[2];

String a = new String(“whoohoo”);

myList[0] = a;

myList[1] = b;

int theSize = myList.length;

myList[1] = null;

boolean isIn = false;for (String item : myList) {

if (b.equals(item0) {isIn = true;break; }

}

Page 13: 6.  자바 라이브러리 (API)

Head First JAVA

DotCom 코드 수정 (1/2)

13

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 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;

} }

버그가 있는 기존 버전

Page 14: 6.  자바 라이브러리 (API)

Head First JAVA

DotCom 코드 수정 (2/2)

14

import java.util.ArrayList; public class DotCom {

private ArrayList<String> locationCells; 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;

} }

ArrayList 채용Import 선언문 배열 대신

ArrayList

사용자가 추측한 위치가 ArrayList

에들어있는지 확인

index >= 0 이면추측한 위치가 목록에 들어있는 것이므로 제거목록이 비어있다면

Page 15: 6.  자바 라이브러리 (API)

Head First JAVA

부울 표현식

15

if (price >= 300 && price < 400) { camera = “X”;

}

if (brand.equals(“A”) || brand.equals(“B”)) {

// A 브랜드 또는 B 브랜드에만 }

if ((zoomType.equals(“optical”) && (zoomDegree >= 3 && zoomDegree <= 8)) || (zoomType.equals(“digital”) && (zoomDegree >= 5 && zoomDegree <= 12))) {

// optical 이고 줌이 3 이상 8 이하 또는 // digital 이고 줌이 5 이상 12 이하에만

}

AND 와 OR 연산자

if (model != 2000) {

// 2000 이라는

모델을

// 제외한 나머지

}

if ( ! brand.equals(“X”) )

{

// 브랜드가 X 가 아닌

}

같지 않음

Page 16: 6.  자바 라이브러리 (API)

Head First JAVA

API 패키지

16

자바 API 에서 클래스는 패키지 단위로 묶여 있음

그 클래스를 사용하려면 어떤 패키지에 들어 있는지 알아야 함

System,

String,

Math …

java.lang

ArrayList

등 각종유틸리티

java.util

스윙 GUI클래스 중

일부

Javax.swing

Page 17: 6.  자바 라이브러리 (API)

Head First JAVA

클래스의 전체 이름

17

java . util . ArrayList

패키지명 클래스명

자바에 어떤 ArrayList 를 사용할지 알려줘야 하는데 두 가지 방법 있음

소스 코드 파일 맨 위에서import 선언문 사용

import java.util.ArryList;

public class MyClass { …

}

import 선언문 사용 코드에서 언제 어디서나 직접

전체 이름을 입력Java.util.ArrayList<Dog>

list =

new

java.util.ArrayList<Dog>();

일일이 입력

Page 18: 6.  자바 라이브러리 (API)

Head First JAVA

핵심정리 (1/2)

18

ArrayList 는 자바 API 에 포함되어있는 클래스이다 .

ArrayList 에서 뭔가를 제거할 때는 remove() 를 사용한다 .

ArrayList 에 들어있는 어떤 것의 위치를 알고 싶다면 ( 또는

들어 있는지 ) indexOf() 를 사용한다 .

ArrayList 가 비어있는지 확인할 때는 isEmpty() 를 사용한다 .

ArrayList 의 크기를 알고 싶다면 size() 를 사용한다 .

ArrayList 에 뭔가를 집어넣을 때는 add() 를 사용한다 .

일반 배열의 길이를 알고 싶다면 length 변수를 사용한다 .

Page 19: 6.  자바 라이브러리 (API)

Head First JAVA

핵심정리 (2/2)

19

ArrayList 는 필요에 따라 그 크기가 동적으로 바뀐다 .

ArrayList 에는 원시 유형의 값은 저장할 수 없고 일반 객체만 저장할 수 있지만 , 컴파일러에서 원시 값을 Object 객체로 감싸고 그 객체를 원시유형이 아닌 ArrayList 에 저장하는 일을 자동으로 처리해 준다 .

클래스는 패키지 단위로 묶이고 , java.lang 을 제외한 다른 패키지의 클래스를 사용하려면 전체 이름을 알려줘야 한다 .

ArrayList 에 저장할 객체 유형은 유형 이름을 <> 안에 집어넣은 형태의 유형 매개변수로 선언한다 .

소스 코드 맨 위에서 import 선언문을 사용하거나 항상 전체 이름을 입력해도 된다 .