이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Package 개념 Package 묶는방법사용하기기본 Package Utility Package Generic Class Generic Method Collection ArrayList LinkedList Set Queue Map Collection Class 3
패키지 (package) : 클래스들을묶은것자바라이브러리도패키지로구성 ( 예 ) java.net 패키지 네트워크관련라이브러리 1 관련된클래스들을쉽게파악 2 원하는클래스들을쉽게찾을수있다. 3 패키지마다이름공간을따로갖기때문에같은클래스이름을여러패키지가사용 4 패키지별로접근에제약을가할수있다. 5 6 package business;// 패키지선언 public class Order {... } 인터넷도메인이름을역순으로사용한다. 예를들면 com.company.test 라는패키지이름은도메인이름 company.com에서의 test라는프로젝트를의미한다. Order 라는클래스는 business 패키지에속한다. Q: 만약패키지문을사용하지않은경우에는어떻게되는가? A: 디폴트패키지 (default package) 에속하게된다. 7 8
Q: 만약패키지문이있는경우에소스파일과클래스파일의위치는? A: 패키지이름이디렉토리가되고그아래에저장된다. Q: 우리가실행시키고싶은클래스파일이다른디렉토리에있는경우에도실행시킬수있을까? A: 실행이가능하다. 다만클래스경로를설정하여야한다. 자바가상기계가클래스파일을찾는경로를클래스경로 (class path) 라고한다. package business; public class Order { }... 탐색순서 9 10 1. 클래스에패키지이름을붙여서참조한다. 2. 개별클래스를 import 한다. 3. 전체패키지를 import 한다. 1. business.order myorder = new business.order(); Q: java.awt. awt * 문장은 java.awt.font awt 패키지를포함하는가? A: java.awt.font 패키지는 java.awt 패키지안에포함되지않는다. 만약 java.awt.font 의멤버와 java.awt 의멤버를동시에사용하려면다음과같이따로따로포함하여야한다. import java.awt.*; import java.awt.font.*; 2. import business.order; // business 패키지안의 Order 클래스포함 3. import business.*; // 패키지전체포함 Visual & Biomedical Computing Lab (VisBiC), PNU CSE http://visbic.cse.pnu.edu/ 11 Visual & Biomedical Computing Lab (VisBiC), PNU CSE http://visbic.cse.pnu.edu/ 12
Import 문을사용할필요가없이기본적으로포함된다. Object 클래스 : 기초적인메소드를제공하는모든클래스의조상클래스 Math 클래스 : 각종수학함수들을포함하는클래스 Wrapper 클래스 : Integer 와같이기초자료형을감싸서제공하는랩퍼클래스들 String 클래스, StringBuffer 클래스 : 문자열을다루는클래스 System 클래스 : 시스템정보를제공하거나입출력을제공하는클래스 Thread 클래스 : 스레드기능을제공하는클래스 Class 클래스 : 클래스에대한정보를얻기위한클래스 13 14 15 16
Class 객체는실행중인클래스를나타낸다. Class 객체는자바가상기계에의하여자동적으로생성된다. Class 객체를이용하면객체의클래스이름을출력할수있다. 17 18 System 클래스는실행시스템과관련된속성과메소드를제공 19 20
기초자료형을객체로포장시켜주는클래스 ( 예 ) Integer obj = new Integer(10); 랩퍼클래스는기초자료형을객체로포장한것입니다. 10 21 22 Wrapper 객체와기초자료형사이의변환을자동으로수행한다. Integer box = new Integer(10); System.out.println(box + 1); // box 는자동으로 int 형으로변환 23 24
String 클래스는주로상수문자열, 즉변경이불가능한문자열을나타낸다. StringBuffer 와 StringBuilder 클래스는변경가능한문자열을나타낸다. StringBuffer sb = new StringBuffer(); // 기본적으로 16 바이트의공간이할당된다. sb.append("hello"); // 6 바이트가사용된다. 25 26 여러가지유틸리티클래스들을제공한다. 27 28
29 30 31 32
33 34 문자열을분석하여서토큰으로분리시켜주는기능을제공 35 36
제네릭프로그래밍 (generic programming) 일반적인코드를작성하고이코드를다양한타입의객체에대하여재사용하는프로그래밍기법 제네릭은컬렉션라이브러리에많이사용 Java 5.0 버전이후사용. JDK 1.5 이상 38 일반적인객체를처리하려면 Object 참조변수를사용 Object 참조변수는어떤객체이던지참조할수있다. 예제로하나의데이터를저장하는 Store 클래스를살펴보자. 문제점발생!! 39 40
문자열을저장하려면다음과같이선언 Store<String> store = new Store<String>(); 정수를저장하려면다음과같이선언 Store<Integer> store = new Store<Integer>(); 41 42 메소드에서도타입매개변수를사용하여서제네릭메소드를정의할수있다. 타입매개변수의범위가메소드내부로제한된다. String[] language= { "C++", "C#", "JAVA" }; String last = Array.<String>getLast(language);// last는 JAVA" 또는 String last = Array.getLast(language); // last 는 JAVA" 생략가능 : 컴파일러가 String 인지알고있기때문에 배열의마지막원소를반환하는메소드 43 44
컬렉션 (collection) 은자바에서자료구조를구현한클래스 자료구조로는리스트 (list), 스택 (stack), 큐 (queue), 집합 (set), 해쉬테이블 (hash table) 등이있다. 46 컬렉션인터페이스 컬렉션 컬렉션클래스 - java.uitil package 에포함 - collection lib. 모두 generic 기능지원 47 48
초기버전 : Vector, Stack, HashTable, Bitset, Enumeration 이그것이다. 버전 1.2 부터는풍부한컬렉션라이브러리가제공 인터페이스와구현을분리 ( 예 ) List 인터페이스를 ArrayList와 LinkedList 클래스가구현 49 50 51 52
ArrayList 를배열 (Array) 의향상된버전또는가변크기의배열이라고생각하면된다. ArrayList의생성 ArrayList<String> list = new ArrayList<String>(); 원소추가 list.add( "MILK" ); list.add( "BREAD" ); list.add( "BUTTER" ); 53 54 반복자 (iterator) : 반복자는컬렉션의원소들을하나씩처리하는데사용메소드 hasnext() : 아직방문하지않은원소가있으면 truee next() : 다음원소를반환 remove() : 최근에반환된원소를삭제 사용 각 collection 객체에서 iterator() 메소드를호출하여반복자객체를얻음 Iterator e = list.iterator(); //list 는 ArrayList 객체 55 56
빈번하게삽입과삭제가일어나는경우에사용 57 58 List<String> list = Arrays.asList(new String[size]); 일반적인배열을리스트로변환한다. 59 60
집합 (Set) 은원소의중복을허용하지않는다. HashSet HashSet은해쉬테이블에원소를저장하기때문에성능면에서가장우수하다. 하지만원소들의순서가일정하지않은단점이있다. TreeSet 레드- 블랙트리 (red-black tree) 에원소를저장한다. 따라서값에따라서순서가결정되며하지만 HashSet보다는느리다. LinkedHashSet 해쉬테이블과연결리스트를결합한것으로원소들의순서는삽입되었던순서와같다. 61 62 중복원소추가하지않음 63 64
65 66 큐는먼저들어온데이터가먼저나가는자료구조 FIFO(First-In First-Out) 큐의처음원소삭제않고가져옴. 큐원소가없으면 NoSuchElementException(element) null(peek) 큐의처음원소지우고가져옴. 큐원소가없으면 NoSuchElementException(remove) null(poll) ll) 67 68
우선순위큐 (priority queue): 우선순위를가진항목들을저장하는큐 FIFO 순서가아니라우선순위가높은데이터가먼저나가게된다. 가장일반적인큐 : 스택이나 FIFO 큐를우선순위큐로구현할수있다. 69 70 사전과같은자료구조. 키 (key) 에값 (value) 이매핑된다. Map Interface HashMap TreeMap LinkedHashMap 71 72
Map 자료방문시 Map.Entry 인터페이스사용 73 74 유용한알고리즘-메소드로제공 Sorting : Collections.sort(); Shuffling : Collections.shuffle(); shuffle(); Searching : index=collections.binarysearch(collec, element); Min/max : Collections.min(); Collections.max(); Reverse : Collections.reverse(); Fill ( 지정된값으로채우기 ) : Collections.fill(); copy(); // 복사 swap(); // 지정된위치를서로바꾸기 addall(); // 지정된모든원소들을추가 frequency(); // 지정된컬렉션에서지정된원소가얼마나나오는지 disjoint(); // 두개의컬렉션이겹치지않는지검사 예 Collection.sort(list); //list 안의문자열정렬 Collection.sort(list, Collections.reverseOrder()); // 역순정렬 Collections.shuffle(list); // 섞기 int pos=collections.binarysearch(list, key); 75 76