java.util 패키지 - accidentlywoo/java GitHub Wiki

java.util 패키지

  1. java.util 패키지를 구성하는 클래스들의 기능과 용도를 알고, 날짜 관련 클래스를 이용하여 다양한 날짜 관련 기능을 구현하며, Formatter클래스를 이용하여 여러 가지 포맷의 데이터를 출력할 수 있습니다.
  2. 컬렉션의 개념을 이해하고, Generics를 통해 컬렉션 관련 작업을 보다 안전하고 쉽게 처리할 수 있습니다.

java.util개요 및 Utility 클래스

java.util개요

java.util은 자바 프로그램을 개발할 때 유용한 기능들을 모아놓은 패키지임

  1. Object

  2. Data

  3. Calendar -날짜와 시간 표현 및 조작

  4. Vector

  5. HashMap -배열

  6. Formatter -다양한 형태의 출력 포맷

  7. Enumeration

  • 인터페이스

java.util사용

java.util 패키지를 이용하면 반복적으로 작성해야 하는 복잡한 코드를 간단하게 구현할 수 있음

34, 98, 79 ...

최고, 최저 점수를 출력하는 기능을 구현한다면.. 점수목록을 오름차순으로 정렬하는 기능을 구현한다면

  1. 정렬 알고리즘을 이용
  2. 배열에 저장된 점수 정렬
  3. 결과 값 출력 -> java.util.Arrays 클래스를 이용하여 간단하게 데이터 정렬이 가능함

Date 클래스

Date클래스는 형식이 있는 날짜와 시간을 출력하는 클래스임 JDK의 버전이 향상되면서 Deprecate 메서드들도 많아짐 -> Deprecate메서드는 호환성이 떨어지고, 이후 버전에서는 지원되지 않을 수 있으니 사용하지 않는 것이 좋음

  • Date클래스의 생성자 Date() : 현재의 날짜와 시간을 저장한 객체를 생성함 Date(long msec) : 1970년 1월 1일 0시 0분 0초부터 msec를 1/1000초 단위로 하여 경과한 날짜와 시간을 저장한 객체를 생성함

  • Date 클래스의 생성자 boolean after(Date when) : when의 날짜가 현재 날짜 이후면 true, 아니면 false를 반환함 boolean before(Date when) : when의 날짜가 현재 날짜 이전이면 true, 아니면 false를 반환함 int compareTo(Date anotherDate) : 다른 날짜 객체와 비교하여 음수, 양수, 0의 결과를 반환함 int compareTo(Object o) : 다른 객체와 비교하여 음수, 양수, 0의 결과를 반환함 boolean equals(Object obj) : 날짜의 값을 비교하여 그 결과를 반환함 long getTime() : 1970년 1월 1일 0시 0분 0초로부터의 시간을 1/1000초 단위로 반환함 id setTime(long time) : time의 시간을 1970년 1월 1일 0시 0분 0초로부터의 시간을 1/1000초 단위로 설정함 String toLocaleString() : 현재의 날짜와 시간을 해당 국가에 맞는 문자열로 변환하여 리턴함.

Calendar 클래스

Date클래스처럼 날짜와 시간에 관한 정보를 출력할 때 사용 Calendar 클래스는 추상 클래스이므로 직접 객체 생성 불가 -> getInstance() 메서드를 이용하여 객체 생성 가능

Calendar cal2 = Calendar.getInstance();

Formatter 클래스

형식화된 문자열을 출력하기 위해서 C언어의 printf()와 같은 기능의 Formatter 클래스를 제공함 Formatter 클래스는 형식 문자열을 제공하고, 이 문자열에서 지정한대로 데이터가 형식화되어 출력됨

  • Formatter 클래스 객체 생성 과정
Formatter formatter = new Formatter(Appendable a);

Formatter에서 형식화된 문자열을 만들었을 때, 결과가 저장되는 곳임 Appendable 인터페이스를 구현한 대표적인 클래스인 StringBuffer

