Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

컬렉션 프레임 워크 본문

프로그래밍 언어/Java

컬렉션 프레임 워크

세레프 2023. 5. 25. 23:06

 상황에 따라서 자료가 어떻게 저장되어야 효율적으로 데이터를 사용할 수 있는지 달라진다. 그래서 상황에 따라 자료를 어떻게 저장하는지 정의할 필요가 있다.  이때, 자료들을 저장할 때, 효율적인 구조형태자료구조라고 하며, 상황에 따라서 자료를 효율적으로 사용하기 위해서 자료구조를 사용한다.

 

자료구조

데이터는 의미나 목적없이 단순히 수집된 정보로, 해당 데이터를 의미와 목적으로 구분해서 저장할 필요가 있다. 이럴 때 사용되는 개념이 자료구조 개념이다. 자료구조란 데이터를 물리적 또

my-it-diary.tistory.com

 그리고 자바에서는 이러한 자료구조에 저장되어 있는 데이터를 효율적으로 다루기 위한 클래스의 집합이 있는데, 이를 컬렉션 프레임 워크라고 한다.

 

컬렉션 프레임 워크

 프레임 워크 문제를 해결하기 위해서 사용 방법을 정해놓은 기본 틀, 골조로, 객체를 저장해서 데이터를 효율적으로 다루기 위한 자료구조의 프레임 워크컬렉션 프레임 워크라고 한다.

 

 컬렉션 프레임 워크정의된 자료구조를 통해서 객체를 효율적으로 추가, 삭제, 검색할 수 있도록 하는 인터페이스와 실제 객체를 저장하는 컬렉션 클레스로, 해당 인터페이스를 통해 데이터를 효율적으로 다루기 위한 자료구조를 클래스로 구현해 놓는다.

 

 컬렉션 프레임워크기능을 구현할 수 있도록 Collection인터페이스를 제공하며, 해당 Collection인터페이스을 최소한으로 구현한 AbstractCollection클래스를 제공한다. 그래서 모든 자료구조는 AbstractCollection클래스를 부모클래스로 지정되며, 자료구조를 구현하는 인터페이스는 주로 Collection인터페이스를 상속받는다.

 

AbstractCollection (Java Platform SE 8 )

Ensures that this collection contains the specified element (optional operation). Returns true if this collection changed as a result of the call. (Returns false if this collection does not permit duplicates and already contains the specified element.) Col

docs.oracle.com

 

Collection (Java Platform SE 8 )

