Java
Thread.sleep() 메서드 별도의 클래스 정의
밍구밍구밍
2024. 8. 6. 22:41
Thread.sleep() 메서드를 사용할 때는 항상 IntteruptException 예외 처리를 해주어야 했다
하지만 아래와 같이 Thread.sleep() 의 예외처리를 먼저 수행하는 별도의 클래스를 생성하고 해당 메서드를 정적으로 호출하는 방식을 사용 하면 아래와 같이 코드의 수를 줄이고 시인성을 높일 수 있다.
1. Thread.sleep(); 클래스 정의 전
package thread.control;
public class CheckedExceptionMain {
public static void main(String[] args) throws Exception {
throw new Exception();
}
static class CheckedRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
2. Thread.sleep(); 클래스 정의 후
package util;
import static util.MyLogger.log;
public abstract class ThreadUtils {
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
log("인터럽트 발생," + e.getMessage());
throw new RuntimeException(e);
}
}
}
(ThreadUtils 클래스에 정적 sleep() 메서드를 구현하고 해당 메서드에서 미리 예외처리를 하였다)
package thread.control;
import util.ThreadUtils;
import static util.ThreadUtils.*;
public class CheckedExceptionMain {
public static void main(String[] args) throws Exception {
throw new Exception();
}
static class CheckedRunnable implements Runnable {
@Override
public void run() {
sleep(1000);
}
}
}
실제 해당 스레드의 run() 메서드에서 정적으로 구현한 ThreadUtils 의 sleep 메서드를 호출하여 예외처리 코드는 미리 정의된 ThreadUtils 클래스에서 먼저 수행하고 메인 메서드에서는 sleep() 메서드만 사용하였다.