Ezcho

[java] java.util패키지 본문

Java

[java] java.util패키지

Ezcho 2022. 11. 2. 15:16

java.util패키지는 java.lang패키지 다음으로 많이 사용하는 패키지이다.

 

Date, Calendar

Date클래스- 지역화를 지원하지 않는다. 즉, 국가별로 현재 날짜와 시간이 다른점을 지원하지 않음

Calendar클래스 - 지역화를 지원함.

 

그리고 util패키지 내부에는 여러가지 자료구조 클래스가 존재한다.

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

 

컬랙션 프레임워크

자바2에 처음으로 등장했다.

컬렉션 프레임워크에서 가장 기본이 되는 interface는 Collection인터페이스이다.

 

Collection 인터페이스는 중복도 허용, 자료가 저장된 순서도 기억하지 못한다.

존재하는 메서드는

1. add(); 추가

2. size(); 크기를 반환

3. iterator();  자료를 하나씩 꺼냄

 

Iterator에는 또 두가지 메서드가 존재한다.

hasNext();  꺼낼게 있으면 true 없으면 false를 반환한다.

next(); 자료를 하나씩 꺼낸다.

출처 - 프로그래머스 스쿨 자바 중급 강의

 

 

Generic

직역하면 일반적인... 이라는 뜻이다. 데이터 형식에 의존하지않고, 여러 데이터 타입을 선언할 수 있게 해주는 역할을 한다.

 

Box클래스를 아래와 같이 선언했다.

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

        public Object getObj(){
        return obj;
        }
    }

우리가 main함수에서 Box클래스를 사용해보자.

public class BoxExam {
        public static void main(String[] args) {
            Box box = new Box();
            box.setObj(new Object());
            Object obj = box.getObj();
            box.setObj("abc");
            String str = (String)box.getObj();		//형 변환을 필요로 한다.
            System.out.println(str);			//abc
            
            box.setObj(1);
            int value = (int)box.getObj();		//형 변환을 필요로 한다.
            System.out.println(value);			//1
        }
    }

Object 객체는 그 하위에 존재하는 Integer, String, Double등 여러가지 형을 사용할 수 있게 해주고 그 객체를 저장할 수 있다.

하지만 우리가 사용하기 위해서 변수로 선언할 때, 형변환을 해주어야 한다는 단점이 존재한다. 

 

그래서 우리는 Box클래스를 아래와 같이 수정해 줄 수 있다.

 

public class Box<E> {
        private E obj;
        public void setObj(E obj){
            this.obj = obj;
        }

        public E getObj(){
            return obj;
        }
    }

E를 이용해 미리 지정하지 않는것이다. 그러면 main함수 에서는

public class BoxExam {
        public static void main(String[] args) {
			box<Object> box = new Box<>();
			box.setObj(new Object());	//참조타입 Object
			Object obj = box.getObj();
            
			Box<String>box2 = new Box<>();	//스트링으로 받고싶을 때 요런식으로 선언
			box2.setObj(3);	//컴파일 에러
			box2.setObj("halo");//형변환 할 필요가 없어진다.
            
			Box<Integer> box3 = new Box<>();	//참조타입 Integer
			box3.setObj(4);
			int v2 = box3.getObj();
            
        }
    }

이런 사용방식을 Generic이라고 부르고 Generic방식은 모든 컬랙션 프레임워크에서 사용하고 있다.

 

 

대표적인 컬랙션 프레임워크

1. Set

Set은 집합의 형태라고 생각하면 좋을 것 같다.

중복과 순서가 없는 자료구조이다. 선형

    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<>();	//generic을 이용

            boolean flag1 = set1.add("abc");
            boolean flag2 = set1.add("def");
            boolean flag3 = set1.add("abc");

            System.out.println(set1.size());   //2라고 출력된다(중복 X)
            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(); //하나씩 꺼내고 자동으로 다음을 참조한다.
                System.out.println(str);	//abc, def 만 출력한다.!
            }
        }
    }

2. List

리스트는 순서가있고, 중복이 허용된다. 즉 저장된 위치에 대한 선후개념이 존재하는 선형 자료구조이다.

아래와 같이 사용할 수 있다.

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

    public class ListExam {

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

           
            list.add("abc");
            list.add("def");
            list.add("abc");

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

 

3. Map

Map은 key와 Value가 존재한다.

key값은 중복이 될 수 없으며, Value는 중복이 될 수 있다. 

key값은 index와는 의미가 다르다는 점을 조심하자.

 

put(key, value); 메서드를 사용하여 값을 할당한다.

get(key); 메서드를 사용하여 값을 가져올 수 있다.

 

마찬가지로 Iterator를 사용하여 값들을 참조하고 받아올 수 있다.

    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);
            }
        }
    }

'Java' 카테고리의 다른 글

[java] 어노테이션  (0) 2022.11.09
[java] Date, Calendar클래스, Time 패키지  (0) 2022.11.09
[java] Math Class  (0) 2022.10.12
[java] String과 StringBuffer  (0) 2022.10.12
[java] java.lang 패키지  (2) 2022.10.05
Comments