1 / 19

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

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

paloma
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 버그의 발생 <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++; break; } … } - 한 번 맞춘 뒤에도 그 위치에만 들어오면 무조건 맞춘다고 간주 - 이미 맞췄는지 확인할 방법 필요 한 번 맞추고 나서 같은 숫자를 계속 입력해도 게임을 끝낼 수 있음 Head First JAVA

  3. 버그고치기 (1/5) 지금까지 파악한 내용 셀 일곱 개가 들어있는 가상의 행이 있고, DotCom객체는 연속적인 셀 세 개를 차지 DotCom이 4, 5, 6 번 셀에 있는 것으로 가정 3 1 2 0 4 5 6 DotCom에는 그 객체의 셀 위치를 저장하기 위한 인스턴스 변수가있음 4 5 6 - locationCells (DotCom의 인스턴스 변수) - 인스턴스 변수는 int배열 - 사용자는 4, 5, 6 이 세 개의 숫자를 맞춰야 함 0 1 2 Head First JAVA

  4. 버그고치기 (2/5) 첫 번째 옵션 배열을 하나 더 만들고 위치를 맞출 때마다 그 맞춘 위치를 두 번째 배열에 집어넣음 위치를 맞출 때마다 이미 맞췄는지 그 배열을 확인함 - 각 셀의 ‘상태’를나타내는 값 세 개가 들어감 ex) 2번에 들어있는 셀을 맞췄다면 true로 바뀜 false false true hitCells배열 (DotCom에 새로 추가할 부울 배열 인스턴스 변수) 0 1 2 Head First JAVA

  5. 버그고치기 (3/5) 두 번째 옵션 원래 배열을 사용하면서 맞춘 셀의 값은 모두 -1로바뀜. 배열을 굳이 두 개 사용할 필요 없음 - 음수가 있으면 그 셀을 이미 맞췄음을 의미 - 배열에서 음이 아닌 숫자만찾으면 됨 4 5 -1 locationCells (DotCom의 인스턴스 변수) 0 1 2 Head First JAVA

  6. 버그고치기 (4/5) 세 번째 옵션 맞출 때마다 각 셀 위치를 삭제, 배열을 더 작게 고침 배열의 크기를 바꿀 수 없기 때문에 새로운 배열을 만들고, 이전 배열에 남아 있는 셀을 복사하고 새로운 배열로 옮김 4 4 5 6 6 locationCells 아직 아무 셀도 맞추지 않은 상태 locationCells 1번 인덱스에 들어 있던 ‘5’를 맞춘 후의 상태 0 0 1 1 2 Head First JAVA

  7. 버그고치기 (5/5) 기존의 준비코드 세 번째 옵션 int배열에 있는 각 셀에 대해 다음 작업 반복 // 사용자가 추측한 위치를 비교하는 부분 만약 사용자가 추측한 것이 맞으면 맞춘 개수를 증가 // 마지막 위치 셀인지 확인 만약 맞춘 회수가 3이면 “kill”을 리턴 그렇지 않으면“hit”을 리턴 만약 부분 끝 그렇지 않으면“miss”를 리턴 만약 부분 끝 반복 부분 끝 남아있는 각 위치셀에 대해 다음 작업 반복 // 사용자가 추측한 위치를 비교하는 부분 만약 사용자가 추측한 것이 맞으면 그 셀을 배열에서 제거 // 마지막 위치 셀인지 확인 만약 맞춘 회수가 3이면 “kill”을 리턴 그렇지 않으면“hit”을 리턴 만약 부분 끝 그렇지 않으면“miss”를 리턴 만약 부분 끝 반복 부분 끝 Head First JAVA

  8. Array List (1/2) add(Object elem) : 객체매개변수(elem)를 목록에 추가 remove(int index) : index 매개변수로 지정한 위치에 있는 객체를 제거 remove(Object elem) : 주어진 객체가 ArrayList에 있으면 그 객체를 제거 contains(Object elem) : 객체 매개변수 elem에 매치되는 것이 있으면 ‘참을리턴 Head First JAVA

  9. Array List (2/2) isEmpty() : 목록에 아무 원소도 없으면 ‘참’을 리턴 indexOf(Object elem) : 객체 매개변수(elem)의 인덱스 또는 -1을 리턴 size() : 현재 목록에 들어있는 원소의 개수를 리턴 get(int index) : 주어진 index 매개변수 위치에 있는 개체를 리턴 Head First JAVA

  10. Array List로 할 수 있는 것 (1/2) 새로 만든다 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객체가 더 커짐 Head First JAVA

  11. Array List로 할 수 있는 것 (2/2) 2개가 들어 있기 때문에 2를 리턴 몇 개가 들어가 있는지 알아낸다 inttheSize = myList.size(); 어떤 것이 안에 들어있는지 찾아냄 booleanisIn = myList.contains(s); 어떤 것의 위치(인덱스)를 찾아냄 intidx = myList.indexOf(b); 비어있는지 확인 boolean empty = myList.isEmpty(); 목록에 있는 것을 제거 myList.remove(s); ‘s’라는 Egg객체가 들어 있기 때문에 true 리턴 ‘b’는 두 번째로 추가되었기 때문에 ‘1’을리턴 두 개가 들어있기 때문에 false 리턴 크기가 줄어들어 ‘b’Egg객체만 남음 Head First JAVA

  12. 일반 배열과의 차이점 ArrayList 일반 배열 ArrayList<String> myList = new ArrayList<String>(); String [] myList = new String[2]; String a = new String(“whoohoo”); String a = new String(“whoohoo”); myList[0] = a; myList.add(a); myList.add(b); myList[1] = b; inttheSize = myList.size(); inttheSize = myList.length; myList.remove(1); myList[1] = null; Boolean isIn = myList.contains(b); booleanisIn = false; for (String item : myList) { if (b.equals(item0) { isIn = true; break;} } Head First JAVA

  13. DotCom코드 수정 (1/2) 버그가 있는 기존 버전 public class DotCom { int[] locationCells; intnumOfHits = 0; public voidsetLocationCells(int [] locs) { locationCells= locs; } public String checkYourself(String stringGuess) { int guess = Integer.parseInt(stringGuess); String result = "miss"; for(inti = 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; } } Head First JAVA

  14. DotCom코드 수정 (2/2) ArrayList채용 import java.util.ArrayList; public classDotCom { privateArrayList<String> locationCells; public voidsetLocationCells (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; } } Import 선언문 배열 대신 ArrayList 사용자가 추측한 위치가 ArrayList에 들어있는지 확인 index >=0 이면 추측한 위치가 목록에 들어있는 것이므로 제거 목록이 비어있다면 Head First JAVA

  15. 부울표현식 AND와 OR 연산자 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 이하에만 } 같지 않음 if (model != 2000) { // 2000이라는 모델을 // 제외한 나머지 } if ( ! brand.equals(“X”) ) { // 브랜드가 X가 아닌 } Head First JAVA

  16. API 패키지 java.lang java.util Javax.swing 자바 유틸리티 스윙 클래스 필수 요소 System, String, Math … ArrayList 등 각종 유틸리티 스윙 GUI 클래스 중 일부 자바 API에서 클래스는 패키지 단위로 묶여 있음 그 클래스를 사용하려면 어떤 패키지에 들어 있는지 알아야 함 Head First JAVA

  17. 클래스의 전체 이름 java . util . ArrayList 클래스명 패키지명 자바에 어떤 ArrayList를 사용할지 알려줘야 하는데 두 가지 방법 있음 import 선언문 사용 일일이 입력 소스 코드 파일 맨 위에서 import 선언문 사용 import java.util.ArryList; public class MyClass { … } 코드에서 언제 어디서나 직접 전체 이름을 입력 Java.util.ArrayList<Dog> list = new java.util.ArrayList<Dog>(); Head First JAVA

  18. 핵심정리 (1/2) ArrayList는 자바 API에 포함되어있는 클래스이다. ArrayList에서 뭔가를 제거할 때는 remove()를사용한다. ArrayList에 들어있는 어떤 것의 위치를 알고 싶다면 (또는 들어 있는지) indexOf()를 사용한다. ArrayList가 비어있는지 확인할 때는 isEmpty()를 사용한다. ArrayList의 크기를 알고 싶다면 size()를 사용한다. ArrayList에 뭔가를 집어넣을 때는 add()를 사용한다. 일반 배열의 길이를 알고 싶다면 length 변수를 사용한다. Head First JAVA

  19. 핵심정리 (2/2) ArrayList는 필요에 따라 그 크기가 동적으로 바뀐다. ArrayList에는 원시 유형의 값은 저장할 수 없고 일반 객체만 저장할 수 있지만, 컴파일러에서 원시 값을 Object 객체로 감싸고 그 객체를 원시유형이 아닌 ArrayList에 저장하는 일을 자동으로 처리해 준다. 클래스는 패키지 단위로 묶이고, java.lang을 제외한 다른 패키지의 클래스를 사용하려면 전체 이름을 알려줘야 한다. ArrayList에 저장할 객체 유형은 유형 이름을 <> 안에 집어넣은 형태의 유형 매개변수로 선언한다. 소스 코드 맨 위에서 import 선언문을 사용하거나 항상 전체 이름을 입력해도 된다. Head First JAVA

More Related