SlideShare a Scribd company logo
1 of 33
제네릭과 컬렉션
컬렉션(collection)의 개념
• 컬렉션
– 컬렉션은 요소(element)라고 불리는 가변 개수의 객체들의 모음
• 객체들의 컨테이너라고도 불림
– 컬렉션 클래스
• Vector, ArrayList, Hashtable, LinkedList, HashMap, HashSet, Stack
– java.util 패키지에서 제공
– 다양한 객체들을 추가, 삭제, 검색 등 관리하는데 사용됨
Slide : 2
배열과 컬렉션의 개념 차이
0 1 2 3 4 5 6
배열(Array) 컬렉션(Collection)
• 고정 크기 이상의 객체를 관리
할 수 없다.
• 배열의 중간에 객체가 삭제되
면 응용프로그램에서 자리를 옮
겨야 한다.
• 가변 크기로서 객체의 개수를 염려
할 필요 없다.
• 배열의 중간에 객체가 삭제되면 컬
렉션이 자동으로 자리를 옮겨준다.
Slide : 3
컬렉션을 위한 인터페이스와 클래스
Collection
Set List Queue Map
클래스
인터페이스
HashSet HashtableArrayList LinkedListVector
Slide : 4
Vector 클래스
• Vector의 특성
– 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스
• 배열의 길이 제한 단점 극복
• 원소의 개수가 넘쳐나면 자동으로 늘어나는 가변 길이
– Vector에 삽입 가능한것
• 객체만 가능
• null도 삽입 가능
• 기본 데이터 타입은 불가능
– Wrapper 객체로 만들어 삽입 가능
– Vector에 객체 삽입
• 벡터의 맨 뒤에 객체 추가 : 공간이 모자라면 자동 늘림
• 벡터 중간에 객체 삽입 : 삽입된 뒤의 객체는 뒤로 하나씩 이동
– Vector에서 객체 삭제
• 임의의 위치에 있는 객체 삭제 가능 : 객체 삭제 후 하나씩 앞으로 자동
이동
Slide : 5
Vector 클래스의 주요 메소드
메소드 설명
boolean add(E e) 벡터의 맨 뒤에 요소 추가
void add(int index, Eelement) 지정된 인덱스에 지정된 객체를 삽입
int capacity() 벡터의 현재 용량 반환
boolean addAll(Collection<? extends E>c) c가 지정하는 컬렉션의 모든 요소를 벡터의 맨 뒤에 추가
void clear() 벡터의 모든 요소 삭제
boolean contains(Object o) 벡터가 지정된 객체를 포함하고 있으면 true 반환
E elementAt(int index) 지정된 인덱스의 요소 반환
Eget(int index) 지정된 인덱스의 요소 반환
int indexOf(Object o) 지정된 객체와 같은 첫 번째 요소의 인덱스 반환. 없으면 -1 반환
boolean isEmpty() 벡터가 비어있으면 true 반환
E remove(int index) 지정된 인덱스의 요소 삭제
boolean remove(Object o) 지정된 객체와 같은 첫 번째 요소를 벡터에서 삭제
void removeAllElements() 벡터의 모든 요소를 삭제하고 크기를 0으로 만듬
int size() 벡터가 포함하는 요소의 개수 반환
Object[] toArray() 벡터의 모든 요소를 포함하는 배열을 반환
Slide : 6
v
vVector 객체 생성
Vector v = new Vector();
요소 객체 삽입
v.add("Hello"); v.add(
new Integer(4)); v.ad
d(new Person());
Vector 객체
"Hello" 4
String Integer Person
int n = v.size(); // n은 3
int c = v.capacity(); //c는 7
n = 3
c = 7
v
요소객체개수 n
벡터의 용량 c
요소 객체 중간 삽입
v.add(2, "Sahni");
"Hello" 4
String Integer Person
"Sahni"
String
obj
i = 4
객체 얻어내기
Integer obj = (Integer)v.get (1);
int i = obj.intValue();
v.add(5, "Sahni");
// v.size()인 3 보다 큰 곳에 삽입 불가능, 오류
v요소 객체 삭제
v.remove(1);
"Hello"
String
last마지막 요소 객체
Person last = (Person)
v.lastElement();
v
모든 요소 객체 삭제
Person
"Sahni"
String
v.remove(4);
// 인덱스 4에 요소 객체가 없으므로 오류
v. removeAllElements();
ArrayList 클래스
Slide : 9
• ArrayList의 특성
– java.util.ArrayList
– 가변 크기 배열을 구현한 클래스
– ArrayList에 삽입 가능한것
• 객체만 가능
• 기본 데이타 타입은 불가능
– Wrapper 객체로 만들어 삽입 가능
• null도 삽입 가능
– ArrayList에 객체 삽입
• 리스트의 맨 뒤에 객체 추가 : 공간이 모자라면 자동 늘림
• 리스트의 중간에 객체 삽입 : 삽입된 뒤의 객체는 뒤로 하나씩 이동
– ArrayList 에서 객체 삭제
• 임의의 위치에 있는 객체 삭제 가능 : 객체 삭제 후 하나씩 앞으로 이동
ArrayList 클래스의 주요 메소드
Slide : 10
메소드 설명
boolean add(E e) ArrayList의 맨 뒤에 요소 추가
void add(int index, Eelement) 지정된 인덱스에 지정된 객체를 삽입
boolean addAll(Collection<? extends E>c) c가 지정하는 컬렉션의 모든 요소를 ArrayList의 맨 뒤에 추가
void clear() ArrayList의 모든 요소 삭제
boolean contains(Object o) ArrayList가 지정된 객체를 포함하고 있으면 true 반환
E elementAt(int index) 지정된 인덱스의 요소 반환
E get(int index) 지정된 인덱스의 요소 반환
int indexOf(Object o) 지정된 객체와 같은 요소의 첫번째 인덱스 반환. 없으면 -1 반환
boolean isEmpty() ArrayList가 비어있으면 true 반환
E remove(int index) 지정된 인덱스의 요소 삭제
boolean remove(Object o) 지정된 객체와 같은 첫 번째 요소를 ArrayList에서 삭제
int size() ArrayList가 포함하는 요소의 개수 반환
Object[] toArray() ArrayList의 모든 요소를 포함하는 배열을 반환
a
aArrayList 생성
ArrayList a = new ArrayList ();
ArrayList 객체
요소 객체 삽입
a.add("Hello"); a.add(
new Integer(4)); a.ad
d(new Person());
"Hello" 4
String Integer Person
int n = a.size(); // n은 3
int c = a.capacity();//capacity() 메소
n = 3
드 없음
a
요소객체개수 n
용량
"Hello" 4
String Integer Person
"Sahni"
String
Integer obj = (Integer) a.get (1);
int i = obj.intValue();
obj
i = 4
객체 얻어내기
요소 객체 중간 삽입
a.add(2, "Sahni");
a.add(5, "Sahni");
// a.size()인 3 보다 큰 곳에 삽입 불가능, 오류
a.remove(1);
a요소 객체 삭제
"Hello"
String
a
모든 객체 삭제
a.clear();
Person
"Sahni"
String
a.remove(4); // 오류
Hashtable 클래스
• Hashtable의 특성
– java.util.Hashtable
– 삽입 및 검색이 빠른 특징
– 키(key)와 값(value) 사용
• 키와 값이 한쌍으로 삽입됨
• 키는 해쉬 테이블에 삽입되는 위치를 결정하는데 내부적으로 이용
• 값을 검색하기 위해서는 키를 반드시 이용함
• 키, 값 모두 객체만이 이용됨. 기본 데이터 타입은 사용할 수 없음
• Hashtable에 삽입, 검색하는 예
Hashtable h = new Hashtable(); // Hashtable 객체 생성
h.put("apple", "사과"); // 키는 "apple"이며 값이 "사과"인 요소 삽입 String
s = (String)h.get("apple"); // "apple" 키의 값을 검색. s는 "사과"
Slide : 13
Hashtable 클래스의 주요 메소드
메소드 설명
void clear() Hashtable의 모든 키 삭제
boolean contains(Object o) Hashtable의 어떤 키가 지정된 객체에 매핑되면 true 반환
boolean containsKey(Object key) Hashtable이 지정된 키를 포함하고 있으면 true 반환
boolean containsValue(Object value)
Hashtable이 하나 이상의 키를 지정된 값에 매핑시킬 수 있으면
true 반환
Enumeration<V> elements() Hashtable의 모든 값의 enumeration 반환
V get(Object key)
지정된 키에 맵핑되는 값을 반환하거나 맵핑되는 값이 없으면 null
을 반환
boolean isEmpty() Hashtable에 키가 없으면 true 반환
Enumeration<K> keys() Hashtable의 모든 키의 enumeration 반환
V put(K key, V value) Hashtable에 key를 value에 매핑
V remove(Object key) 지정된 키와 이에 매핑된 모든 값들을 Hashtable에서 삭제
int size() Hashtable이 포함하는 키의 개수 반환
Slide : 14
해쉬테이블의 조작 사례
h
Hashtable h = new Hashtable();
Hashtable 객체
해쉬테이블 생성
key value
Slide : 15
"76"
"54"
"이소룡"
"황기태"
"21"
"123"
"홍길동" "해
리슨포드"
h
(키, 값) 삽입
h.put("21", “홍길동”);
h.put("54", “황기태”);
h.put("76", “이소룡”);
h.put("123", “해리슨포드”);
String str = (String)h.get(“54”); str = "황기태"
h.remove(“54”);
"76" "이소룡"
h
키로 값 읽기
키로 요소 삭제
"21"
"123"
"홍길동" "해
리슨포드"
int n = h.size(); n = 3
키 개수
LinkedList 클래스
• LinkedList의 특성
– java.util.LinkedList
– List 인터페이스를 구현한 클래스
– Vector, ArrayList 클래스와 매우 유사
– 요소 객체들은 양방향으로 연결되어 관리됨
– 요소 객체는 맨 앞, 맨 뒤에 추가 가능
– 요소 객체는 인덱스를 이용하여 중간에 삽입 가능
– 맨 앞이나 맨 뒤에 요소를 추가하거나 삭제할 수 있어 스택이나 큐
로 사용 가능
Slide : 17
컬렉션검색
• Enumeration 과 Iterator
– 자료구조의 모든 데이터 접근가능
– Iterator 는 fail-Fast방식
– Enumeration 은 컬렉션집합 통째로 복사해서 사용
Slide : 18
Enumeration 활용
• Vector 에서의 Enumeration
– Enumeration en = v.element()
– 데이터의 유무확인
• en.hasMoreElements()
– 데이터리턴
• en.nextElement()
• Hashtable 에서의 Enumeration
– 해쉬테이블의 값에 해당하는 것 얻기
• Enumeration en1 = h.elements()
– 해쉬테이블의 키에 해당하는 것 얻기
• Enumeration en2 = h.keys()
Slide : 19
Iterator 활용
• Iterator 인터페이스
– Vector, ArrayList, LinkedList와 같은 리스트 자료구조에서 요소를
순차적으로 검색할 때 Iterator 인터페이스를 사용
– iterator() 메소드를 호출하면 Iterator 객체를 반환
– Iterator 객체는 검색한 위치를 기억하고 있어 인덱스 없이 순차적
검색이 가능
– Iterator 인터페이스 메소드
– Iterator iter1 = v.iterator() //벡터에서 iterator얻기
– Iterator iter2 = h.values().iterator() //헤쉬테이블에서 얻기
메소드 설명
boolean hasNext() 다음 반복에서 사용될 요소가 있으면 true 반환
Enext() 다음 요소 반환
void remove() 마지막으로 반환된 요소를 제거
Slide : 20
Collections 클래스 활용
• Collections 클래스
– java.util 패키지에 포함
– 컬렉션에 대해 연산을 수행하고 결과로 컬렉션을 반환
– 주요 메소드
• 컬렉션에 포함된 요소들을 소팅하는 sort() 메소드
• 요소의 순서를 반대로 하는 reverse() 메소드
• 요소들의 최대, 최소값을 찾아내는 max(), min() 메소드
• 특정 값을 검색하는 binarySearch() 메소드
– 모두 static 메소드
Slide : 21
제네릭의 기본 개념
• 제네릭
– 디자인 패턴의 매개 변수화된 타입과 메소드를 의미
– 데이터타입을 디자인시에 지정하는 것이 아니라,
– 클래스객체생성할때 지정해서 사용하는 기술
– JDK1.5부터 도입
Slide : 22
제네릭 컬렉션 사용하기
• 제네릭 Vector 클래스
– 벡터는 일반 배열과는 달리 크기가 가변적인 객체의 배열을 구현
– 배열의 원소는 객체만 허용
• 기본 데이터 타입은 원소가 될 수 없음
– add, remove, indexOf, size, Iterator 등 메소드 이용하여 관리
Slide : 23
• 제네릭 Vector 사용하기
– 제네릭 Vector의 생성
Vector<Integer> myVector = new Vector<Integer>();
– 제네릭 벡터에 요소 삽입 myVector.add(new Integer(5));
myVector.add(new Integer(55));
myVector.add(new Integer(23));
– 제네릭 벡터에서 요소 얻기
Integer n = myVector.get(0);
Integer m = myVector.get(1);
Integer k = myVector.get(2);
– 생성할 때 지정한 타입이 아닌 타입은 삽입 불가
myVector.add("hello"); // 컴파일 오류 myVect
or.add(new Double(3.5)); // 컴파일 오류 myVe
ctor.add(new Person()); // 컴파일 오류
Slide : 24
제네릭 클래스작성
– 일반화된 타입(generic type) 매개 변수 T를 가진 MyClass
– 작성된 MyClass 타입 객체 생성 예
public class MyClass<T> {
T val;
void set(T a) {
val = a;
}
T get() { ret
urn val;
}
}
MyClass<String> s = new MyClass<String>();
s.set("hello");
System.out.println(s.get()); // "hello" 출력
MyClass<Integer> n = new MyClass<Integer>();
n.set(new Integer(5)); System.out.println(n.get
()); // 숫자 5 출력
Slide : 25
제너릭을 사용하지않은 것과 사용한 것의 비교
제너릭을 사용하지 않은 Top 클래스와 이용하기
class Top { privat
e int data;
public void setData(int data) {
this.data = data;
}
public int getData() {
return data;
}
}
class Test {
public static void main(String []args) {
Top t = new Top();
t.setData(3);
int n = (Integer) t.getData();
System.out.println(n);
}
}
제너릭을 사용한 Top 클래스와 이용하기
class Test {
public static void main(String []args) {
Top <Integer> t = new Top<Integer>();
class Top <T>{
private Tdata;
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
t.setData(3);
int n = t.getData(); S
ystem.out.println(n);
}
}
Slide : 26
제네릭 클래스, 인터페이스 사용
• 변수 선언
– 제네릭 클래스 또는 인터페이스 타입 변수를 선언할 때는 타입 매개
변수에 실제 타입을 기입
List<Integer> li; V
ector<String> vs;
• 객체 생성
– 제네릭 클래스 객체를 생성할 때도 타입 매개 변수에 실제 타입을
기입
Vector<String> vs = new Vector<String>();
Slide : 27
제네릭의 장점
• 컴파일 시에 타입이 결정되어 보다 안전한 프로그래밍 가능
• 개발 시 다운캐스팅(타입 캐스팅) 절차 불필요
제너릭사용시
나는 숫자만 넣을거야!
String 타입 저장시 오류 꺼내올
때 int 로 받아 그대로 사용
제너릭 비사용시
뭘 넣어도 다 들어가네!
꺼낼때 귀찮음.
필요한 타입으로 캐스팅해서 사용
Slide : 28
Set 예제
Map 예제
Vector. List 예제
For문의 확장
제네릭 사용시

More Related Content

What's hot

빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: FunctionChan Shik Lim
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기Yong Joon Moon
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편Yong Joon Moon
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기Yong Joon Moon
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)MIN SEOK KOO
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 

