1 / 66

Chapter 12 유틸리티 API

Chapter 12 유틸리티 API. Java.util 패키지 주요 클래스. 고전적인 컬렉션들. Vector, Hashtable, Stack JAVA2 이전에 독립적으로 존재 이후에 JCF(Java Collection Framework) 에 속하게 됨 기존 클래스가 이미 광범위하게 사용되고 있는 상황이라 인터페이스를 유지하고 내부구조만 바꾸어 호환성 유지 현재는 JCF 에 속하지만 사용법과 구조가 조금 달라 고전적인 컬렉션으로 구별하여 부름. 고전적인 컬렉션 계층도. java.lang.Object.

marrim
Download Presentation

Chapter 12 유틸리티 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. Chapter 12 유틸리티 API

  2. Java.util 패키지 주요 클래스

  3. 고전적인 컬렉션들 • Vector, Hashtable, Stack • JAVA2 이전에 독립적으로 존재 • 이후에 JCF(Java Collection Framework)에 속하게 됨 • 기존 클래스가 이미 광범위하게 사용되고 있는 상황이라 인터페이스를 유지하고 내부구조만 바꾸어 호환성 유지 • 현재는 JCF에 속하지만 사용법과 구조가 조금 달라 고전적인 컬렉션으로 구별하여 부름

  4. 고전적인 컬렉션 계층도 java.lang.Object java.util.Dictionary java.util.HashTable Collection java.util.AbstractList 컬렉션 클래스 java.util.Vector java.util.Stack

  5. Vector 클래스 (1) • 크기가 가변적인 배열과 유사 • 개수가 정해지지 않은 데이터들을 체계적으로 저장하는데 유리하지만 배열보다 속도가 느리다 용량(Capacity) 크기(Size)

  6. Vector 클래스 (2) • Vector 클래스 주요 메소드

  7. 반환 하는 메소드의 타입은 객체 타입이므로 반드시 사용하려는 타입으로 변환 한 후 사용하여야 한다. Vector 클래스 사용 예 Vector v =new Vector(); v.add("첫 번째 원소") ; // 0번 index에 삽입 v.add("두 번재 원소"); // 1번 index에 삽입 v.add(1, "새로운 원소"); //1번 원소 대체 String str = (String)v.get(1); //1번원소 반환.형변환 필수

  8. Stack 클래스(1) • LIFO방식의 대표적인 자료구조 • 가장 최근에 저장된 객체부터 사용 가능 push(객체1) pop() 객체1 객체0 객체0 객체0

  9. Stack 클래스(2) • Stack 클래스 주요 메소드

  10. Stack 클래스 사용 예 • Vector 와 마찬가지로 반환 시 타입을 적절히 변환 • 반환 연산은 peek(), pop() 2가지가 있음 Stack st new Stack(); st.push("안녕하세요?"); // 스택에 쌓기 String msg = (String)st.pop(); // 반환 후 삭제

  11. Hashtable 클래스(1) • 키 값과 대응(매핑)되는 값으로 이루어진 사전기능을 구현한 클래스 • Hashtable은 일련의 bucket 들로 구성 • bucket은 key-value의 쌍으로 이루어진 linked list를 가짐 • key-value쌍이 Hashtable에 삽입되면 key객체의 hashCode() 메소드의 리턴값에 따라 특정 bucket을 부여받고 linked list에 추가됨 • 검색시 key객체의 hashCode()계산 후 bucket을 찾은 후 linked list를 선형 탐색함 • 주어진 key와 linked list의 키 값을 비교 위해 equals() 사용

  12. Hashtable 클래스(2) • Hashtable 클래스 주요 메소드

  13. Hashtable 클래스 사용 예 • 보통 키값은 문자열을 많이 사용하며 기본형은 사용 할 수 없음 • Hashtable 역시 반환 시 객체 타입이므로 적절히 변환 하여 사용 Hashtable ht = new Hashtable(); ht.put("한국", "KOREA"); // 키값을 "한국"으로 갖는 객체 삽입 String country = (String)ht.get("한국"); // "한국"을 키값으로 갖는 객체 반환

  14. Enumeration 인터페이스 • 일련의 요소를 1회 1개씩 생성 • Vector의 요소, Hashtable의 키나 값등을 열거하기 위한 것 • 저장된 요소를 모두 얻기 위해 다음의 방법을 자주 쓴다 • Enumeration 을 구현한 대표적인 것으로 StringTokenizer 클래스가 있다. for (Enumeration e = v.keys() ; e.hasMoreElements() ;) { Object obj = ht.get((String)e.nextElement()); }

  15. 시간 관련 클래스 java.lang.Object java.util.Date java.util.Calender java.util.GregorianCalender < 시간 관련 클래스 계층도>

  16. Date 클래스 • Date 클래스는 1.1버전 이후로 사용 빈도가 줄어듬 • 년, 월, 일의 정보제공은 Calendar 클래스가 담당 • 밀리세컨드로 시간 표현은 System의 currentTimeMillis 메소드가 담당 • Date 클래스는 각 국어에 대응되지 않아 사장 추세 • 반환 값은 long 형으로 1970년 1월 1일 기준으로 현재까지 의 시간을 천분의 1초로 계산한 값이다.

  17. Date 클래스 사용 예 • 위 예문은 두 개의 Date 객체 생성하는 시간 차이를 계산 한 것이다. Date begin = new Date(); //시작 시간 저장 Date end = new Date(); //끝난 시간 저장 //걸린시간 계산 long lnTimeElaped = end.getTime() - begin.getTime();

  18. Calendar 클래스(1) • 추상 클래스로 일반적인 달력과 시계기능이 선언만 되어 있음 • 추상 클래스이므로 직접 생성하지 못하고 2가지 방법이 이용된다. • getInstance 메소드로 객체 얻는 법 • GregorianCalendar를 직접 생성 하는 법 Calendar rightNow = Calendar.getInstance(); // getInstance() 사용 Calendar rightNow = new GregorianCalendar(); // 직접 그레고리언 캘린더 생성

  19. Calendar 클래스 사용 예 • 많은 필드 값들로 구성되어 있으며 대부분이 public static final int로 되어 있으며 함부로 바꿀 수가 없다. • 바꾸기 위해서 set(), add() 메소드 등을 사용한다. System.out.println("올해는 " + rightNow.get(Calendar.YEAR) + "이고 오늘은 " + rightNow.get(Calendar.DATE) + "일 입니다.");

  20. Timer 와 TimerTask(1) • Timer 클래스는 정해진 시간에 이벤트를 발생시키거나, 정해진 시간 간격마다 반복적으로 이벤트를 발생하도록 한다. • Timer는 백그라운드 thread로 태스크를 스케줄 한다. (프로그래머가 thread를 직접 만들 필요가 없다) java.util.Timer 주요 메소드

  21. Timer 와 TimerTask(2) • schedule 메소드는 주어진 TimerTask 작업을 정해진 시간에 실행하거나, 주어진 시간 간격을 두고 반복 실행한다. • 게임이나 애니메이션 같은 부드러운 동작에 사용됨. • scheduleAtFixedRate는 작업 간격을 일정하게 하는 메소드이다. • 시간이 중요한 요소인 프로그램에 사용됨 • 예를 들어 시계프로그램이라면 1초에 한번씩 다시 그려야 하므로 이 메소드를 사용한다. java.util.TimerTask 주요 메소드

  22. Zip 파일 압축과 복원 • 압축 파일 개요 • 데이터를 보다 적은 용량으로 크기를 줄이는 것 • 일반적으로 반복 발생되는 데이터를 보다 간략한 형식으로 바꾸는 방식으로 압축을 한다. • 압축의 예 AAAAABCDABCDABCD 4A3ABCD • 압축은 보통 실시간 스트리밍 방식으로 행해진다. • 일반적으로 ZIP 형식이 쓰이고, 자바에서는 jar 형식이 있으나 방식은 ZIP 와 같다.

  23. Zip 파일 정보 얻기(1) • ZipFile 클래스는 zip 파일자체와 포함된 엔트리에 대한 정보를 제공한다. • 엔트리 : zip 파일에 포함된 각각의 원소를 가리킴 java.util.zip.ZipFile 주요 메소드

  24. Zip 파일 정보 얻기(2) • ZipEntry 주요 메소드 java.util.zip.ZipEntry 주요 메소드

  25. Zip File 압축 해제 • ZipFile 을 이용한 복원 • ZipFile 객체를 생성한다. • entries 메소드로 ZipEntry 목록을 얻는다. • 각 ZipEntry에 대해서 getInputStream 으로 입력 스트림을 얻는다. • 각 ZipEntry에 대해서 파일을 기록할 출력 스트림을 만들어 파일 내용을 기록한다. • 파일과 스트림을 닫는다.

  26. Zip File 압축 • ZipOutputStream 을 이용한 복원 • ZipOutputStream 을 만든다. • 각각의 파일에 대해서 입력 스트림을 만든다. • 각각의 파일에 대해서 ZipEntry를 만들어 ZipOutputStream에 추가한다. • 각각의 파일 데이터를 ZipOutputStream에 출력한다. • 입출력 스트림을 닫는다.

  27. Arrays 클래스(1) • 배열에 관련된 여러 기능을 제공하는 유틸리티 클래스 • 대표적인 기능은 배열에 대한 배교, 정렬, 이진 탐색, 채우기 등이다. java.util.Arrays 주요 메소드

  28. Arrays 클래스(2) • 배열 비교 • 배열도 객체이기 때문에 단순한 동등 연산자(==)로 비교 불가 • Arrays의 equals 메소드를 사용하여 비교하여야 함 • Object의 equals 메소드도 사용은 할수 있지만 올바로 동작하지 않는다. int arr1[] = {1, 2, 3, 4}; int arr2[] = (1, 2, 3, 4}; //Arrays 의 equals 메소드 사용 if(Arrays.equals(arr1, arr2)) System.out.println("Arrays.equals(arr1, arr2)"); //Object 의 equals 메소드 사용 if(arr1.equals(arr2)) System.out.println("arr1.equals(arr2)"); 실행 결과 : Arrays.equals(arr1, arr2)

  29. Arrays 클래스(3) • 배열 정렬 • Arrays 클래스가 제공하는 정렬은 기본적으로 오름차순으로 정렬된다. • 기본적인 산술형은 간단히 대소비교가 가능하나 객체는 복잡함 • 객체는 대소를 비교 할 일반적인 규칙이 없음 • 객체의 비교에서 기준을 프로그래머가 작성 해 주어야 함 (예를들어 문자열의 길이가 큰것을 객체가 크다고 기준을 정하던지, 프로세스가 먼저 생성된 것이 크다고 하던지 하는 기준) • 이런 기준을 Comparable 나 Comparator 인터페이스로 구현 • Comparable 과 Comparator 가 있는 객체는 대소비교가 가능한 객체로 인식되고 따라서 sort 메소드를 통해 정렬이 가능

  30. Arrays 클래스(4) java.lang.Comparable 주요 메소드 java.lang.Comparator 주요 메소드

  31. Arrays 클래스(5) • 배열 탐색 • 배열의 이진 탐색을 수행하기 위해서는 반드시 sort 되어 있어야 함 • 이진 탐색을 수행해 찾는 값이 존재하면 그 값의 인덱스 반환 • 찾지 못했을 경우에는 삽입 할 수 있는 위치 값을 음수로 바꾸고 1을 추가로 뺀 값을 반환 • (예 : {1, 3, 5, 8} 배열에 4를 탐색하면 인덱스[2] 에 들어갈 수 있으므로 -2 -1 = -3, 즉 -3을 반환하게 된다.) double pdata[] = {1.0, 5.0, 2.0, 8.0}; Arrays.sort(pdata); int idx = Arrays.binarySearch(pdata, 2.0); //오름차순으로 정렬수 2.0을 검색. 1 을 반환

  32. StringTokenizer • StringTokenizer 클래스는 문자열을 토큰으로 쪼개는 역할을 한다. • 기본적으로 탭, 리턴, 공백을 경계로 토큰으로 분해한다. 출력 결과 나는 어제 일어나서 밥을 먹고 학교에 갔다. String str = "나는 어제 일어나서 밥을 먹고 학교에 갔다."; //기본 설정은 공백 단위로 토큰을 구분한다 StringTokenizer st = new StringTokenizer(str); while(st.hasMoreTokens()){ System.out.println(st.nextToken()); }

  33. Chapter 13 컬렉션 프레임워크

  34. 컬렉션 프레임워크 개요 • 컬렉션 프레임워크(Collections Framework, JCF) • 데이터의 묶음인 컬렉션을 지원하는 API로 자바2 플렛폼 이후에 포함되었음 • 달걀을 모아놓은 바구니나, 장난감이 들어있는 상자로 비유됨 • 앞에서 살펴본 고전적인 컬렉션들이 체계적이지 못해 좀 더 체계적인 컬렉션 지원으로 JCF 가 개발 되었다. • JCF 의 이점 • 복잡한 자료 구조를 직접 구현 할 필요가 없다. • 표준 인터페이스 사용으로 이해가 쉽고, 유지보수가 용이 해 짐 • 일반적으로 속도와 안정성이 증가됨

  35. JCF 인터페이스 개념 • 컬렉션 종류에 따라 크게 3가지로 분류 • Set (집합) • 중괄호( { } )로 표시, 중복된 값 불허, 값의 순서는 없음 • List • 값들의 중복 허용, 데이터 순서 중요 (예 : 배열, 벡터) • Map • 일반적으로 사전과 유사. 키값으로 대응되는 값을 얻음 (예 : Hashtable). 하나의 key는 하나의 값에만 대응되어야 함 {‘a’, ‘b’, ‘c’} == {‘b’, ‘c’, ‘a’} {‘a’, ‘b’, ‘c’, ‘a’} != {‘b’, ’a’, ‘c’, ‘a’} {{“안녕”, “Hello”}, {“잘 가”, “bye”}}

  36. JCF 핵심 인터페이스 • 크게 Collections, Map 두 가지 종류가 있음 • Sorted 가 붙은 것은 순서가 있는 원소 관리에 사용 Map Collection List SortedMap Set SortedSet

  37. 구현 클래스 • 알고리즘에는 해시테이블, 배열, 트리, 연결리스트 이 있음 • 일반적으로 구현 클래스 이름은 <알고리즘><인터페이스>로 정해짐 • 배열 알고리즘으로 List 인터페이스 구현 : ArrayList • 해시 테이블로 Set 인터페이스 구현 : HashSet

  38. Collection 인터페이스 • 모든 Set 과 List 클래스들이 공통으로 지원해야 할 기능 정의 java.util.Collection 원소 추가/제거 관련 메소드

  39. Set 인터페이스 • Collection 인터페이스 상속하며 원소의 중복을 허용하지 않고 순서의 구분이 없다. • Set 인터페이스를 구현한 것으로 HashSet 과 TreeSet이 있다. java.util.Set 원소 추가/제거 관련 메소드

  40. HashSet • Hashtable을 이용해서 Set 인터페이스를 구현한 클래스 • 거의 모든 기능을 HashMap을 이용해 구현하였으므로 중요한 알고리즘은 포함하고 있지 않다. • 초기 값으로 크기와 부하계수가 있는데 크기는 최대로 포함시킬 크기보다 약간 크게 잡으면 되고, 부하 계수는 보통 기본값인 0.75 를 그대로 사용 Set set = new HashSet(100, 0.8); // 초기 크기 100, 부하계수 0.8 Set set = new HashSet(30); // 초기 크기 30, 부하계수 0.75

  41. List 인터페이스 • Set 달리 원소의 중복을 허용, 원소는 순서가 있다. • List 는 인덱스를 통해서 객체를 제어하거나 검색 함 • List 특성상 중간에 원소를 삽입하면 중간 이후의 모든 원소는 하나씩 밀려나고, 삭제하면 모두 하나씩 당겨지게 된다. java.util.List 원소 제어 메소드

  42. ArrayList • 배열을 이용하여 List를 구현한 것 • ArrayList 는 버퍼 용량이 부족하면 자동으로 크기를 조절함 List list = new ArrayList(); // 공백의 리스트 생성 List list = new ArrayList(20); //초기 크기가 20인 리스트 생성

  43. Map • Map은 키 값(Key)과 대응 값(Value)의 쌍을 관리하는 컬렉션이다. • Map은 Collection을 상속하지 않기 때문에 컬렉션 객체와 섞어서 사용 할 수 없다. java.util.Map 매핑 추가/제거 메소드

  44. HashMap • JCF 에서 구현한 Map은 HashMap과 TreeMap이 있는데 좀 더 속도가 빠르고 효율적인 HashMap 을 주로 사용함 • 실제 사용은 앞에서 본 HashSet과 유사 • (HashSet 자체가 내부적으로 HashMap을 사용하기 때문이다) • 효율을 높이기 위해 초기 크기는 포함시킬 매핑보다 약간 크게 잡고, 부하계수는 기본값을 사용함. Map hashmap = new HashMap(20); //초기 크기 20의 맵 생성 Map hashmap = new HashMap(20, 0.50); //초기크기 20, 부하계수 0.50의 맵 생성

  45. Collections 클래스 • 컬렉션을 사용하는데 도움이 되는 기능을 모아 놓은 클래스로 모든 메소드는 static 이다. • 주요 기능은 컬렉션의 원소 제어, 정렬, 탐색, 비교 등이 있다. • 원소 제어 • 모든 메소드는 List 를 인자로 받음(Set은 순서가 없어서 복사, 위치이동 등의 연산을 수행하지 못함) java.util.Collections 리스트 원소 제어 메소드

  46. 비교와 탐색 • 빠르게 원소의 위치를 찾거나 최대값, 최소값을 얻는 기능 • 비교/탐색 메소드 사용시 컬렉션 원소들은 서로 크기 비교가 가능하여야 하며 그렇지 않으면 예외 발생 java.util.Collections 비교/탐색 관련 메소드

  47. 정렬 • 정렬도 마찬가지로 Set은 사용 불가. List를 사용함 • 정렬 메소드가 정상적인 작동을 위해 Comparable 인터페이스를 제공하거나 Comparator 를 제공하여야 함 java.util.Collections 정렬 관련 메소드

  48. 동기화 컬렉션 • 고전적인 클래스들은 여러 스레드가 함께 사용되도 안전한, 스레드 안전 클래스 이지만 JCF 의 새로운 컬렉션은 특별한 언급이 없다면 동기화를 지원 안함 • Collections에서는 자동으로 동기화된 인터페이스 제공하는 래퍼객체를 생성해주는 메소드 가지고 있음 • 동기화된 컬렉션 만든 후 원본은 내버려두고 동기화된 컬렉션만으로 작업을 해야 함. (동기화가 깨지기 때문에…) java.util.Collections 동기화 래퍼 메소드

  49. 컬렉션 변환 배열 <-> 컬렉션 Vector <-> 컬렉션

  50. Chapter 14 멀티 태스킹과 스레드

More Related