본문 바로가기
TIL(Today I Learned)

[JAVA] java.util 패키지 정리

by kkkdh 2023. 2. 1.
728x90

이름과 걸맞게 여러 가지 편의 기능을 제공해주는 패키지이다.

 

ArrayList, HashMap, Calendar, Random 등 다양한 패키지를 포함하고 있다. 

 

컬랙션 프레임워크 (Collection Framework)

자료구조 클래스들을 컬랙션 프레임워크라고 부른다.

  • 다수의 객체를 다루기 위한 표준화된 프로그래밍 방식을 의미한다.
  • 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 인터페이스와 클래스를 제공
  • java.util 패키지에 포함되어 있으며, JDK1.2부터 제공됨

가장 상위에 Collection interface가 있고, 다음과 같이 상속관계를 표현할 수 있다고 한다.

컬렉션(Collection): 여러 객체(데이터)를 담을 수 있는 자료구조, 다수의 데이터 그룹

프레임워크(Framework): 표준화, 정형화된 체계적인 프로그래밍 방식

 

  • 컬렉션 프레임워크에서 가장 기본이 되는 interface는 Collection interface이다.
    • Collection 인터페이스는 여기에 자료가 있다는 것을 표현한다.
    • 중복 허용, 자료가 저장된 순서 기억 X
    • add(), size(), iterator() method를 대표적으로 갖고 있다.
    • 순서 기억을 못하기 때문에, 대신 저장된 자료를 하나씩 꺼낼 수 있는 iterator 인터페이스를 반환한다.
      • iterator 인터페이스는 hasNext() 메서드와 next() 메서드를 갖고 있어 다음 자료에 접근이 가능
  • Set 자료 구조는 중복을 허용하지 않는 자료 구조 (집합이라고 보면 된다.)
    • Collection 인터페이스를 상속 받는 인터페이스
    • Set 인터페이스의 add method를 오버라이딩해서 같은 자료를 add하는 경우 false, 아닌 경우 true를 반환한다.
  • List 자료 구조는 중복을 허용하며, 순서를 기억하는 자료 구조
    • Set 인터페이스와 마찬가지로 Collection 인터페이스를 상속
    • List는 순서를 기억하기 때문에, 원하는 index의 자료를 꺼낼 수 있는 get(int type index) method를 갖고 있다.
  • Map 자료 구조는 key, value를 갖는 자료구조이다.
    • 저장할 때, put() method를 이용해 key와 value를 쌍으로 저장한다.
    • 원하는 값을 꺼낼 때 key와 get() 메서드 사용
    • Map에 저장된 모든 key들을 중복되면 안된다.
    • Key의 이런 특징 때문에, Map은 자신이 가진 모든 Key의 정보를 반환하는 Set을 반환하는 KeySet() method를 갖고 있다고 한다.

위의 자료 구조 외에도 다양한 자료구조에 해당하는 인터페이스와 클래스가 존재한다.


Generic

Generic은 Java5에서 추가된 문법으로 인스턴스를 만들때 사용하는 타입을 지정하기 위해 사용할 수 있다.

public class Box {
    private Object obj;
    public void setObj(Object obj){
    this.obj = obj;
    }

    public Object getObj(){
    return obj;
    }
}

위와 같은 Box 클래스가 있다고 하자

예시 코드와 같이 Object 클래스를 상속 받아 만들어진 String class나 int type이 setter를 통해 box 인스턴스의 속성의 값으로 매핑될 수 있으나 다시 getObj method를 사용해 반환 받을때마다 형변환을 해야 하는 단점이 생긴다.

 

이때, Generic을 다음과 같이 적용할 수 있다.

가상의 클래스 E를 지정

이렇게 Object를 가상의 클래스 E로 대체하면서, 제너릭을 사용하게 되면 다음과 같이 유연한 사용이 가능해진다.

Generic 문법 사용시 인스턴스 생성에 대한 문법은 위와 같음

형변환을 사용하지 않고, 인스턴스를 생성할 때, 타입을 지정할 수 있는 깔끔한 코드로 바꿀 수 있게 되었다.

 

컬렉션 프레임워크와 관련된 클래스들이 대표적인 제너릭 문법 사용의 예시이다.


Set

Set 인터페이스를 구현한 클래스(구현체)를 알아보자.

 

HashSet은 Set interface의 구현체 중 하나이다.

이렇게 사용해 볼 수 있었다.

Generic 문법이 적용되어 인스턴스 생성마다 자료구조에 넣을 자료형을 지정하여 사용한다.

 

add method 실행마다 이미 있는 원소인지 여부를 판단해서 true/false를 반환한다.

실행 결과

또한 순서를 기억하지 못하기 때문에, iterator() 메서드를 이용해 반복자를 하나하나 방문해서 원소를 확인할 수 있었다.


List

마찬가지로 Collection interface를 상속받으며, 순서를 기억하고 있는 인터페이스이다.

리스트는 배열의 경우 한번 생성하면, 크기가 변경 불가능하다는 점을 개선할 수 있는 자료 구조이다. (저장 공간에 필요에 따라 자율적으로 조절된다.)

 

List 인터페이스를 상속 받아 만들어진 구현체 클래스 중 하나인 ArrayList 클래스를 확인해 보자.

마찬가지로 Generic을 이용해 String 타입을 관리하는 자료구조로 선언

리스트는 중복된 데이터를 보관 가능하다.

실행 결과


Map

Map은 key, value 쌍으로 저장하는 자료구조이며, key를 이용해서 연결된 value를 찾을 수 있도록 설계되어 있다.

 

Map 인터페이스를 구체화한 구현체중 가장 많이 사용하는 것 중 하나가 HashMap 클래스이다. 이걸 사용해 보자.

Map 또한 Generic이 적용되어 key와 value의 타입을 인스턴스 생성 시점에서 지정해 줘야 한다.

get method를 이용해 key값과 일치하는 value를 반환받을 수 있고, size method를 이용해 자료구조에 저장된 데이터의 수를 조회할 수 있다.

keySet method를 활용해 자료구조에 포함된 전체 데이터의 key의 set을 확인할 수 있다. 이걸 활용해서 Iterator를 뽑아내어 자료구조에 포함된 전체 데이터를 조회할 수도 있었다.

728x90

댓글