나의 IT일지
기타 API 클래스 본문
자바에서는 개발자들이 개발할 때 사용하기 위한 기본 기능인 API가 구현되어 있으며, import를 통해 클래스를 호출해서 해당 클래스의 메서드를 사용한다. 하지만, "java.lang"패키지는 클래스를 생성할 때 기본적으로 포함이 되며, 최상위 클래스인 java.lang.Object클래스가 상속되기에, "java.lang"패키지에 있는 import를 사용하지 않고 클래스를 호출할 수 있으며, java.lang.Object클래스의 메서드를 사용할 수 있다.
java.util.Timer, java.util.TimerTask
개발을 하다보면, 개발자가 원하는 특정한 시간에 파일을 실행을 설정해야 하는 경우가 있다. 이러한 기능을 자바에서는 Timer클래스와 TimerTask클래스를 통해 구현을 했는데, Timer클래스는 java.util패키지에 있는 클래스로, 개발자가 원하는 특정한 시간에 코드를 실행하거나 특정 시간 간격으로 반복되는 작업 처리할 수 있도록 지원한다. 그리고 Timer클래스의 실행코드는TimerTask클래스의 run 메서드를 통해 코드를 구현한다.
다음 순서는 Timer클래스를 통해 특정한 시간이 경과한 후에 코드를 실행 할 수 있도록 설정하는 과정이며, 이떄 특정한 시간은 밀리세컨드(1/1000)단위로 설정해야 한다.
- TimerTask 클래스를 상속받는 클래스 선언
- class Work1 extends TimerTask{...}
- 상속받는 클래스에 TimerTask클래스의 run 추상 메서드를 하고 싶은 작업으로 오버 라이딩
- public void run(){...}
- Timer 객체과 TimerTask 객체를 생성
- Timer t = new Timer();
- TimerTask w1 = new Work1();
- Timer클래스의 schedule메서드에 원하는 시간과 TimerTask클래스의 객체를 매개변수를 입력
- t.schedule( TimerTask 객체 , 초*1000);
package pack0524;
import java.util.Timer;
import java.util.TimerTask;
public class Code5 {
public static void main(String[] args) throws InterruptedException {
try {
Timer t = new Timer(true); //실행종료시 Timer객체 삭제
TimerTask w1 = new Work1();
TimerTask w2 = new Work2();
t.schedule(w1,3000);
t.schedule(w2,1000);
Thread.sleep(4000);
System.out.println("모든 작업 종료");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
class Work1 extends TimerTask{
@Override
public void run() {
System.out.println("work1");
}
}
class Work2 extends TimerTask{
@Override
public void run() {
System.out.println("work2");
}
}
Timer클래스는 스레드 형식으로 실행이 된다. 스레드란 코드의 실행 순서로, Timer클래스는 main스레드 외에도 다른 스레드로 실행된다. 즉, 그림으로 표현하면 다음과 같다.
그래서 작업 스레드를 실행 시킨 것을 적용하기 위해서는 메인스레드를 일시정지 해야 한다. 그래서 작업스레드의 호출이 종료되고 메인스레드를 "Thread.sleep(초*1000)" 메서드를 통해 일시정지 시킨다.
java.math.BigDecimal
double타입을 사용할 때, 소수점 이하의 수는 정확한 값이 아닌 근사 값으로 저장이 된다. 그래서 자바에서는 BigDecimal 클래스를 통해정확한 소수점 연산을 하며, 실수형 타입으로 소수점 연산시 오차가 나는 부분을 보완한다. 이때, BigDecimal 클래스의 객체를 생성할 때, 생성자의 매개변수는 문자열 형태의 값을 가져야 한다.
- add(BigDecimal 객체) : 더하기
- subtract(BigDecimal 객체) : 빼기
- multiply(BigDecimal 객체) : 곱하기
- divide(BigDecimal 객체,RoundingMode.HALF_EVEN) : 나누기
- RoundingMode.HALF_EVEN : 자바의 반올림 정책
- remainder(BigDecimal 객체) : 나머지
- equals(BigDecimal 객체) : 매개변수의 객체의 값과 동등한지 비교
- compareTo(BigDecimal 객체) : 매개변수의 객체의 값과 대소 비교
- -1 : 매개변수 객체 > 객체
- 0 : 매개변수 객체 = 객체
- 1 : 매개변수 객체 < 객체
package pack0523;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Code2 {
public static void main(String[] args) {
double a=24.3953;
double b = 50.343998;
System.out.println("--------기본 연산자---------");
System.out.println("a==b : "+(a==b));
System.out.println("a!=b : "+(a!=b));
System.out.println("a+b : "+(a+b));
System.out.println("a-b : "+(a-b));
System.out.println("a*b : "+(a*b));
System.out.println("a/b : "+(a/b));
System.out.println("a%b : "+(a%b));
System.out.println("--------BigDecimal 메서드---------");
BigDecimal number = new BigDecimal(String.valueOf(a));
BigDecimal number2 = new BigDecimal(String.valueOf(b));
System.out.println("equals : "+number.equals(number2));
System.out.println("compareTo : "+number.compareTo(number2));
System.out.println("add : "+number.add(number2));
System.out.println("subtract : "+number.subtract(number2));
System.out.println("multiply : "+number.multiply(number2));
System.out.println("divide : "+number.divide(number2, RoundingMode.HALF_EVEN));
System.out.println("remainder : "+number.remainder(number2));
'프로그래밍 언어 > Java' 카테고리의 다른 글
컬렉션 프레임 워크 (0) | 2023.05.25 |
---|---|
Format 클래스 (0) | 2023.05.24 |
Scanner 클래스 (0) | 2023.05.22 |
LocalDateTime 클래스 (0) | 2023.05.19 |
Calendar클래스, Date클래스 (0) | 2023.05.18 |