럿고의 개발 노트

[프로그래머스] 자바 중급 > Part3. java.util 패키지 본문

Java Note/[프로그래머스] 자바 중급(동영상 강의)

[프로그래머스] 자바 중급 > Part3. java.util 패키지

KimSeYun 2020. 1. 31. 16:16

[프로그래머스] 자바 중급

Part3. java.util 패키지

1. java.util 패키지

  • 유용한 클래스들을 많이 가지고 있는 패키지
  • Date, Calendar 클래스 : 날짜
  • 자료구조와 관련된 컬렉션 프레임워크와 관련된 인터페이스, 클래스
  • deprecated란 더이상 지원하지 않으니 사용하지 않는 것이 좋다는 의미
  • Date클래스는 지역화를 지원하지 않는다.
    (지역화란 국가별로 현재 날짜와 시간은 다를 수 있는데 그 부분을 지원하지 못한다.)
  • 위와 같은 Date 클래스의 문제를 해결하기 위해 나온 클래스가 Calendar 클래스로 자바 1.1에 등장
  • 지역화와 관련된 클래스들은 Locale로 시작되는 이름을 가진 클래스들이며 1.1 이후 등장
  • List, Set, Collection, Map은 자료구조 즉, 컬렉션 프레임워크와 관련된 인터페이스

2. 컬렉션 프레임워크

  • java.util패키지에는 다룰 수 있는 자료구조 클래스가 다수 존재합니다. 자료구조 클래스들을 컬렉션 프레임워크라고 합니다.
  • 자료구조란 자료를 저장할 수 있는 구조
  • 책을 보관하기 위해서 책장을 이용하는 것 처럼 다양한 자료들을 다양한 방식으로 관리하기 위한 방법
  • 컬렉션 프레임워크에서 가장 기본이 되는 인터페이스는 Collection
    • Collection 인터페이스는 여기에 자료가 있다라는 것을 표현
    • 중복 허용, 자료 저장 순서도 기억하지 못함
    • 대표적인 메소드는 add(), size(), iterator()
    • 저장된 순서를 기억하지 못하기 때문에 자료를 하나씩 꺼낼 수 있는 iterator라는 인터페이스를 반환
      • iterator는 자료가 있는 확인하는 hasNext() 메소드와 하나씩 자료를 꺼낼때 사용하는 next() 메소드를 가지고 있음
    • Set 자료구조는 중복을 허용하지 않음
      • Collection 인터페이스를 상속받음
      • Set인터페이스가 가지고 있는 add() 메소드는 같은 자료가 있으면 false, 없으면 true를 반환하는 add() 메소드를 가지고 있음
    • List 자료구조는 중복을 허용하면서 순서를 기억하는 자료구조
      • Collection 인터페이스를 상속받고 있음
      • 순서를 기억하기 때문에 get()메소드를 이용하여 원하는 자료를 반환할 수 있음
    • Map 자료구조는 Key-Value 구조의 자료구조이다.
      • 저장할 때 put() 메소드를 이용하여 Key-Value를 함께 저장
      • 원하는 값을 꺼낼 때는 key를 매개변수로 받아들이는 get() 메소드 이용
      • Key는 중복을 허용하지 않음
      • KeySet() 메소드로 모든 Key들에 대한 정보를 읽어들일 수 있는 Set을 반환하는 메소드를 가지고 있음

3. Generic

  • 인스턴스를 만들때 사용하는 타입을 지정하는 문법이 Java5에 추가
  • 클래스 이름 뒤에 가 Generic을 적용한 것이다.
  • Generic을 사용함으로써 선언할때는 가상의 타입으로 선언하고, 사용시에는 구체적인 타입을 설정함으로써 다양한 타입의 클래스를 이용하는 클래스 제작 가능
  • Generic을 사용하는 대표적인 클래스는 컬렉션 프레임워크와 관련된 클래스
public class Box {
    private Object obj;

    public void setObject(Object obj) {
        this.obj = obj;
    }

    public Object getObject() {
        return obj;
    }
}
// Generic 방식
public class Box2<E> {
    private E obj;

    public void setObject(E obj) {
        this.obj = obj;
    }

