반응형
API - java.util
<java.util 패키지의 주요 클래스>
- Arrays
- Date
- Calendar
- Random
Arrays Class
➰ 주요 method인 binarySearch method
package cover;
import java.util.Arrays;
public class ArraysMain {
public static void main(String[] args) {
String[] lesserafim = {"사쿠라","김채원","허윤진","카즈하","홍은채"};
//이분검색 수행 - sort를 하지 않아서 음수가 return 됨(잘못된 결과)
int result = Arrays.binarySearch(lesserafim, "카즈하");
System.out.println(result);
//데이터 정렬
Arrays.sort(lesserafim);
System.out.println(Arrays.toString(lesserafim));
result = Arrays.binarySearch(lesserafim, "카즈하");
if(result >= 0) {
System.out.printf("%s 는 %d 번째 존재\n", "카즈하", result);
}else {
System.out.printf("%s는 존재하지 않음\n", "카즈하");
}
}
}
- 제어검색(정렬이 된 상태에서 검색을 수행) 중에 이분 검색을 수행해서 데이터가 존재하면 그 데이터의 위치를 리턴하고 존재하지 않으면 음수를 리턴하는 method
- 찾는 것은 음수가 나올수 없기때문에 못찾았을 때 음수를 주게 된다
Fibonacci 수열
- 첫번째와 두번째는 무조건 1 그 이후 부터는 앞의 두개 값을 더한 수가 된다.
- ex) 1 1 2 3 5 8 13 21 34....
- 규칙은 3번째부터 (반복문은 3번째부터이다) 처음 두개의 값은 무조건 고정.(규칙 미적용)
➰ 재귀를 이용한 해결 - 시간이 오래 걸리지만 이해하기는 쉬움
- method호출하면 stack이 쌓이는데 method가 안끝난 상태에서 또 method를 호출하고 .... 나중에 계속 다시 돌아와야 하기 때문에 시간은 오래 걸림.
package cover;
public class RecursionFibonacci {
//n번쨰 피보나치 수열의 값을 리턴해 주는 method
public static int fibonacci(int n) {
//시작 1,2번째는 1
if(n == 1 || n == 2) {
return 1;
}
//세번째 부터는 앞 두개의 합
else {
return fibonacci(n-1) + fibonacci(n-2);
}
}
public static void main(String[] args) {
System.out.println(fibonacci(10));
}
}
➰ 재귀를 이용하지 않고 해결
package cover;
public class NoRecursionFibonacci {
public static int fibonacci(int n) {
int f1 = 1;
int f2 = 1;
int fibo = 1;
for(int i = 3; i <= n; i++) {
fibo = f1 + f2;
f1 = f2;
f2 = fibo;
}
return fibo;
}
public static void main(String[] args) {
System.out.println(fibonacci(10));
}
}
날짜 관련 Class
🔹 epoch time : 1970년 1월 1일 자정
1. java.util.Date
- 1970년 1월 1일 자정을 기준으로 지나온 시간을 밀리초 단위의 long타입으로 관리
- 년도를 설정할 때는 1900년 이후 지나온 년수로 설정
- 월을 설정할 때는 1을 빼서 설정 0부터 시작하기 때문이다.
- toString method와 단위 별로 추출하는 method를 제공한다.
출력을 할 때는 java.text.SimpleDateFormat 클래스와 같이 사용하는 경우가 많다.
SimpleDateFormat sdf = new SimpleDateFormat("날짜서식");
sdf.format(date객체); //를 이용해서 날짜 서식이 적용된 문자열을 리턴받을 수 있다.
| <date 표시에 대하여> 년도 - yy, yyyy 월 - M,MM,MMM 일 - d, dd 요일 - E, EE, EEE 시간 - H, HH 오전/오후 - a 분 - m, mm 초 - s, ss |
➰ Date와 SimpleDateFormat 사용
package cover;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateCreate {
public static void main(String[] args) {
//현재 시간을 갖는 Date 인스턴스 생성
Date currentTime = new Date();
//출력 - 년월일 시분초
System.out.println(currentTime);
//원하는 날짜를 가지고 생성 1995년 2월 7일 12:45:00로 설정
Date firstMeetingTime = new Date(95, 2-1, 7, 12, 45, 0);
//출력 -
System.out.println(firstMeetingTime);
//년도만 추출해서 출력
//방법1
System.out.printf("%tY년\n", firstMeetingTime);
//방법2
SimpleDateFormat sdf = new SimpleDateFormat("Y년");
System.out.println(sdf.format(firstMeetingTime));
//방법3
System.out.println(firstMeetingTime.getYear()+1900+"년");
//원하는 포맷으로 출력
//1986년 5월 5일 ?요일이라고 출력
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy년 M월 d일 E요일");
System.out.println(sdf2.format(firstMeetingTime));
}
}
2. java.sql.Date, java.sql.Time
- 날짜와 시간이 분리된 클래스로 관계형 DB와 연동할 때 사용할 수 있는 클래스.
3. java.util.Calender, java.util.GregorianCalender
- 날짜 관련된 method를 가진 추상클래스(abstract class : 인스턴스를 생성할 수 없는 클래스)
- GregorianCalender 클래스는 calendar 클래스 method를 구현한 하위 클래스이다.
인스턴스 생성
calendar calendar = new GregorianCalender();
- 여러 종류의 생성자가 제공되서 날짜 및 시간을 설정해서 생성하는 것도 가능
- Date 클래스에 비해서 많은 양의 정보를 제공합니다.
4. LocalDateTime
- 최근에 DB의 날짜 및 시간 데이터에 매핑할 때 많이 이용하는 클래스
- 월을 계산할 때 -1을 하지 않아도 된다.
- 날짜와 시간 에디터를 많이 사용할 것 같으면 학습이 조금 필요하다.
package cover;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class DateETC {
public static void main(String[] args) {
//날짜와 시간을 다른 형태로 사용하는 클래스
Calendar cal = new GregorianCalendar();
//date보다 많은 정보를 출력
System.out.println(cal);
//특정 data를 조회 - 년도 추출
System.out.println(cal.get(Calendar.YEAR));
//최근에 많이 사용하는 날짜 타입 LocalDateTime
LocalDateTime ldt = LocalDateTime.of(2022, 10, 27, 18, 50);
System.out.println(ldt);
}
}
💡 날짜와 시간에서 조금 더 학습해 볼만한 내용
calendar 클래스나 LocalDateTime 클래스에서 시간의 연산 부분(특히 뺄셈)
calendar 클래스나 LocalDateTime 클래스에서 지역이나 시간대 설정하는 부분
Random Class
- random class : seed를 만든후 seed에서 숫자를 하나씩 추출하는 클래스
- random 생성자 seed 를 현재 시간에 생성 : 어느정도 랜덤 보장
- random(long seed) : seed 를 고정 랜덤이 아니고 일정한 패턴의 숫자를 가져온다.
data를 추출하는 method
next 자료형
next(int n) 0부터 n 보다 자은 수 까지 범위에서 추출하는
UUID
랜덤한 문자열을 만들어주는 클래스
UUID.randomUUID().toString() 을 이용해서 랜덤한 문자열을 만들어준다.
고유한 식별자를 생성할 때 주로 사용한다.
➰ seed를 사용하는 경우와 그렇지 않은 경우를 구분하고 배열 안에서 랜덤한 요소를 추출해보고 UUID를 생성
package cover;
import java.util.Random;
import java.util.UUID;
public class RandomTest {
public static void main(String[] args) {
//seed를 사용하지 않는 경우와 사용하는 경우의 차이
//여러번 실행해보고 확인
/* java 에서는 seed를 설정하지 않으면 seed가 랜덤 */
Random r = new Random();
System.out.println(r.nextInt());
//seed를 사용하면 랜덤값이 고정
/* seed를 설정하면 고정된 패턴의 숫자가 리턴 */
r = new Random(42);
System.out.println(r.nextInt());
r = new Random();
String[] ar = {"오미크론", "오미크론", "오미크론", "다크스펙터", "다크스펙터", "라투"};
for(int i = 0; i<10; i++) {
System.out.println(ar[r.nextInt(ar.length)]);
}
//랜덤한 문자열 추출
System.out.println(UUID.randomUUID().toString());
}
}
반응형
'국비지원 > JAVA' 카테고리의 다른 글
| [JAVA] 21. List(stack, queue, deque) / Set / Map (0) | 2022.10.26 |
|---|---|
| [JAVA] 21-2. API - java.util pkg (컬렉션 프레임워크) (0) | 2022.10.25 |
| [JAVA] 20. Wrapper class와 API - java.util pkg (java.util(API) Arrays와 sort, 객체 배열의 정렬 방법 까G) (0) | 2022.10.24 |
| [JAVA] 19. API (Application Programming Interface) (0) | 2022.10.18 |
| [JAVA] 18. 예외처리문법 (try-catch 와 try-catch-finally / throws 와 throw keyword) (0) | 2022.10.17 |