What's hot (20)

Fp basic-kotlin
Fp basic-kotlinFp basic-kotlin
Fp basic-kotlin
 
Swift 0x17 generics
Swift 0x17 genericsSwift 0x17 generics
Swift 0x17 generics
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: Function
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 

Viewers also liked

4 steps to solving your solvable problems.ppt
4 steps to solving your solvable problems.ppt4 steps to solving your solvable problems.ppt
4 steps to solving your solvable problems.pptPrinciple Skills
 
2016-Metal-Brochure
2016-Metal-Brochure2016-Metal-Brochure
2016-Metal-BrochureTom Townsend
 
GDC 2016 summary by singta (tae park)
GDC 2016 summary by singta (tae park)GDC 2016 summary by singta (tae park)
GDC 2016 summary by singta (tae park)Singta Inc.
 
Garland_Sustainable_Brochure914
Garland_Sustainable_Brochure914Garland_Sustainable_Brochure914
Garland_Sustainable_Brochure914Tom Townsend
 
Гомельский лицей приборостроения
Гомельский лицей приборостроенияГомельский лицей приборостроения
Гомельский лицей приборостроенияglpribor
 
Lean Discussions About Agile and MVP
Lean Discussions About Agile and MVPLean Discussions About Agile and MVP
Lean Discussions About Agile and MVPAleks Yenin
 