Compares the specified object with this collection for equality. While the Collection interface adds no stipulations to the general contract for the Object.equals, programmers who implement the Collection interface "directly" (in other words, create a clas

docs.oracle.com

 

 컬렉션 프레임 워크에서는 Collection 인터페이스 외에도, 자료구조를 만들 수 있는 틀인 Set, List, Queue, Map 인터페이스가 있으며, Set, List, Queue는 Collection 인터페이스를 상속 받지만, Map은 Collection 인터페이스를 상속받지 않는다.

  • Set
 

Set (Java Platform SE 8 )

A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element. As implied by its name, this interface models the mathematical set abstraction. The Set inter

docs.oracle.com

  • List
 

List (Java Platform SE 8 )

An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elements by their integer index (position in the list), and search for elements in the lis

docs.oracle.com

  • Queue
 

Queue (Java Platform SE 8 )

A collection designed for holding elements prior to processing. Besides basic Collection operations, queues provide additional insertion, extraction, and inspection operations. Each of these methods exists in two forms: one throws an exception if the opera

docs.oracle.com

 

  • Map
 

Map (Java Platform SE 8 )

If the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null. If the function returns null no mapping is recorded. If the function

docs.oracle.com

 컬렉션 프레임 워크의 인터페이스에서는 컬렉션 클래스의 추가, 삭제, 검색의 기능을 구현할 수 있도록 저장되어 있으며, 해당 인터페이스의 메서드를 오버라이딩해서 자료구조의 기능을 구현한다.

  • add(데이터 타입 객체)  : 지정요소 추가
  • Contains(Object 객체) : 객체 obj 존재 여부
  • isEmpty() : 컬렉션이 비여있는지의 여부
  • iterator() : 컬렉션에 저장되어 있는 데이터 선회하는 iterator 생성 
    • Iterator = 컬렉션 요소에 접근해서 반복적으로 요소에 접근할 수 있도록 도움을 주는 객체
  • remove(Object 객체) : 객체 제거
  • size() : 요소 갯수

 

제너릭 기법

 컬렉션 클래스에는 저장되는 데이터는 상황에 따라 사용하는 타입이 가지각색이다. 그래서 컬렉션 클래스는 제너릭 기법을 사용해서 사용하기 전에 타입을 선언한다.

 제너릭 기법이란 기존의 클래스나 메서드가 모든 종류의 타입이 다룰 수 있도록 타입을 정하지 않고 일반화해서 선언하는 기법으로, 메서드에 제네릭 기법 사용하는 제네릭 메서드와 클래스에 제네릭 기법 사용하는 제네릭 클래스가 있다. 

 이때, 제너릭 기법을 통해 클래스나 메서드를 구현할 때에는 클래스명 뒤나 메서드명 앞에 <E>,<K>,<V>와 같이 알파벳을 추가해서 타입을 정하고, 클래스나 메서드를 사용할 때에는 클래스명 뒤나 메서드명 앞에 알파벳 대신 클래스 타입을 추가한다.

알파벳 정의
E 변수나 자료구조의 노드들의 데이터 타입을 지정 (데이터 타입 파라미터)
T,S,U 변수의 자료형 타입, 클래스 타입을 지정 (변수 타입 파라미터)
키 타입 지정, hashMap에서 사용
V 값 타입 지정, hashMap에서 사용
  • 제네릭 메서드
    • 구현 : 접근 통제자 <알파벳> 리턴타입 메서드명(알파벳 변수) { ... }
    • 사용 : <클래스 타입>메서드명(클래스 타입에 맞는 값);  → 이때, <클래스 타입>은 생략이 가능
package pack0526;

class Value{
	<T> void typeSearch(T x) {
		if (x instanceof Integer) {
			System.out.println(x + "는 정수");
		}
		else if (x instanceof Float||x instanceof Double) {
			System.out.println(x + "는 실수");
		}
		else if (x instanceof Character) {
			System.out.println(x + "는 문자");
		}
		else if (x instanceof String) {
			System.out.println(x + "는 문자열");
		}
		else if (x instanceof Boolean) {
			System.out.println(x + "는 논리형");
		}
	
	}
}
package pack0526;

public class Code1 {

	public static void main(String[] args) {
		Value v = new Value();
		v.<Integer>typeSearch(3);
		v.typeSearch(3.14);
		v.typeSearch(3.14f);
		v.typeSearch('a');
		v.typeSearch("A");
		v.typeSearch(true);
	}

}
 
 

  • 제네릭 클래스
    • 구현 : class 클래스명 <알파벳> { ... }
    • 사용 : 구현한 클래스명 <클래스 타입> 변수 = new 구현한 클래스명<클래스 타입>( )  →  클래스 타입이 없을경우 Object클래스로 생성
package pack0526;

class A<T>{
	T x;
	T y;
}
 

public class Code2 {

	public static void main(String[] args) {
		A<Integer> a2 = new A<Integer>(); //Integer
		a2.x = 1;
		a2.y = 2 ; 
		A<String> a3 = new A<String>(); //String
		a3.x = "hello";
		a3.y = "World";
		
		System.out.println("a2 :"+(a2.x + a2.y));
		System.out.println("a3 :"+(a3.x + a3.y));
	}

}

 

'프로그래밍 언어 > Java' 카테고리의 다른 글

List 컬렉션  (0) 2023.05.27
Set 컬렉션  (0) 2023.05.26
Format 클래스  (0) 2023.05.24
기타 API 클래스  (0) 2023.05.23
Scanner 클래스  (0) 2023.05.22
Comments