사용의 예

StringBuffer sb = new StringBuffer();
Formatter formatter = new Formatter(sb);

StringBuffer 클래스의 객체에 대해 Formatter를 저장하는 문장 Formatter 객체에서 적용한 출력 포맷 결과가 StringBuffer 객체에 저장됨

Formatter format(String format, Object... obj)

Object... obj-> 몇 갸의 데이터를 형식화된 출력으로 지정할 것인지 사전에 확정할 수 없기 때문에 가변적 매개변수를 사용함

Formatter 클래스의 format들

Formatter에 사용하는 format들(%d, %s...)에는 다양한 형식과 타입을 지원함 Date나 Calendar 클래스를 매개변수로 받아 날짜를 출력하는 %t format에는 부가적인 옵션이 붙음

  • 데이터 타입별 format %B, %b, %o, %C,%c, %s, %d, %t, %e, %n, %f, %%, %x

  • %t 날짜 format %tA, %tK, %tY, %t1, %tB, %tM, %tm, %tS, %te, %tZ

기본 Collection

배열의 한계

배열의 길이가 증가되거나 감소될 수 없음 배열의 크기를 벗어나는 인덱스에 접근하면 java.lang.ArrayIndexOutOfBoundsException이 발생함

-> 배열을 사용할 때는 충분한 크기로 설정해야 함

매개변수로 받은 배열에 짝수가 몇 개 들어 있는지 알 수 없기 때문에 짝수의 개수를 구하는 로직이 필요함 -> 배열 객체를 생성할 때 몇 개를 저장할지 미리 알아야 하기 때문에 사용하기 불편함

-> 사전에 배열의 길이를 알 수 없을 때 Vector와 같은 다양한 Collection 클래스를 지원함

Vector 클래스 개요

자바는 동적인 길이로 다양한 객체들을 저장하기 위해 Vector 클래스를 제공함 Vector는 저장되는 객체들에 대한 참조 값을 저장하는 일종의 가변 길이의 배열

가변배열에는 객체만 저장이 가능함 가변 크기로서 객체의 갯수를 염려할 필요가 없음 한 객체가 삭제되면 컬렉션이 자동으로 자리를 옮겨줌

다양한 객체들이 하나의 Vector에 저장될 수 있고, 길이도 필요에 따라 자동으로 증가됨

  • Vector클래스의 생성자 Vector() : 10개의 데이터를 저장할 수 있는 길이의 객체를 생성하고, 저장 공간이 부족한 경우 10개씩 증가함 Vector(int size) : size개의 데이터를 저장할 수 있는 길이의 객체를 생성하고 저장 공간이 부족한 경우 size개씩 증가함 Vector(int size, int incr) : size개의 데이터를 저장할 수 있는 길이의 객체를 생성하고, 저장 공간이 부족한 경우 incr 개씩 증가함

Enumeration 인터페이스 개요

객체들의 집합(Vector)에서 각각의 객체들을 한 순간에 하나씩 처리할 수 있는 메서드를 제공함 인터페이스이므로, 직접 new 연산자를 이용하여 객체를 생성할 수 없음

  • Enumeration 메서드 boolean hasMoreElements() : Vector로부터 생성된 Enumeration의 요소가 있으면 true, 아니면 false를 반환함 Object nextElement() : Enumeration 내의 다음 요소를 반환함

Enumeration 인터페이스에 선언된 메서드는 그 인터페이스를 사용하는 클래스로 구현해서 사용해야 함 Vector 클래스의 elements()라는 메서드에 의해 생성 Enumeration객체 내의 메서드들은 모두 Vector클래스에서 이미 구현하여 제공

Stack 클래스 개요

스택(Stack)은 사전적으로 '더미','쌓아 올림'이라는 의미를 가짐

제일 마지막에 저장한 데이터를 제일 먼저 꺼내는 후입선출(LIFO-Last In First Out) 형태의 자료구조

