728x90
반응형
<오늘의 학습 - 데이터베이스를 관리하는 방법>
1. 컬렉션
2. 제네릭
3. Vector
4. ArrayList
5. HashMap
1. 컬렉션 (collection)
▶ 컬렉션(collection)의 개념
- 요소(element) 객체들의 저장소
- 객체들의 컨테이너라고도 불린다.
- 요소의 개수에 따라 크기를 자동으로 조절한다.
- 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동
- 고정 크기의 배열을 다루는 어려움을 해소한다.
- 다양한 객체들의 삽입, 삭제, 검색 등의 관리가 용이하다.
※ 주로 ArrayList를 많이 사용하며, HashMap은 다른 것과 조합하여 많이 사용된다.
▶ Collections 클래스
- java.util 패키지에 포함된다.
- 컬렉션에 대해 연산을 수행하고 결과로 컬렉션을 리턴한다.
- 모든 메소드는 static 타입이기 때문에 클래스 이름으로 바로 호출할 수 있다.
- 주요 메소드 - Collections.메소드
- sort() : 컬렉션에 포함된 요소들을 정렬
- reverse() : 요소의 순서를 거꾸로
- max() : 요소들의 최댓값을 찾음
- min() : 요소들의 최솟값을 찾음
- binarySearch() : 특정 값을 검색
- ex) Collectios.binarySearch(list명,검색할요소);
2. 제네릭 (generics)
- 제네릭이란, 특정 타입만 다루지 않고 모든 종류의 데이터 타입을 다룰 수 있도록 일반화된 타입 매개 변수를 이용해 클래스나 메소드를 작성하는 기법이다.
- <E>, <K>, <V> : 타입 매개 변수
- 요소 타입을 일반화한 타입
- 제네릭 클래스의 예시
- 제네릭 스택 : Stack <E>
- E에 특정 타입으로 구체화
- 정수만 다루는 스택 : Stack<Integer>
- 문자열만 다루는 스택 : Stack<String>
▶ 컬렉션과 제네릭
- 컬렉션은 제네릭 기법으로 구현된다.
- 컬렉션의 요소는 객체만 가능하다.
- 기본적으로 int, char, double 등의 기본 타입은 사용할 수 없다.
- JDK 1.5부터 자동 박싱/언박싱으로 기본 타입의 값을 객체로 자동 변환한다.
▶ 제네릭 클래스와 인터페이스
public class MyClass<T> { //제네릭 클래스 MyClass 선언. T:타입 매개 변수
T val; //val 타입은 T
void set(T a) {
val = a; //T 타입의 값 a를 val에 지정
}
T get() {
return val; //T 타입의 값 val 리턴
}
}
- 클래스나 인터페이스 선언부에 일반화된 타입 추가
MyClass<String> s;
List<Integer> li;
Vector<String> vs;
- 제네릭 클래스의 레퍼런스 변수 선언
▶ 제네릭 객체 생성 - 구체화(specialization)
- 제네릭 타입의 클래스에 구체적인 타입을 대입하여 객체 생성
- 컴파일러에 의해 이루어진다.
▶ 타입 매개 변수
- ‘<‘과 ‘>’사이에 하나의 대문자를 타입 매개변수로 사용
- 많이 사용하는 타입 매개 변수 문자
- E : Element를 의미하며 컬렉션에서 요소를 표시할 때 많이 사용한다.
- T : Type을 의미한다.
- V : Value를 의미한다.
- K : Key를 의미한다.
- 타입 매개변수가 나타내는 타입의 객체 생성 불가능
- ex) T a = new T(); (X)
- 타입 매개변수는 나중에 실제 타입으로 구체화
- 어떤 문자도 매개 변수로 사용 가능
※ 타입 매개 변수 T를 String으로 구체화
public class MyClass<String> {
String val; //val 타입은 String
void set(String a) {
val = a; //String 타입의 값 a를 val에 지정
}
String get() {
return val; //String 타입의 값 val 리턴
}
}
※ 타입 매개 변수에 기본 타입은 사용할 수 없다.
Vector<int> vi = new Vector<int>(); //컵파일 오류. int는 사용 불가
Vector<Integer> vi = new Vector<Integer>(); //정상 코드
- int 대신 Integer를 사용해야 한다.
▶ 제네릭 스택 만들기
- Stack : Last In First Out (LIFO;후입선출)
- Queue : First In First Out (FIFO;선입선출)
▷ 제네릭 클래스 코드
class GStack<T> {
int tos;
Object [] stck; //무엇이든 다 수용하기 위해 Object로 선언
//생성자
public GStack() {
tos = 0;
stck = new Object [10];
}
//값 입력
public void push(T item) {
if(tos == 10)
return; //stck의 크기보다 많은 값을 입력받을 수 없기 때문에 메소드 탈출
stck[tos] = item;
tos++;
}
//값 출력
public T pop() {
if(tos == 0)
return null; //stck에 아무것도 들어있지 않다면 null 반환
tos--; //값을 넣은 뒤에 tos++;를 했기 때문에 값을 출력하기 전에 tos--을 해주어야 한다.
return (T)stck[tos]; //값
}
}
▷ main 코드
GStack<String> stringStack = new GStack<String>(); //T는 String 타입
stringStack.push("seoul");
stringStack.push("busan");
stringStack.push("LA");
for(int n=0; n<4; n++)
System.out.println(stringStack.pop());
System.out.println();//줄바꿈
GStack<Integer> intStack = new GStack<Integer>(); //T는 Integer 타입
intStack.push(1);
intStack.push(3);
intStack.push(5);
for(int n=0; n<3; n++)
System.out.println(intStack.pop());
- T에는 String 타입, Integer 타입이 각각 들어간다.
▷ stringStack.push 값
tos 값 | Object[] stck 값 |
tos=0 (GStack 생성자 결과) | stck[0]="seoul" |
tos=1 | stck[1]="busan" |
tos=2 | stck[2]="LA" |
tos=3 (tos++의 결과) |
▷ stringStack.pop 값
tos 값 | Object[] stck 값 |
tos=2 (tos--의 결과) | stck[2]="LAl" |
tos=1 | stck[1]="busan" |
tos=0 | stck[0]="seoul" |
tos=0 | return null |
▷ 출력 결과
LA
busan
seoul
null
5
3
1
다음 학습
[JAVA] ★ Vector, ArrayList, HashMap ★ (16일차)
1. 컬렉션 2. 제네릭 3. Vector 4. ArrayList 5. HashMap 3. Vector ▶ Vector 의 특징 java.util.Vector 에서 E 대신 요소로 사용할 특정 타입으로 구체화한다. 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스이
deliciouscode.tistory.com
728x90
반응형
'HRD_훈련 > JAVA' 카테고리의 다른 글
[JAVA] Iterator (17일차) (0) | 2023.06.08 |
---|---|
[JAVA] ★ Vector, ArrayList, HashMap ★ (16일차) (0) | 2023.06.07 |
[JAVA] String, Math 메소드 (15일차) (0) | 2023.06.05 |
[JAVA] 패키지와 Object 클래스 (15일차) (0) | 2023.06.05 |
[JAVA] 추상 클래스와 인터페이스 실습 (15일차) (0) | 2023.06.05 |