[java] 스레드 생성 방법의 비교

Java에서는 여러 가지 방법을 사용하여 스레드를 생성할 수 있습니다. 이 글에서는 스레드를 생성하는 세 가지 주요한 방법을 비교해보겠습니다. 각 방법의 장단점과 사용 시점을 알려드리겠습니다.

1. Thread 클래스 상속

스레드를 생성하는 가장 간단한 방법은 Thread 클래스를 상속하는 것입니다. 아래의 예제 코드를 통해 이 방법을 살펴보겠습니다.

public class MyThread extends Thread {
    public void run() {
        // 스레드에서 실행될 코드
    }

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

이 방법의 장점은 구현이 간단하다는 것입니다. 스레드 클래스를 직접 상속하고 run 메소드를 오버라이드하여 스레드에서 실행될 코드를 작성하면 됩니다.

한편, 이 방법의 단점은 다른 클래스를 상속할 수 없다는 점입니다. Java는 단일 상속만을 지원하기 때문에, 이미 다른 클래스를 상속한 경우 스레드 클래스를 상속할 수 없습니다. 또한, Runnable 인터페이스를 구현하는 방식보다 유연성이 떨어진다는 점도 고려해야 합니다.

2. Runnable 인터페이스 구현

Runnable 인터페이스를 구현하는 방법은 스레드 생성에 더 많은 유연성을 제공합니다. 아래의 예제 코드를 통해 이 방법을 살펴보겠습니다.

public class MyRunnable implements Runnable {
    public void run() {
        // 스레드에서 실행될 코드
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }
}

이 방법의 장점은 클래스 상속이 없어서 다른 클래스와 동시에 사용할 수 있다는 것입니다. 또한, Runnable 인터페이스를 구현하는 방식을 사용하면 코드의 재사용성을 높일 수 있습니다.

그러나 이 방법의 단점도 있습니다. run 메소드를 오버라이드하는 외부 클래스를 작성해야 하므로 코드의 가독성이 좀 떨어질 수 있습니다.

3. 람다 표현식을 이용한 스레드 생성

Java 8부터는 람다 표현식을 이용하여 스레드를 생성할 수도 있습니다. 이 방법은 가장 간단하고 직관적입니다. 아래의 예제 코드를 통해 확인해보겠습니다.

public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            // 스레드에서 실행될 코드
        });

        thread.start();
    }
}

이 방법은 코드의 간결성과 가독성을 높일 수 있다는 장점이 있습니다. 또한 별도의 클래스나 인터페이스를 구현할 필요가 없어서 코드의 양을 줄일 수 있습니다.

하지만 이 방법의 단점은 복잡한 로직이나 상태 관리가 필요한 경우에는 조금 제한적일 수 있다는 것입니다.

요약

각 방법의 장단점을 요약하면 다음과 같습니다:

스레드 생성 방법은 사용하고자 하는 상황에 따라 선택되어야 합니다. 개발자의 목적과 요구 사항에 맞게 적절한 방법을 선택하는 것이 중요합니다.