Java - java.util 패키지

이유석·2022년 10월 24일
0
post-thumbnail

java.util 패키지

공식문서에 Deprecated 로 명시된 부분은 더이상 지원하지 않으니 사용하지 않는 것이 좋다라는 의미 입니다.

Calendar 클래스

  • 기존 Date 클래스는 지역화를 지원하지 않습니다.
    • 지역화란 국가별로 현재 날짜와 시간은 다를 수 있고 해당 부분을 지원하는 것 을 의미합니다.
  • 이러한 Date 클래스의 문제를 해결하기 위하여 나온 클래스가 Calendar 클래스 입니다.

Collection 프레임워크

  • Collection 이란 Java에서 여러 요소들을 담을 수 있는 자료구조 입니다.
  • List, Set, Collection, Map 등과 같은 자료구조가 이에 해당합니다.

Collection 프레임워크

  • 자료를 다룰 수 있는 여러 종류의 자료구조 클래스들의 가장 기본이 되는 것

    자료구조 : 자료를 저장할 수 있는 구조

Collection 인터페이스

  • 공식 문서 : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Collection.html
  • Collection 프레임워크에서 가장 기존이 되는 인터페이스
  • 중복을 허용하며, 자료가 저장되는 순서를 기억하지 못한다.
  • 대표적인 메서드 : add(), size(), iterator()
  • 순서를 기억하지 못하기 때문에 인덱스를 활용하여 자료를 찾아낼 수 없다.
    • 저장된 자료를 하나씩 꺼내어 확인할 수 있는 Iterator 를 활용한다.
    • Iterator 인터페이스는 hasNext() 와 next() 메서드를 지원한다.

      hasNext() : 다음에 가져올 값이 있으면 True, 없으면 False를 반환한다.
      next() : 매개변수 혹은 iterator가 되는 타입으로 다음으로 가져올 값을 반환한다.

Set 자료구조

  • 중복을 허용하지 않는 자료구조를 표현하는 인터페이스 입니다.
  • Collection 인터페이스를 상속받는다.
  • add(Object) 메서드 : set 내에 동일한 자료가 존재하면 False, 없으면 True를 반환한다.

List 자료구조

  • 중복을 허용하고 순서를 기억하는 자료구조를 표현한다.
  • Collection 인터페이스를 상속받는다.
  • get(int) 메서드 : 해당 순서에 해당하는 자료를 반환한다.

Map 자료구조

  • Key와 Value를 가지고 있는 자료구조를 표현한다.
  • Set 인터페이스를 상속받는다.
  • put(Object, Object) 메서드를 통해 key와 value를 함께 저장합니다.
  • get(Object) 메서드를 통해 매개변수인 key에 해당하는 value 객체를 반환한다.
  • keySet() 메서드를 통해 해당 자료구조에 저장되어 있는 모든 key들의 집합을 반환한다.
    • Map에 저장되어 있는 key들은 중복되면 안된다.

Generic

  • 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법 이다.

  • 객체의 타입을 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자(클라이어트)에 의해 지정되는 것을 의미한다.

  • 즉 필요에 의해 객체의 타입을 지정할 수 있도록 하는 일반 (Generic)화 하는 것 이다.

예제 : Box<E> 클래스

  • Generic을 이용한 Box 클래스
public class Box<E> {
	private E obj;
    
    public void setObj(E obj) { 
    	this.obj = obj;
    }
    
    public E getObj() {
    	return obj;
    }
}
  • 클래스 이름 뒤에 <E>가 Generic을 적용한 것이다.

  • Generic을 이용한 Box<E> 클래스를 사용하는 BoxExam 클래스

public class BoxExam {
	publi static void main(String[] args) {
    	Box<Object> box = new Box<>();
        box.setObj(new Object());
        Object obj = box.getObj();

		Box<String> box2 = new Box<>();
        box2.setObj("hello");
        String str = box2.getObj();
        System.out.println(str);

		Box<Integer> box3 = new Box<>();
        box3.setObj(1);
        int value = (int)box3.getObj();
        System.out.println(value);
    }
}
  • Generic을 사용함으로써 선언할때는 가상의 타입으로 선언하고, 사용시에는 구체적인 타입을 설정함으로써 다양한 타입의 클래스를 이용하는 클래스를 만들 수 있습니다.
  • Generic을 사용하는 대표적인 클래스는 컬렉션 프레임워크와 관련된 클래스입니다.

    예제 : ArrayList<E>, HashSet<E>

Set<E>

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetExam {
	public static void main(String[] args) {
    	Set<String> set1 = new HashSet<>();

		boolean flag1 = set1.add("kim");
        boolean flag2 = set1.add("lee");
        boolean flag3 = set1.add("kim"); // 중복된 값을 추가하여 보입니다.

		System.out.println(set1.size());   
        //저장된 크기를 출력합니다. 
        //3개를 저장하였지만, 이미 같은 값이 있었기 때문에 2개가 출력
        System.out.println(flag1);  //true
        System.out.println(flag2);  //true
        System.out.println(flag3);  //false

		Iterator<String> iter = set1.iterator();

		while (iter.hasNext()) {   // 꺼낼 것이 있다면 true 리턴.          
        	String str = iter.next(); // next()메소드는 하나를 꺼낸다. 하나를 꺼내면 자동으로 다음것을 참조한다.
            System.out.println(str);
        }
    }
}

List<E>

import java.util.ArrayList;
import java.util.List;

public class ListExam {

	public static void main(String[] args) {
    	List<String> list = new ArrayList<>();

		// list에 3개의 문자열을 저장합니다.
        list.add("kim");
        list.add("lee");
        list.add("kim"); // 중복된 값을 추가하여 보입니다.

		System.out.println(list.size()); 
        //list에 저장된 자료의 수를 출력 (중복을 허용하므로 3 출력) 
        for(int i = 0; i < list.size(); i++){
        	String str = list.get(i);
            System.out.println(str);
        }
    }   
}

Map<K,V>

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;   

public class MapExam {  
	public static void main(String[] args) {
    	// Key, Value가 모두 String 타입인 HashMap인스턴스를 만듭니다.
        Map<String, String> map = new HashMap<>();

		// key와 value값을 put으로 저장합니다.
        map.put("001", "kim");
        map.put("002", "lee");
        map.put("003", "choi");
        // 같은 key가 2개 있을 수 없습니다. 첫번째로 저장했던 001, kim은 001, kang으로 바뀐다.
        map.put("001", "kang");

		// map에 저장된 자료의 수를 추력합니다. 3이 출력됩니다.
        System.out.println(map.size());

		// 키가 001, 002, 003인 값을 꺼내 출력합니다.
        System.out.println(map.get("001"));
        System.out.println(map.get("002")); 
        System.out.println(map.get("003"));

		// map에 저장된 모든 key들을 Set자료구조로 꺼냅니다.
        Set<String> keys = map.keySet();
        // Set자료구조에 있는 모든 key를 꺼내기 위하여 Iterator를 구합니다.
        Iterator<String> iter = keys.iterator();
        while (iter.hasNext()) {
        	// key를 꺼냅니다.
            String key = iter.next();
            // key에 해당하는 value를 꺼냅니다.
            String value = map.get(key);
            // key와 value를 출력합니다.
            System.out.println(key + " : " + value);
        }
    }
}
profile
https://github.com/yuseogi0218

0개의 댓글