Viewers also liked (9)

4 steps to solving your solvable problems.ppt
4 steps to solving your solvable problems.ppt4 steps to solving your solvable problems.ppt
4 steps to solving your solvable problems.ppt
 
2016-Metal-Brochure
2016-Metal-Brochure2016-Metal-Brochure
2016-Metal-Brochure
 
GDC 2016 summary by singta (tae park)
GDC 2016 summary by singta (tae park)GDC 2016 summary by singta (tae park)
GDC 2016 summary by singta (tae park)
 
Garland_Sustainable_Brochure914
Garland_Sustainable_Brochure914Garland_Sustainable_Brochure914
Garland_Sustainable_Brochure914
 
Why play mobile casinos?
Why play mobile casinos?Why play mobile casinos?
Why play mobile casinos?
 
Apresentação zenklub
Apresentação zenklubApresentação zenklub
Apresentação zenklub
 
Presentación1
Presentación1Presentación1
Presentación1
 
Гомельский лицей приборостроения
Гомельский лицей приборостроенияГомельский лицей приборостроения
Гомельский лицей приборостроения
 
Lean Discussions About Agile and MVP
Lean Discussions About Agile and MVPLean Discussions About Agile and MVP
Lean Discussions About Agile and MVP
 

Similar to 05 컬렉션제너릭