    public E getObject() {
        return obj;
    }
}
public class BoxExam {
    public static void main(String[] args) {
        Box box = new Box();
        box.setObject(new Object()); // 사용
        Object obj = box.getObject(); // 반환

        box.setObject("Hello"); // 문자열을 넣음
        String str = (String)box.getObject(); // Object를 반환하는데, 자식 메소드에는 접근을 할수 없기때문에 형변환이 필요

        System.out.println(str);

        box.setObject(1);
        int value = (int)box.getObject();

        System.out.println(value);

        /* Generic
         * Object는 모든객체가 들어가기 때문에, 필요한 객체를 사용하기 위해서는 형변환이 필요
         * 이런 점을 편리하게 사용하기 위해 JAVA5에서 Generic문법이 추가
         * Generic을 사용함으로써 선언할때는 가상의 타입으로 선언하고, 사용시에는 구체적인 타입을 설정함으로써
         * 다양한 타입의 클래스를 이용하면 클래스 생성 가능
         * Generic을 사용하는 대포적인 클래스는 컬렉션 프레임워크와 관련된 클래스
         */

        Box2<Object> box2 = new Box2<>();
        box.setObject(new Object());
        Object obj2 = box2.getObject();

        Box2<String> box3 = new Box2<>();
        box3.setObject("Hello");
        String str2 = box3.getObject();

        System.out.println(str2);

        Box2<Integer> box4 = new Box2<>();
        box4.setObject(7);
        int value2 = box4.getObject(); // auto unboxing

        System.out.println(value2);
    }
}

4. Set

  • 중복도 없고, 순서도 없는 자료구조로 HashSet, TreeSet이 있음
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetExam {
    public static void main(String[] args) {
        /* Set
         * 중복이 없고, 순서도 없는 자료구조
         * HashSet, TreeSet이 존재
         * Set은 인터페이스이기 때문에 HashSet, TreeSet으로 만들어야 함.
         */

        Set<String> set1 = new HashSet<String>();
        boolean flag1 = set1.add("kim"); // set에 값 추가, return boolean / 값이 존재한다면 false를 return
        boolean flag2 = set1.add("kang");
        boolean flag3 = set1.add("kim");

        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(flag3); // 중복값이기때문에 false를 return하면서 set에 값을 저장하지 않음

        System.out.println(set1.size()); // 자료구조의 크기를 출력

        // 들어있는 값들을 하나씩 꺼내기 위해서는 Set의 부모클래스인 Collection이 가지고 있는 Iterator를 사용해야 함
        Iterator<String> iter = set1.iterator();
        while(iter.hasNext()) { // 순서대로 값이 있는지 없는지 확인하는 메소드
            String str = iter.next(); // 값을 하나씩 값을 꺼내는 메소드
            System.out.println(str);
        }
    }
}

5. List

  • 중복도 있으며 순서도 있음

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

public class ListExam {

public static void main(String[] args) {
    /* List
     * 자료구조
     * 배열은 한번 생성하면 크기 변경 불가였지만, 배열과 달리
     * 리스트는 저장공간이 필요에 따라 자유
     * 중복허용, 순서도 있음
     * java.util 패키지에 있는 List(java.awit 패키지에 있는 것은 아예 다른것!)
     * 인터페이스이기 때문에 생성을 할수 없어, ArrayList를 이용해서 생성
     */
    List<String> list = new ArrayList<String>();
    list.add("kim"); // 값 넣기
    list.add("kang");
    list.add("kim"); // 중복 허용

    System.out.println(list.size()); // 저장공간의 크기 확인(부모 인터페이스인 Collection이 가지고 있는 메소드)

    for (int i = 0; i < list.size(); i++) {
        String str = list.get(i); // 값 꺼내기
        System.out.println(str);
    }
}

}


### 6. Map
- Key-Value를 쌍으로 저장하는 자료구조로 Key는 중복 불가능, Value는 중복 가능

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) {
/* Map
* Key - Value로 이루어져 있음
* Key는 중복될수 없지만, Value는 중복 가능
* map은 인터페이스이기 때문에 HashMap를 이용해서 생성해야 함
*/
Map<String, String> map = new HashMap<String, String>();
map.put("001", "kim"); // 데이터 넣기
map.put("002", "lee");
map.put("003", "choi");

    map.put("001", "kang"); // key값이 중복이기 때문에 원래 있던 value값을 현재 설정한 value값으로 변경

    System.out.println(map.size()); // 저장 크기 확인
    System.out.println(map.get("001"));
    System.out.println(map.get("002"));

    Set<String> keys = map.keySet(); // key값만 꺼내기
    Iterator<String> iter = keys.iterator(); // set데이터 꺼내기
    while(iter.hasNext()) {
        String key = iter.next();
        String value = map.get(key);
        System.out.println(key + " : " + value);
    }
}

}

````

출처

[프로그래머스] 자바 중급

Comments