728x90
반응형

<오늘의 학습 - 데이터베이스를 관리하는 방법>

1. 컬렉션

2. 제네릭

3. Vector

4. ArrayList

5. HashMap

 

 

1. 컬렉션 (collection)

▶ 컬렉션(collection)의 개념

  • 요소(element) 객체들의 저장소
    • 객체들의 컨테이너라고도 불린다.
    • 요소의 개수에 따라 크기를 자동으로 조절한다.
    • 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동
  • 고정 크기의 배열을 다루는 어려움을 해소한다.
  • 다양한 객체들의 삽입, 삭제, 검색 등의 관리가 용이하다.

 

※ 주로 ArrayList를 많이 사용하며, HashMap은 다른 것과 조합하여 많이 사용된다.

 

 

▶ Collections 클래스

  • java.util 패키지에 포함된다.
  • 컬렉션에 대해 연산을 수행하고 결과로 컬렉션을 리턴한다.
  • 모든 메소드는 static 타입이기 때문에 클래스 이름으로 바로 호출할 수 있다.
  • 주요 메소드 - Collections.메소드
    1. sort() : 컬렉션에 포함된 요소들을 정렬
    2.  reverse() : 요소의 순서를 거꾸로
    3. max() : 요소들의 최댓값을 찾음
    4. min() : 요소들의 최솟값을 찾음
    5. 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
반응형

+ Recent posts