Java에서 멀티스레드를 사용할 때, Thread 클래스를 직접 상속받는 방법과 Runnable 인터페이스를 구현하는 방법이 있다. 이 두 가지 방식은 각각 장점과 단점이 있는데, 일반적으로 Runnable을 구현하는 방식이 더 추천된다. 왜 그런지 한 번 알아보자!
✅ 장점
구현이 간단함 → Thread 클래스를 상속받고 run() 메서드만 오버라이딩하면 됨.
❌ 단점
상속의 제한 → Java는 단일 상속만을 지원하므로, 이미 다른 클래스를 상속받고 있다면 Thread를 상속받을 수 없음.
유연성이 부족함 → 실행할 작업을 스레드와 분리해서 관리하기 어려움.
📌 예제 코드
class MyThread extends Thread {
public void run() {
System.out.println("Thread 실행 중...");
}
}
public class Main {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
}
}
✅ 장점
상속이 자유로움 → 이미 다른 클래스를 상속받고 있어도 Runnable을 구현할 수 있음.
코드의 분리 → 스레드와 실행할 작업을 분리하여 관리할 수 있어 유지보수가 쉬움.
자원 관리가 용이함 → 여러 스레드가 같은 Runnable 객체를 공유할 수 있어 자원을 효율적으로 관리할 수 있음.
❌ 단점
코드가 약간 복잡해짐 → Runnable 객체를 생성하고 이를 Thread에 전달하는 과정이 필요함.
📌 예제 코드
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable 실행 중...");
}
}
public class Main {
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start();
}
}
✅ Runnable 인터페이스를 구현하는 방식을 사용하자!
Runnable 방식이 Thread 상속 방식보다 유연하고 유지보수하기 쉬운 코드 작성이 가능하다. 특히, 객체 지향적으로 코드를 관리하고 싶다면 Runnable을 적극적으로 활용하는 것이 좋다!
🚀 즉, Thread를 상속하는 방식은 단순하지만 제약이 많고, Runnable을 구현하는 방식이 더 확장성이 좋다!