[Java] 자바의 컬렉션 프레임워크(Collection Framework)에 대한 이해 (1)

♦ 자바의 컬렉션 프레임워크(Collection Framework)

자바에 컬렉션 프레임워크는 다수의 데이터를 쉽고 효과적으로 처리할 수 있도록 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것을 말한다. 컬렉션 프레임워크는 자바의 인터페이스를 사용하여 구현된다.

컬렉션의 최상위 클래스는 Collection 인터페이스이다.
Set 계열의 특징은 데이터 중복 저장이 불가능하고 저장 순서가 없다.
List 계열의 특징은 데이터 중복 저장이 가능하고 저장 순서가 있다.

Set 계열과 List 계열은 모두 실제 데이터만 저장하는 자료구조 형태인 반면에 Map 계열은 name/value 쌍으로 저장하고 이후에 name 을 이용해서 value 를 얻는 방법으로 구현된 자료구조이다.

컬렉션의 특징
다양한 자료구조가 제공된다.
하나의 컬렉션에 서로 다른 데이터형도 저장 가능하다.
참조 데이터형만 저장 가능하다. 기본 데이터 형은 Wrapper 클래스를 이용하거나 오토박싱(autoboxing)으로 저장할 수 있다. 오토박싱이란 기본 데이터형을 컬렛션에 직접 저장해도 컴파일러가 자동으로 Wrapper 클래스로 변환 후에 저장되는 것을 말한다. 저장된 값을 얻어올 때도 기본 데이터형으로 얻어올 수 있는데 이것을 언박싱(unboxing)이라고 한다.
컬렉션의 크기는 size() 메소드를 사용해서 구한다.
Iterator 와 Enumeration 이라는 특별한 인터페이스와 향상된 for 문을 사용하여 데이터를 효율적으로 얻어올 수 있다.

HashSet 을 이용한 데이터 처리

import java.util.HashSet;

public class Test {
	public static void main(String[] args) {
		
		HashSet set = new HashSet();
		set.add("정대만");
		set.add(23); // 오토박싱
		set.add(23); // 동일 데이터 중복저장 => 출력안됨

		System.out.println("데이터 : " + set.toString());
	}
}

 

ArrayList 를 이용한 데이터 처리

import java.util.ArrayList;

public class Test {
	public static void main(String[] args) {

		ArrayList list = new ArrayList();
		list.add("정대만");
		list.add(23); // 오토박싱
		list.add(23); // 동일 데이터 중복저장

		for (int i = 0; i < list.size(); i++) {
			System.out.println("데이터 : " + list.get(i));
		}
	}
}

 

DTO 를 활용한 데이터 처리
일반적으로 대량의 데이터를 효율적으로 관리하기 위해 DTO 클래스와 컬렉션 API 를 함께 사용한다. DTO(Data Transfer Object) 는 데이터의 교환을 위한 객체를 의미한다.

DTO 클래스로 설계된 Person 클래스

public class Person {
	String name;
	int age;
	String address;

	public Person() {
	}

	public Person(String name, int age, String address) {
		this.name = name;
		this.age = age;
		this.address = address;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
}

 

ArrayList 를이용한 Person 데이터 처리

import java.util.ArrayList;

public class Test01 {

	public static void main(String[] args) {
		
	ArrayList list = new ArrayList();
        list.add( new Person( "정대만", 23 ,"북산"));
        list.add( new Person( "서태웅", 22 ,"북산"));
        list.add( new Person( "강백호", 22 ,"북산"));
        
    	for( int i = 0 ; i < list.size(); i++){
			Person p = (Person)list.get(i);	// person 으로 형변환
			String name = p.getName();
			int age = p.getAge();
			String address = p.getAddress();
			System.out.println(name+" "+age+" "+address);
		}
	}
}

 

제네릭(Generic)
ArrayList 와 같은 컬렉션을 사용할 때는 데이터를 가져올 때 반드시 저장된 데이터형으로 형 변환을 해야 한다. 또한 잘못된 데이터가 저정되면 형 변환을 해도 데이터형이 일치하지 않게 된다.
이러한 상황을 방지하기 위해 제네릭이 사용된다.

제네릭의 장점
데이터를 저장할 때 지정된 데이터형을 명시하기 때문에 가독성이 높다.
지정된 데이터형 이외에 데이터를 저장하면 컴파일 시점에서 에러가 발생된다.
데이터를 얻어올 때 형 변환 할 필요가 없다.

제네릭 사용 형식

컬렉션<데이터형> 변수 = new 컬렉션<데이터형>();

 

제네릭을 활용한 Person 데이터 처리
ArrayList 사용

import java.util.ArrayList;

public class Test01 {

	public static void main(String[] args) {

		ArrayList<Person> list = new ArrayList<Person>();
		list.add(new Person("정대만", 23, "북산"));
		list.add(new Person("서태웅", 22, "북산"));
		list.add(new Person("강백호", 22, "북산"));

		for (int i = 0; i < list.size(); i++) {
			Person p = list.get(i);
			String name = p.getName();
			int age = p.getAge();
			String address = p.getAddress();
			System.out.println(name + " " + age + " " + address);
		}
	}
}

 

Vector 사용

import java.util.Vector;

public class Test02 {
	public static void main(String[] args) {

		Vector<Person> v = new Vector<Person>();
		v.add(new Person("정대만", 23, "북산"));
		v.add(new Person("서태웅", 22, "북산"));
		v.add(new Person("강백호", 22, "북산"));

		// 향상된 for 문을 이용한 데이터 처리
		for (Person p : v) {
			String name = p.getName();
			int age = p.getAge();
			String address = p.getAddress();
			System.out.println(name + " " + age + " " + address);
		}
	}
}

 

 

자바의 컬렉션 프레임워크(Collection Framework)에 대한 이해 (2) 에서 이어집니다..

바로가기 >> [Java] 자바의 컬렉션 프레임워크(Collection Framework)에 대한 이해 (2)

답글 남기기