728x90
반응형
목차
1. 제네릭스 기본
2. 컬렉션 프레임워크(Collection Framework)
3. List 인터페이스
4. Set 인터페이스
1. 제네릭스 기본
- 매개변수화된 자료형(parameterized type)
- 메소드에 인수를 넘길 때 반드시 해당하는 매개변수의 자료형과 일치되는 자료형을 갖는 인수를 넘겨야 하지만
제네릭스를 이용하면 매개변수에 다양한 자료형의 데이터를 넘길 수 있다.
- 제네릭 클레스
클래스명<매개변수 타입 리스트> {...}
클래스명<타입> 객체명 = new 클래스명<타입>();
package genericsTest;
class Data<T> { // 클래스명 옆에 제네릭 기호 <> 를 적고 그 안에 매개변수 기
T obj; // 인스턴스 변수 obj의 자료형은 T
Data(T ob) {// 생성자 Data는 자료형이 T인 인수 한 개를 입력받음
obj = ob;
}
T getObj() { // 인스턴스 변수 obj의 자료형은 T
return obj;
}
void showType() {
System.out.println("Type of T: " +obj.getClass().getName());
}
}
public class Code229 {
public static void main(String[] args) {
Data<Integer> d1 = new Data<Integer>(100); // 정수 100인수
System.out.println(d1.getObj());
d1.showType();
Data<String> d2 = new Data<String>("JAVA"); // 문자열 "JAVA" 인수
System.out.println(d2.getObj());
d2.showType();
}
}
________________________________________________________________________________
100
Type of T: java.lang.Integer
JAVA
Type of T: java.lang.String
※ 제네릭으로 사용할 수 있는 자료형은 레퍼런스 형이여야 하며, int, double 등과 같은 자바의 기본 자료형은 제네릭 사용 x
- 제한된 제네릭 타입
<T extends V>
package genericsTest;
class Data1<T extends Number> { // Number 클래스의 하위 클래스 타입
T obj;
Data1(T ob) {
obj = ob;
}
int calcMultiple(int n) {
return obj.intValue() * n;
}
}
public class Code230 {
public static void main(String[] args) {
Data1<Integer> d = new Data1<Integer>(100); //Integer는 Number의 하위 클래스
int result = d.calcMultiple(5);
System.out.println(result);
Data1<Double> e = new Data1<Double>(17.5); //Double 역시 Number의 하위 클래스
int result2 = e.calcMultiple(5);
System.out.println(result2);
}
}
____________________________________________________________________________________
500
85
- 와일드카드 인수: 와일드카드는 "?"로 나타낸다. 어떤 클래스 타입도 올 수 있다는 의미.
package genericsTest;
class WithWild<T extends Number> {
T data;
WithWild(T d) { data = d; }
boolean same(WithWild<?> x) {
if(Math.abs(data.doubleValue()) == Math.abs(x.data.doubleValue()))
return true;
return false;
}
}
public class Code231 {
public static void main(String[] args) {
WithWild<Integer> a = new WithWild<Integer>(6);
WithWild<Double> b = new WithWild<Double>(-6.0);
WithWild<Long> c = new WithWild<Long>(5L);
if(a.same(b)) System.out.println("a and b are equal");
else System.out.println("a and b are different");
if(a.same(c)) System.out.println("a and c are equal");
else System.out.println("a and c are different");
}
}
____________________________________________________________________________________
a and b are equal
a and c are different
2. 컬렉션 프레임워크(Collection Framework)
- 자료 구조는 컴퓨터 메모리에 데이터를 저장하는 형태를 말하는데 대표적인 자료 구조는 '배열'이다.
배열 외에도 ArrayList, LinkedList, Stack 등과 같은 자료 구조가 자바 API에서 제공하고 있다.
이러한 자료 구조 패키지들을 컬렉션 프레임워크라고 한다.
3. List 인터페이스
- 객체가 저장되는 순서가 있고 중복된 데이터를 가질 수 있도록 허용
- ArrayList: 객체만 넣을 수 있다.
package genericsTest;
import java.util.ArrayList;
public class Code232 {
public static void main(String[] args) {
ArrayList<String> number = new ArrayList<String>();
number.add("one");
number.add("two");
number.add("three");
number.add("four");
for(int i=0; i<number.size(); i++) {
System.out.println(number.get(i));
}
}
}
______________________________________________________________________
one
two
three
four
package genericsTest;
import java.util.ArrayList;
import java.util.Iterator;
public class Code233 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(100);
list.add(200);
list.add(50);
list.add(1, 55);
list.add(3, 77);
Iterator<Integer> iter = list.iterator(); // iterato(반복자)를 얻는다.
while(iter.hasNext()) {
Integer t = iter.next();
System.out.println(t);
}
}
}
________________________________________________________________________
100
55
200
77
50
- LinkedList: ArrayList와 내부구성이 약간 다르다.
package genericsTest;
import java.util.Iterator;
import java.util.LinkedList;
public class Code234 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("red");
list.add("blue");
list.add("purple");
list.add("yellow");
list.add("green");
for(String s : list)
System.out.println(s);
System.out.println("-----------------");
Iterator<String> iter = list.iterator();
while(iter.hasNext()) {
String t = iter.next();
System.out.println(t);
}
}
}
________________________________________________________
red
blue
purple
yellow
green
-----------------
red
blue
purple
yellow
green
- Stack
- 한쪽 끝에서만 데이터의 추가/삭제가 일어나는 구조
- 이런 구조는 먼저 들어간 데이터가 나중에 필요할 떄 사용한다.
[Stack 생성자]
생성자 | 설명 |
Stack() | 빈 스택을 생성함. |
[Stack 메소드]
메소드 | 설명 |
boolean empty() | 스택이 비어있는지 판단함. |
E peek() | 스택 탑에 있는 원소를 반환함. |
E pop() | 스택 탑에 있는 원소를 삭제하고 반환함. |
E push(E item) | 스택 탑에 원소 item을 추가함. |
int search(Object o) | 스택에서 객체 o를 찾아서 있으면 위치를 반환함. |
- Queue
- 한 쪽에서 데이터가 추가되고 반대 쪽에서 데이터를 삭제하는 구조
- 일반적으로 줄 서는 구조를 생각하면 된다.
[Queue 메소드]
메소드 | 설명 |
boolean add(E e) | 원소 e를 큐에 추가함. 공간이 부족하면 lllegalStateException 발생함. |
E element() | 큐의 헤드에 있는 원소를 반환함. 큐에서 삭제하지 않음. |
boolean offer(E e) | 원소 e를 큐에 추가함. |
E peek() | 큐의 헤드에 있는 원소를 반환함. 큐에서 삭제하지 않음. 만약 큐가 비어 있으면 null을 반환. |
E poll() | 큐의 헤드에 있는 원소를 반환하고 삭제함. 만약에 큐가 비어 있으면 null을 반환함. |
E remove() | 큐의 헤드에 있는 원소를 반환하고 삭제함. |
[예제]
package genericsTest;
import java.util.LinkedList;
import java.util.Queue;
public class Code235 {
public static void main(String[] args) {
Queue<Integer> q = new LinkedList<Integer>();
q.add(10);
q.add(20);
q.add(30);
Integer data = q.poll();
System.out.println("You polled: " +data);
q.add(40);
while(!q.isEmpty())
System.out.println(q.poll());
}
}
_________________________________________________________________
You polled: 10
20
30
40
- Iterator와 ListIterator
- 이터레이터는 컬렉션 프레임워크에서 순환자 역활을 한다.
- 자동으로 원소를 하나씩 순환해 가는 인터페이스
- Iterator:한 방향으로만 순환이 가능
- ListIterator: 양방향으로 순환이 가능
[Iterator 메소드]
메소드 | 설명 |
boolean hasNext() | 이후에 원소가 더 있는지 판단함. 원소가 더 있다면 true를 반환함. |
E next() | 다음 원소를 반환함. |
[ListIterator 메소드]
메소드 | 설명 |
boolean hasNext() | 이후에 원소가 더 있는지 판단함. 원소가 더 있다면 true를 반환함. |
boolean hsaPervious() | 이전에 원소가 있는지 판단함. 원소가 있다면 true를 반환함. |
E next() | 다음 원소를 반환함. |
E previous() | 이전 원소를 반환함. |
4. Set 인터페이스
- 집합을 의미한다. 그래서 집합의 특징 그대로 원소의 순서가 없고 중복된 원소를 넣지 않는다.
- 대표적인 클래스로는 TreeSet과 HashSet 두 개가 있다.
728x90
반응형
'Framwork > Java기초' 카테고리의 다른 글
Chapter 16. 람다 표현식, 열거형, 어노테이션 (50) | 2023.11.14 |
---|---|
Chapter 15. 스레드 (49) | 2023.11.13 |
Chapter 13. 자바 입출력 (57) | 2023.10.19 |
Chapter 12. 예외 처리 (20) | 2023.08.15 |
Chapter 11. 패키지와 클래스들 (16) | 2023.08.15 |