[Swift] Iterator
[Swift] Iterator[Swift] Iterator
[Swift] IteratorBill Kim
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10hungrok
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화Sungchul Park
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6Chris Ohk
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - HeapBill Kim
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 Sehyeon Nam
 
3.자료구조
3.자료구조3.자료구조
3.자료구조명준 김
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장Software in Life
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting SortBill Kim
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - DequeueBill Kim
 
[Swift] Data Structure - Array
[Swift] Data Structure - Array[Swift] Data Structure - Array
[Swift] Data Structure - ArrayBill Kim
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지SeongHyun Ahn
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기Cosmos Shin
 

Similar to 05 컬렉션제너릭 (20)

Java_08 collection
Java_08 collectionJava_08 collection
Java_08 collection
 
[Swift] Iterator
[Swift] Iterator[Swift] Iterator
[Swift] Iterator
 
C++ stl
C++ stlC++ stl
C++ stl
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
 
강의자료3
강의자료3강의자료3
강의자료3
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
Scala
ScalaScala
Scala
 
강의자료5
강의자료5강의자료5
강의자료5
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
 
3.자료구조
3.자료구조3.자료구조
3.자료구조
 
STL study (skyLab)
STL study (skyLab)STL study (skyLab)
STL study (skyLab)
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue
 