Top : 가장 최근에 입력된 데이터로 삽입, 삭제, 읽기 동작이 발생함. 데이터의 수에 따라 유동적으로 변함. 데이터가 삽입되면 증가하고, 삭제되면 감소함

Bottom : 가장 먼저 입력된 데이터 0으로 값이 고정되어 있음

Push : top값을 하나 증가시킨 후, 새로운 데이터를 삽입함 Pop : top이 가리키고 있는 자료 삭제 후, top값을 하나 감소하도록 구현함 peek : top이 가리키는 데이터를 읽는 작업. top 값에는 변화 없음

Queue 인터페이스 개요

Queue는 줄(line)이라는 의미를 가지고 있음

가장 먼저 삽입된 데이터가 가장 먼저 제거되는 선입선출(FIFO-First In First Out)형태의 자료구조

front : 가장 먼저 입력된 데이터 -> remove rear : 가장 최근에 입력된 데이터 -> insert

front값이 rear를 추월하게 되면 더 이상 제거할 데이터가 없는 상태, 자료가 하나도 없는 빈 큐임을 의미함 큐에서 front가 가리키는 데이터를 읽는 작업을 peek라고 하며, 데이터를 제거하지 않고 읽는 작업만 수행하므로 front 값을 변경시키지 않음

Generics를 이용한 Collection API 사용

Vector / Stack / Queue

자바에서 제공하는 다양한 컬렉션들은 다른 타입의 Object들을 저장하고 관리하는 기능을 제공함 하지만 실제 프로그램을 개발할 때는 다른 타입의 데이터를 저장할 일이 거의 없음 오히려 다른 타입의 데이터들을 컬렉션에 저장함으로써 문제가 발생되는 경우도 있음

자바에서 제공하는 컬렉션 객체가 특정 타입의 데이터만 저장하고 사용할 수 있도록 지원함

컬렉션에 저장할 객체의 타입을 제한해서 사용하도록 함 -타입의 안정성을 제공 -타입 체크와 형변환 과정 생략 -코드의 간결화

제네릭스를 사용하기 위한 문법

컬렉션<데이터 타입> 변수이름 = new 컬렉션 <데이터타입>();

-> 저장해서 사용할 데이터 타입을 지정

Collection을 사용하는 확장 for문

배열을 포함한 컬렉션을 쉽게 사용할 수 있도록 향상된 for문을 제공함

  • Collection 요소들을 순차적으로 꺼내기 위해서 Collection에 저장된 요소의 개수를 확인하고, 그 길이만큼 반복함 Enumeration을 이용함

  • for 문 Enumeration을 사용하지 않고도, Collection에서 요소들을 순차적으로 접근할 수 있음.

for(데이터 타입 접근 변수명 : 배열이나 컬렉션 참조 변수명){
  반복 문장;
}

데이터 타입 접근 변수명 -> 배열이나 Collection이 가지고 있는 데이터와 같은 데이터 타입을 지정해야 함

public class ForTest {
	public static void main(String[] args) {
		int[] scoreList = {50, 45, 99, 85, 100};
		int scoreSum = 0;
		for (int score : scoreList) {
			scoreSum = scoreSum + score;
		}
		System.out.println(scoreSum);
		System.out.println("-----확장 for문-----");
		
		Vector<String> subjectList = new Vector<String>();
		subjectList.add("Java");
		subjectList.add("SQL");
		subjectList.add("Servlet");
		
		for(String subject : subjectList) {
			System.out.println(subject);
		}
	}
}
  • Generics 장 : 접근 변수의 데이터 타입을 지정할 때 Generics클래스에서 지정한 데이터 타입으로 지정할 수 있음 단 : 확장 for문은 사용할 수 있음. 접근 변수의 데이터 타입을 Obejct클래스 타입으로 지정해야 함.접근 변수의 사용 시 적절한 해당 클래스 타입으로 형변환시켜야 하는 단점이 있음
⚠️ **GitHub.com Fallback** ⚠️