January 08, 2021
클래스:
Object
- Data
- Calendar
- Vector
- HashMap
- Formatter
- Enumeration
- ... etc.
주요 메소드
boolean after(Date when)
:when의 날짜가 현재 날짜 이후면 true, 아니면 false 반환boolean before(Date when)
:when의 날짜가 현재 날짜 이전이면 true, 아니면 false 반환int compareTo(Date anotherDate)
: 다른 날짜 객체와 비교하여 음수, 양수, 0 중 하나를 returnint compareTo(Object o)
: 다른 객체와 비교하여 음수, 양수, 0 중 하나를 returnboolean equals(Object obj)
: 날짜의 값을 비교하여 결과 returnlong 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 클래스는 추상 클래스 이므로 직접 객체 생성불가 - getInstance()
메소드를 이용해 객체 생성 가능
Calendar cal2 = Calendar.getInstance();
주요 메소드
boolean after(Object when)
:when의 날짜가 현재 날짜 이후면 true, 아니면 false 반환boolean before(Object when)
:when의 날짜가 현재 날짜 이전이면 true, 아니면 false 반환boolean equals(Object obj)
: 날짜의 값을 비교하여 결과 returnint get(int field)
: 현재 객체의 주어진 값의 필드에 해당하는 상수 값을 returnstatic Calendar getInstance()
: 현재 날짜와 시간 정보를 가진 Calendar 객체를 생성Date getTime()
: 현재의 객체를 Date 객체로 변환long set(int field, int value)
: 현재 객체의 특정 필드를 다른 값으로 설정void set(int year, int month, int date, int hour, int minute)
: 현재 객체의 년, 월, 일, 값을 다른 값으로 설정예시
import java.util.Calendar;
public class CalendarTest{
public static void main(String[] args){
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
}
}
printf()
와 같은 기능의 Formatter 클래스를 제공Formatter 클래스 객체 생성 과정
//구문
Formatter formatter = new Formatter(Appendable a);
// - Formatter에서 형식화된 문자열을 만들었을 때 결과가 저장되는 곳
// - Appendable인터페이스를 구현한 대표적인 클래스는 ``StringBuffer``
//사용 예시
StringBuffer sb = new StringBuffer();
Formatter formatter = new Formatter(sb);
//- StringBuffer클래스의 객체에 대해 Formatter를 지정하는 문장
//- Formatter 객체에서 적용한 출력 format 결과가 StringBuffer 객체에 저장된다.
// 출력 방법 - 구문
Formatter format(String format, Object... obj)
//String format: %로 시작하는 format 전달
//ex) 데이터 타입별 {%B - TRUE/FALSE 형태 출력, %C - 문자열 데이터 출력, %d - 10진수 정수형 출력 등등}
// 날짜 {%tA - 요일 출력,$tY - 4자리 년도 출력, %tB - 월 이름 출력, %tm - 01~12로 표현하는 월 출력 %tK - 0~23으로 표현하는 시 출력 등등}
//Object... obj: 데이터 개수를 확정할 수 없어 가변적 매개변수 사용
// 예시
// 현재 날짜를 표현하기 위해 날짜형 형식화 인자를 사용하는 예
StringBuffer sb = new StringBuffer();
Formatter formatter = new Formatter(sb);
Calendar c = Calendar.getInstance();
formatter.format("현재 날짜는 %tY년 %tB월 %te일 %n", c, c, c);
void add(int index, Object element)
: Vector 내의 index위치에 element 객체를 저장boolean add(Object o)
: o 객체를 Vector 내에 저장하고 그 결과 여부를 true, false로 반환void addElement(Object obj)
: obj객체를 Vector객체에 저장int capacity()
: Vector의 용량 returnboolean contains(Object elem)
: 현재 Vector에 elem의 요소가 있는지 검사하여 true/false returnvoid copyInto(Object[] anArray)
: Vector 내용을 Object 배열로 복사Object elementAt(int index)
: index 위치의 객체를 returnEnumeration elements()
: 이 Vector의 Enumeration 생성void insertElementAt(Object obj, int index)
: index위치에 obj 삽입boolean isEmpty()
: Vector이 비어있는지 true, false로 returnboolean remove(Object o)
: o 객체를 찾아서 Vector에서 제거boolean hasMoreElements()
: Vector로부터 생성된 Enumeration의 요소가 있으면 true, 없으면 falseObject nextElement()
: Enumeration 내의 다음 요소 반환❗️Enumeration 인터페이스에 선언된 메소드는 그 인터페이스를 사용하는 클래스로 구현해서 사용해야 한다.
elements()
메소드에 의해 생성사용 예시
import java.util.Enumeration;
import java.util.Vector;
class EnumerationTest{
public static void main(String[] args){
Vector list = new Vector(5);
list.addElement(new Integer(10));
list.addElement(new Double(10.0));
list.addElement(new String("hi"));
for(int i = 0; i<list.size();i++){
System.out.println(list.elementAt(i));
}
Enumeration e = list.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
}
}
top
bottom
peek 기능: top이 가리키는 데이터를 읽는 작업으로 top에는 영향이 없다.
// 구문
ArrayStack stack = new ArrayStack(5);
front
: 가장 먼저 입력된 데이터 - remove 기능 수행은 front에서.rear
: 가장 최근에 입력된 데이터 - insert 기능 수행은 rear에서.큐에서 front가 가리키는 데이터를 읽는 작업을 peek
라고 하고, front에는 영향 없다.
//구문
Queue<String> queue = new LinkedList<String>(); // Queue를 구현한 클래스를 통해 객체 생성
for(int i = 1;i<= 3; i++){
queue.add(i);
}
Systme.out.println(queue.peek()); // front가 가리키는 데이터 확인
Systme.out.println(queue.poll()); //front가 가리키는 데이터 하나씩 꺼내서 출력 == remove
❗️👀 자바에서 제공하는 다양한 컬렉션들(Vector, Stack, Queue 등)은 다른 타입의 Object를 저장하고 관리하는 기능을 제공한다. 하지만 실제 프로그램을 개발할 때에는 다른 타입의 데이터를 저장할 일이 거의 없다. 오히려 다른 타입의 데이터들을 컬렉션에 저장함으로써 문제가 발생되는 경우도 있다.
👉 이를 위해 컬렉션 객체가 특정 타입의 데이터만 저장하고 사용할 수 있도록 지원해야하는데, 자바에서는 그래서 Generics기능을 제공
컬렉션에 저장할 객체의 타입을 제한해서 사용하도록 함으로써
제네릭스를 사용하기 위한 문법
컬렉션<데이터 타입> 변수이름 = new 컬렉션<데이터 타입>();
/*예*/
Vector<Integer> list = new Vector<Integer>();
list.addElement(new Integer(100)); //list에는 Integer 객체만 들어갈 수 있다.
// list.addElement(new Double(99.5));는 컴파일 에러 발생
배열을 포함한 컬렉션을 쉽게 사용할 수 있도록 향상된 for문
확장된 방식은 Enumeration을 사용하지 않고도 순차적으로 접근 가능
//구문
for(데이터 타입 접근 변수명 : 배열이나 컬렉션 참조 변수명){
반복 문장;
}
// 데이터 타입 접근 변수명은 배열이나 컬렉션이 가지고 있는 데이터와 같은 데이터 타입을 지정해야한다.
//예시1
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;
}
}
}
//예시2 - Collection에서 확장for문 사용
public class ForTest{
public static void main(String[] args){
Vector<String> subjectList = new Vector<String>();
subjectList.add("Java");
subjectList.add("Python");
subjectList.add("SQL");
for(String subject : subjectList){
System.out.println(subject);
}
}
}
//이 경우에는 가능하면 Generics를 사용하는 것이 좋다
// 👍 접근 변수의 데이터 타입을 지정할 때 Generics클래스에서 지정한 데이터 타입으로 지정 가능
// Collection이 아닌 경우에도 Generics를 사용할 수 있지만 접근 변수의 데이터 타입을 Object 클래스 타입으로 지정해야하며 접근 변수 사용 시 적절한 해당 클래스 타입으로 형변환시켜야 하는 단점이 있다.