[Swift] Data Structure - Array
[Swift] Data Structure - Array[Swift] Data Structure - Array
[Swift] Data Structure - Array
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
 

05 컬렉션제너릭

  • 2. 컬렉션(collection)의 개념 • 컬렉션 – 컬렉션은 요소(element)라고 불리는 가변 개수의 객체들의 모음 • 객체들의 컨테이너라고도 불림 – 컬렉션 클래스 • Vector, ArrayList, Hashtable, LinkedList, HashMap, HashSet, Stack – java.util 패키지에서 제공 – 다양한 객체들을 추가, 삭제, 검색 등 관리하는데 사용됨 Slide : 2
  • 3. 배열과 컬렉션의 개념 차이 0 1 2 3 4 5 6 배열(Array) 컬렉션(Collection) • 고정 크기 이상의 객체를 관리 할 수 없다. • 배열의 중간에 객체가 삭제되 면 응용프로그램에서 자리를 옮 겨야 한다. • 가변 크기로서 객체의 개수를 염려 할 필요 없다. • 배열의 중간에 객체가 삭제되면 컬 렉션이 자동으로 자리를 옮겨준다. Slide : 3
  • 4. 컬렉션을 위한 인터페이스와 클래스 Collection Set List Queue Map 클래스 인터페이스 HashSet HashtableArrayList LinkedListVector Slide : 4
  • 5. Vector 클래스 • Vector의 특성 – 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스 • 배열의 길이 제한 단점 극복 • 원소의 개수가 넘쳐나면 자동으로 늘어나는 가변 길이 – Vector에 삽입 가능한것 • 객체만 가능 • null도 삽입 가능 • 기본 데이터 타입은 불가능 – Wrapper 객체로 만들어 삽입 가능 – Vector에 객체 삽입 • 벡터의 맨 뒤에 객체 추가 : 공간이 모자라면 자동 늘림 • 벡터 중간에 객체 삽입 : 삽입된 뒤의 객체는 뒤로 하나씩 이동 – Vector에서 객체 삭제 • 임의의 위치에 있는 객체 삭제 가능 : 객체 삭제 후 하나씩 앞으로 자동 이동 Slide : 5
  • 6. Vector 클래스의 주요 메소드 메소드 설명 boolean add(E e) 벡터의 맨 뒤에 요소 추가 void add(int index, Eelement) 지정된 인덱스에 지정된 객체를 삽입 int capacity() 벡터의 현재 용량 반환 boolean addAll(Collection<? extends E>c) c가 지정하는 컬렉션의 모든 요소를 벡터의 맨 뒤에 추가 void clear() 벡터의 모든 요소 삭제 boolean contains(Object o) 벡터가 지정된 객체를 포함하고 있으면 true 반환 E elementAt(int index) 지정된 인덱스의 요소 반환 Eget(int index) 지정된 인덱스의 요소 반환 int indexOf(Object o) 지정된 객체와 같은 첫 번째 요소의 인덱스 반환. 없으면 -1 반환 boolean isEmpty() 벡터가 비어있으면 true 반환 E remove(int index) 지정된 인덱스의 요소 삭제 boolean remove(Object o) 지정된 객체와 같은 첫 번째 요소를 벡터에서 삭제 void removeAllElements() 벡터의 모든 요소를 삭제하고 크기를 0으로 만듬 int size() 벡터가 포함하는 요소의 개수 반환 Object[] toArray() 벡터의 모든 요소를 포함하는 배열을 반환 Slide : 6
  • 7. v vVector 객체 생성 Vector v = new Vector(); 요소 객체 삽입 v.add("Hello"); v.add( new Integer(4)); v.ad d(new Person()); Vector 객체 "Hello" 4 String Integer Person int n = v.size(); // n은 3 int c = v.capacity(); //c는 7 n = 3 c = 7 v 요소객체개수 n 벡터의 용량 c 요소 객체 중간 삽입 v.add(2, "Sahni"); "Hello" 4 String Integer Person "Sahni" String obj i = 4 객체 얻어내기 Integer obj = (Integer)v.get (1); int i = obj.intValue(); v.add(5, "Sahni"); // v.size()인 3 보다 큰 곳에 삽입 불가능, 오류
  • 8. v요소 객체 삭제 v.remove(1); "Hello" String last마지막 요소 객체 Person last = (Person) v.lastElement(); v 모든 요소 객체 삭제 Person "Sahni" String v.remove(4); // 인덱스 4에 요소 객체가 없으므로 오류 v. removeAllElements();
  • 9. ArrayList 클래스 Slide : 9 • ArrayList의 특성 – java.util.ArrayList – 가변 크기 배열을 구현한 클래스 – ArrayList에 삽입 가능한것 • 객체만 가능 • 기본 데이타 타입은 불가능 – Wrapper 객체로 만들어 삽입 가능 • null도 삽입 가능 – ArrayList에 객체 삽입 • 리스트의 맨 뒤에 객체 추가 : 공간이 모자라면 자동 늘림 • 리스트의 중간에 객체 삽입 : 삽입된 뒤의 객체는 뒤로 하나씩 이동 – ArrayList 에서 객체 삭제 • 임의의 위치에 있는 객체 삭제 가능 : 객체 삭제 후 하나씩 앞으로 이동
  • 10. ArrayList 클래스의 주요 메소드 Slide : 10 메소드 설명 boolean add(E e) ArrayList의 맨 뒤에 요소 추가 void add(int index, Eelement) 지정된 인덱스에 지정된 객체를 삽입 boolean addAll(Collection<? extends E>c) c가 지정하는 컬렉션의 모든 요소를 ArrayList의 맨 뒤에 추가 void clear() ArrayList의 모든 요소 삭제 boolean contains(Object o) ArrayList가 지정된 객체를 포함하고 있으면 true 반환 E elementAt(int index) 지정된 인덱스의 요소 반환 E get(int index) 지정된 인덱스의 요소 반환 int indexOf(Object o) 지정된 객체와 같은 요소의 첫번째 인덱스 반환. 없으면 -1 반환 boolean isEmpty() ArrayList가 비어있으면 true 반환 E remove(int index) 지정된 인덱스의 요소 삭제 boolean remove(Object o) 지정된 객체와 같은 첫 번째 요소를 ArrayList에서 삭제 int size() ArrayList가 포함하는 요소의 개수 반환 Object[] toArray() ArrayList의 모든 요소를 포함하는 배열을 반환
  • 11. a aArrayList 생성 ArrayList a = new ArrayList (); ArrayList 객체 요소 객체 삽입 a.add("Hello"); a.add( new Integer(4)); a.ad d(new Person()); "Hello" 4 String Integer Person int n = a.size(); // n은 3 int c = a.capacity();//capacity() 메소 n = 3 드 없음 a 요소객체개수 n 용량 "Hello" 4 String Integer Person "Sahni" String Integer obj = (Integer) a.get (1); int i = obj.intValue(); obj i = 4 객체 얻어내기 요소 객체 중간 삽입 a.add(2, "Sahni"); a.add(5, "Sahni"); // a.size()인 3 보다 큰 곳에 삽입 불가능, 오류
  • 12. a.remove(1); a요소 객체 삭제 "Hello" String a 모든 객체 삭제 a.clear(); Person "Sahni" String a.remove(4); // 오류
  • 13. Hashtable 클래스 • Hashtable의 특성 – java.util.Hashtable – 삽입 및 검색이 빠른 특징 – 키(key)와 값(value) 사용 • 키와 값이 한쌍으로 삽입됨 • 키는 해쉬 테이블에 삽입되는 위치를 결정하는데 내부적으로 이용 • 값을 검색하기 위해서는 키를 반드시 이용함 • 키, 값 모두 객체만이 이용됨. 기본 데이터 타입은 사용할 수 없음 • Hashtable에 삽입, 검색하는 예 Hashtable h = new Hashtable(); // Hashtable 객체 생성 h.put("apple", "사과"); // 키는 "apple"이며 값이 "사과"인 요소 삽입 String s = (String)h.get("apple"); // "apple" 키의 값을 검색. s는 "사과" Slide : 13
  • 14. Hashtable 클래스의 주요 메소드 메소드 설명 void clear() Hashtable의 모든 키 삭제 boolean contains(Object o) Hashtable의 어떤 키가 지정된 객체에 매핑되면 true 반환 boolean containsKey(Object key) Hashtable이 지정된 키를 포함하고 있으면 true 반환 boolean containsValue(Object value) Hashtable이 하나 이상의 키를 지정된 값에 매핑시킬 수 있으면 true 반환 Enumeration<V> elements() Hashtable의 모든 값의 enumeration 반환 V get(Object key) 지정된 키에 맵핑되는 값을 반환하거나 맵핑되는 값이 없으면 null 을 반환 boolean isEmpty() Hashtable에 키가 없으면 true 반환 Enumeration<K> keys() Hashtable의 모든 키의 enumeration 반환 V put(K key, V value) Hashtable에 key를 value에 매핑 V remove(Object key) 지정된 키와 이에 매핑된 모든 값들을 Hashtable에서 삭제 int size() Hashtable이 포함하는 키의 개수 반환 Slide : 14
  • 15. 해쉬테이블의 조작 사례 h Hashtable h = new Hashtable(); Hashtable 객체 해쉬테이블 생성 key value Slide : 15
  • 16. "76" "54" "이소룡" "황기태" "21" "123" "홍길동" "해 리슨포드" h (키, 값) 삽입 h.put("21", “홍길동”); h.put("54", “황기태”); h.put("76", “이소룡”); h.put("123", “해리슨포드”); String str = (String)h.get(“54”); str = "황기태" h.remove(“54”); "76" "이소룡" h 키로 값 읽기 키로 요소 삭제 "21" "123" "홍길동" "해 리슨포드" int n = h.size(); n = 3 키 개수
  • 17. LinkedList 클래스 • LinkedList의 특성 – java.util.LinkedList – List 인터페이스를 구현한 클래스 – Vector, ArrayList 클래스와 매우 유사 – 요소 객체들은 양방향으로 연결되어 관리됨 – 요소 객체는 맨 앞, 맨 뒤에 추가 가능 – 요소 객체는 인덱스를 이용하여 중간에 삽입 가능 – 맨 앞이나 맨 뒤에 요소를 추가하거나 삭제할 수 있어 스택이나 큐 로 사용 가능 Slide : 17
  • 18. 컬렉션검색 • Enumeration 과 Iterator – 자료구조의 모든 데이터 접근가능 – Iterator 는 fail-Fast방식 – Enumeration 은 컬렉션집합 통째로 복사해서 사용 Slide : 18
  • 19. Enumeration 활용 • Vector 에서의 Enumeration – Enumeration en = v.element() – 데이터의 유무확인 • en.hasMoreElements() – 데이터리턴 • en.nextElement() • Hashtable 에서의 Enumeration – 해쉬테이블의 값에 해당하는 것 얻기 • Enumeration en1 = h.elements() – 해쉬테이블의 키에 해당하는 것 얻기 • Enumeration en2 = h.keys() Slide : 19
  • 20. Iterator 활용 • Iterator 인터페이스 – Vector, ArrayList, LinkedList와 같은 리스트 자료구조에서 요소를 순차적으로 검색할 때 Iterator 인터페이스를 사용 – iterator() 메소드를 호출하면 Iterator 객체를 반환 – Iterator 객체는 검색한 위치를 기억하고 있어 인덱스 없이 순차적 검색이 가능 – Iterator 인터페이스 메소드 – Iterator iter1 = v.iterator() //벡터에서 iterator얻기 – Iterator iter2 = h.values().iterator() //헤쉬테이블에서 얻기 메소드 설명 boolean hasNext() 다음 반복에서 사용될 요소가 있으면 true 반환 Enext() 다음 요소 반환 void remove() 마지막으로 반환된 요소를 제거 Slide : 20
  • 21. Collections 클래스 활용 • Collections 클래스 – java.util 패키지에 포함 – 컬렉션에 대해 연산을 수행하고 결과로 컬렉션을 반환 – 주요 메소드 • 컬렉션에 포함된 요소들을 소팅하는 sort() 메소드 • 요소의 순서를 반대로 하는 reverse() 메소드 • 요소들의 최대, 최소값을 찾아내는 max(), min() 메소드 • 특정 값을 검색하는 binarySearch() 메소드 – 모두 static 메소드 Slide : 21
  • 22. 제네릭의 기본 개념 • 제네릭 – 디자인 패턴의 매개 변수화된 타입과 메소드를 의미 – 데이터타입을 디자인시에 지정하는 것이 아니라, – 클래스객체생성할때 지정해서 사용하는 기술 – JDK1.5부터 도입 Slide : 22
  • 23. 제네릭 컬렉션 사용하기 • 제네릭 Vector 클래스 – 벡터는 일반 배열과는 달리 크기가 가변적인 객체의 배열을 구현 – 배열의 원소는 객체만 허용 • 기본 데이터 타입은 원소가 될 수 없음 – add, remove, indexOf, size, Iterator 등 메소드 이용하여 관리 Slide : 23
  • 24. • 제네릭 Vector 사용하기 – 제네릭 Vector의 생성 Vector<Integer> myVector = new Vector<Integer>(); – 제네릭 벡터에 요소 삽입 myVector.add(new Integer(5)); myVector.add(new Integer(55)); myVector.add(new Integer(23)); – 제네릭 벡터에서 요소 얻기 Integer n = myVector.get(0); Integer m = myVector.get(1); Integer k = myVector.get(2); – 생성할 때 지정한 타입이 아닌 타입은 삽입 불가 myVector.add("hello"); // 컴파일 오류 myVect or.add(new Double(3.5)); // 컴파일 오류 myVe ctor.add(new Person()); // 컴파일 오류 Slide : 24
  • 25. 제네릭 클래스작성 – 일반화된 타입(generic type) 매개 변수 T를 가진 MyClass – 작성된 MyClass 타입 객체 생성 예 public class MyClass<T> { T val; void set(T a) { val = a; } T get() { ret urn val; } } MyClass<String> s = new MyClass<String>(); s.set("hello"); System.out.println(s.get()); // "hello" 출력 MyClass<Integer> n = new MyClass<Integer>(); n.set(new Integer(5)); System.out.println(n.get ()); // 숫자 5 출력 Slide : 25
  • 26. 제너릭을 사용하지않은 것과 사용한 것의 비교 제너릭을 사용하지 않은 Top 클래스와 이용하기 class Top { privat e int data; public void setData(int data) { this.data = data; } public int getData() { return data; } } class Test { public static void main(String []args) { Top t = new Top(); t.setData(3); int n = (Integer) t.getData(); System.out.println(n); } } 제너릭을 사용한 Top 클래스와 이용하기 class Test { public static void main(String []args) { Top <Integer> t = new Top<Integer>(); class Top <T>{ private Tdata; public void setData(T data) { this.data = data; } public T getData() { return data; } } t.setData(3); int n = t.getData(); S ystem.out.println(n); } } Slide : 26
  • 27. 제네릭 클래스, 인터페이스 사용 • 변수 선언 – 제네릭 클래스 또는 인터페이스 타입 변수를 선언할 때는 타입 매개 변수에 실제 타입을 기입 List<Integer> li; V ector<String> vs; • 객체 생성 – 제네릭 클래스 객체를 생성할 때도 타입 매개 변수에 실제 타입을 기입 Vector<String> vs = new Vector<String>(); Slide : 27
  • 28. 제네릭의 장점 • 컴파일 시에 타입이 결정되어 보다 안전한 프로그래밍 가능 • 개발 시 다운캐스팅(타입 캐스팅) 절차 불필요 제너릭사용시 나는 숫자만 넣을거야! String 타입 저장시 오류 꺼내올 때 int 로 받아 그대로 사용 제너릭 비사용시 뭘 넣어도 다 들어가네! 꺼낼때 귀찮음. 필요한 타입으로 캐스팅해서 사용 Slide : 28