java.lang 패키지 java.util 패키지 java.io 패키지 콜렉션 kkman@sangji.ac.kr 2
서로연관된클래스나인터페이스를하나의단위로묶는방법 자주사용되는클래스나인터페이스를위해패키지를제공 기본패키지 java.lang, java.util, java.io, java.net, java.awt, java.applet,... 사용자정의패키지 패키지이름은소문자로... kkman@sangji.ac.kr 3
import 문을사용하지않아도자바컴파일러에의해항상자동으로포함 java.lang 패키지에서제공하는인터페이스와클래스 [ 표 13.1] 과 [ 표 13.2] 참조, 교과서 489 쪽 Math 클래스 복잡한수학적계산을위한메소드들과상수들이제공상수 : E, PI( 교과서 491쪽 ) 메소드 abs(absolute value) sin, cos, tan, asin, acos, atan exp, pow, ceil, floor, log kkman@sangji.ac.kr 4
Runtime 클래스프로그램이실행되는환경과실행프로그램사이에인터페이스를가능하게해주는메소드들로구성 Thread 클래스 멀티스레드프로그램을구현하기위한메소드들을갖고있는클래스 ThreadGroup 클래스스레드들을그룹단위로다루기위한클래스 Class 클래스특정한객체에관련된클래스나인터페이스에관한정보를알려주는메소드들을갖고있는클래스 kkman@sangji.ac.kr 5
프로그래머에게유용한유틸리티클래스들을제공하는패키지 다양한표준프로그래밍자료구조체를지원하는클래스를제공 패키지의구성 [ 표 13.4] 와 [ 표 13.5] 참조, 교과서 495 쪽 패키지의계층구조 [ 그림 13.2] 참조, 교과서 497 쪽 kkman@sangji.ac.kr 6
Enumeration<E> 인터페이스열거형원소들을다루기위한인터페이스 [ 예제 13.3] 테스트 Collection<E> 인터페이스콜렉션계층구조에서최상위인터페이스 Iterator<E> 클래스콜렉션원소들에대한반복적인작업을용이하게처리할수있는메소드를갖고있는인터페이스콜렉션사용을위해반드시구현해야함 [ 예제 13.4] 테스트 Map<K,V> 인터페이스키와값을사상시키기위한인터페이스 kkman@sangji.ac.kr 7
Iterator<E> 인터페이스에대한예제 [ 예제 13.4 - IteratorInterface.java] import java.util.*; class SimpleList<E> implements Iterator<E> { private int size=0, index=0; E[] list; SimpleList(int len) { list = (E[])new Object[len]; void addnode(e i) { if (size < list.length)list[size++] = i; public String tostring() { return list[index].tostring(); public boolean hasnext() { return index < size; public E next() { if (index < size) return list[index++]; return null; public E first() { if (size > 0) return list[index = 0]; return null; public void remove() { if (size > 0) System.out.println("\n" + list[--size].tostring() + " is removed."); kkman@sangji.ac.kr 8
Iterator<E> 인터페이스에대한예제 [ 예제 13.4 - IteratorInterface.java](cont.) public class IteratorInterface { static void print(simplelist<string> sl) { while(sl.hasnext()) System.out.print(sl.next() + " / "); public static void main(string[] args) { SimpleList<String> sl = new SimpleList<String>(3); for (int i=0; i<3; i++) sl.addnode("value" + i); print(sl); sl.remove(); sl.first(); print(sl); 실행결과 : value0 / value1 / value2 / value2 is removed. value0 / value1 / kkman@sangji.ac.kr 9
Array 클래스정렬과검색등배열을다루기위한다양한메소드를포함하고있는클래스 [ 예제 13.5] 테스트 BitSet 클래스 동적으로커지는비트셋을생성하고다루는클래스 [ 예제 13.6] 테스트 Hashtable<K,V> 클래스주어진키를이용하여원하는자료값을찾아내는해쉬테이블을정의하고운영하는메소드들을제공하는클래스 [ 예제 13.7] 테스트 kkman@sangji.ac.kr 10
Array 클래스에대한예제 [ 예제 13.5 ArrayClass.java] import java.util.*; public class ArraysClass { public static void main(string[] args) { int i = 0; int [] array = new int [10]; while (i < array.length) array[i] = array.length - i++; System.out.print("Values : "); System.out.println(Arrays.toString(array)); Arrays.sort(array); System.out.print("Sorted Values : "); System.out.println(Arrays.toString(array)); System.out.print("Index of Value 10 is "); System.out.println(Arrays.binarySearch(array, 10)); 실행결과 : Values : [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] Sorted Values : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Index of Value 10 is 9 kkman@sangji.ac.kr 11
Random 클래스난수를생성하는데필요한메소드들을포함하고있는클래스 [ 예제 13.8] 테스트 StringTokenizer 클래스 주어진스트링을여백이나주어진구분자에의해토큰으로분류하는메소드를가지고있는클래스 [ 예제 13.9] 테스트 Date 클래스날짜와시간에관계된메소드들을갖는클래스 Calendar 클래스날짜와시간및특정시간정보간의변환에관계된필드와메소드들를가지고있는클래스 kkman@sangji.ac.kr 12
스트림클래스에바탕을둔 I/O 기능특정운영체제에종속되지않는입출력을수행추상클래스 InputStream, OutputStream 클래스계층구조 [ 그림 13.3] 참조 --- 교과서 509 쪽 최상위 I/O 클래스 InputStream : 입력에관련된모든메소드가정의된추상클래스 OutputStream : 출력에관련된모든메소드가정의된추상클래스 패키지에포함되어있는인터페이스와클래스 [ 표 13.6] 과 [ 표 13.7] 참조 --- 교과서 509 쪽인터페이스 : 12 개클래스입력관련 : 21 개출력관련 : 19 개 kkman@sangji.ac.kr 13
InputStream 클래스 모든입력스트림클래스의슈퍼클래스 입력에관련된기본적인메소드들을제공하는추상클래스 [ 예제 13.10] 테스트 OutputStream 클래스 모든출력스트림클래스의슈퍼클래스 기본적인출력에관한메소드를제공하는추상클래스 kkman@sangji.ac.kr 14
DataInputStream & DataOutputStream 클래스 기본형에따라입출력을행하는메소드들이정의되어있는클래스 DataInput 인터페이스와 DataOutput 인터페이스로부터상속받아구현된클래스 입력과출력에관련된각데이터형에따른메소드 [ 표 13.8] 참조 kkman@sangji.ac.kr 15
PipedInputStream 클래스 &PipedOutputStream 클래스 한스레드의출력을다른스레드의입력으로사용하고자할때유용한클래스 PipedOutputStream Output = new PipedOutputStream(); PipedInputStream Input = new PipedInputStream(Output); BufferedInputStream & BufferedOutputStream 클래스 입출력연산이직접입출력스트림을접근하는것을피하기위해중간에버퍼를두어처리할수있도록해주는클래스 kkman@sangji.ac.kr 16
FileInputStream & FileOutputStream 클래스 FileInputStream 클래스파일로부터데이터를읽기위해사용파일을열수없으면예외 (FileNotFoundException) 가발생 FileOutputStream 클래스데이터를파일에저장하기위해사용되어지는클래스 [ 예제 13.11] 테스트 FilterInputStream & FilterOutputStream 클래스 데이터를읽거나쓸때값을수정하는작업을부가적으로할수있는메소드들을갖고있는클래스 kkman@sangji.ac.kr 17
FileOutputStream 클래스에대한예제 [ 예제 13.11 - CopyFile.java] import java.io.*; public class CopyFile { public static void main(string[] args) { int c; OutputStream outfile; try { FileInputStream infile = new FileInputStream(args[0]); if (args.length == 1) outfile = System.out; else outfile = new FileOutputStream(args[1]); while ((c = infile.read())!= -1) outfile.write(c); infile.close(); outfile.close(); catch(exception e) { System.out.println("Error: " + e.tostring()); 실행방법 : javac CopyFile.java java CopyFile CopyFile.java CopyFile.txt kkman@sangji.ac.kr 18
ByteArrayInputStream & ByteArrayOutputStream 클래스 바이트배열을입력스트림의입력대상이나출력스트림의출력대상으로사용하는클래스 다른입출력스트림들과는달리블록되지않음 [ 예제 13.12] 테스트 PrintStream 클래스 텍스트형태로데이터를출력하기위해, FilterOutputStream 클래스를확장하여구현된클래스 kkman@sangji.ac.kr 19
File & RandomAccessFile 클래스 File 클래스 호스트플랫폼에의존적인파일이나경로명을기계에독립적으로다룰수있도록파일과경로명을다루는데있어추상화를제공 RandomAccessFile 클래스 임의접근파일시스템을제공하여 FileStream 보다다양한파일메커니즘을수행 kkman@sangji.ac.kr 20
여러개의원소를하나의단위로관리할수있는객체예 : 집합이나리스트, 테이블 종류단일형원소를갖는콜렉션클래스개개의원소들이값으로만구성 사상형원소를갖는콜렉션클래스 : 키 (key) 와값 (value) 의사상형태로구성 범용콜렉션구현표자료구조에따른제네릭클래스의종류 [ 표 13.9] 참조 kkman@sangji.ac.kr 21
콜렉션프레임워크 제네릭기능을사용한특정한클래스와인터페이스들을통해콜렉션을체계적으로구현한프레임워크 콜렉션을대상으로다음항목을유기적으로정의하여제공 내부자료구조의형태 자료구조를위한연산 사용할수있는알고리즘 주요특징 1. 라이브러리형태로제공하므로, 프로그래머의구현노력의경감 2. 쉽게사용할수있음 3. 프로그래머가이전에작성한유사한코드를쉽게재사용할수있음 kkman@sangji.ac.kr 22
계층구조 kkman@sangji.ac.kr 23
LinkedList<E> 클래스리스트연산에관련된모든연산이구현 null 을포함한모든형태의원소를허용 FIFO 연산을비롯한다양한형식의응용연산이가능 Deque<E> 인터페이스를구현 [ 예제 13.13] 테스트 ArrayList<E> 클래스 크기를조절할수있는배열. Vector<E> 클래스와유사한기능을제공동기화를지원하지않음 Vector<E> 클래스배열과같이정수인덱스를사용하여접근할수있는원소를가지고있음생성된후에도크기가동적으로변할수있음 [ 예제 13.14] 테스트 kkman@sangji.ac.kr 24
Stack<E> 클래스 스택의상태와운영을위한메소드를제공 [ 예제 13.15] 테스트 PriorityQueue<E> 클래스 우선순위힙을기반으로한제한이없는우선순위큐 HashSet<E> 클래스 Set<E> 인터페이스를해싱이가능하도록구현한클래스 [ 예제 13.16] 테스트 LinkedHashSet<E> 클래스 해시테이블과연결리스트가가능하도록 Set<E> 인터페이스를구현한클래스 kkman@sangji.ac.kr 25
Stack<E> 클래스의예제 [ 예제 13.15 - StackClass.java] import java.util.*; public class StackClass { public static void main(string[] args) { Stack<String> stk = new Stack<String>(); if (stk.empty()) System.out.println("Stack is initially empty."); stk.push("one"); stk.push("two"); stk.push("three"); System.out.println("stack top = " + stk.pop()); System.out.println("After stk.pop()"); System.out.println("stack top = " + stk.peek()); 실행방법 : Stack is initially empty. stack top = three After stk.pop() stack top = two kkman@sangji.ac.kr 26
TreeSet<E> 클래스 TreeMap<K,V> 클래스를기반으로 NavigableSet<E> 인터페이스를구현한클래스 add() 와 remove() 같은기본연산의시간복잡도 (time complexity) 를 log(n) 으로보장 [ 예제 13.17] 테스트 ArrayDeque<E> 클래스 크기를조절할수있는배열을 Deque<E> 인터페이스를이용해구현한클래스 kkman@sangji.ac.kr 27
개개의원소가키와값의쌍으로구성 계층구조 kkman@sangji.ac.kr 28
HashMap<K,V> 클래스 Map<K,V> 인터페이스를해싱이가능하도록구현한클래스 LinkedHashMap<K,V> 클래스 HashMap<K,V> 클래스를확장한클래스로, 해시테이블과연결리스트가가능하도록 Map<K,V> 인터페이스를구현한클래스 TreeMap<K,V> 클래스 Red-Black 트리구조를기반으로 NavigableSet<K,V> 인터페이스를구현한클래스 기본연산의시간복잡도를 log(n) 으로보장 kkman@sangji.ac.kr 29
HashMap<K,V> 클래스의예제 [HashMapClass.java] import java.uitl.*; public class HashMapClass { public static void main(string[] args) { HashMap<String, Integer> numbers = new HashMap<String, Integer>(); numbers.put("one", new Integer(1)); numbers.put("two", new Integer(2)); numbers.put("three", new Integer(3)); Integer value = numbers.get("two"); if (value!= null) System.out.println("two = " + value); 실행결과 : two = 2 kkman@sangji.ac.kr 30