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() 메서드만 사용하였다.