프로그래밍 공부
자바 스레드에서 Runnable 인터페이스를 사용하는 이유 본문
Runnable
인터페이스를 사용하는 이유는 주로 다중 상속의 유연함과 객체 지향적인 설계를 위해 사용한다.
자바는 다중 상속을 지원하지 않기 때문에, 이미 다른 클래스를 상속받은 클래스가 동시에 스레드 기능을 가지려면 Runnable
인터페이스를 사용해야 한다.
주요 이유:
다중 상속의 제약 해결:
자바에서는 단일 상속만 가능하므로, 클래스가 이미 다른 클래스를 상속받고 있을 때
Thread
클래스를 상속받는 것이 불가능하다.Runnable
인터페이스는 다중 상속을 대신할 수 있다. 즉, 이미 클래스를 상속받고 있는 상태에서도Runnable
을 구현하여 스레드 기능을 사용할 수 있는 것 이다.예를 들어, 클래스가 이미
Car
클래스를 상속받고 있다면Thread
클래스를 상속받을 수 없다.
하지만Runnable
을 구현함으로써 스레드 기능을 추가할 수 있다:class Car { // 자동차 관련 기능 } class MyTask extends Car implements Runnable { public void run() { // 스레드에서 실행할 작업 for (int i = 1; i <= 5; i++) { System.out.println("Task: " + i); try { Thread.sleep(1000); } catch (InterruptedException e) {} } } } public class Main { public static void main(String[] args) { MyTask task = new MyTask(); Thread t = new Thread(task); // 스레드 생성 t.start(); // 스레드 실행 } }
객체 지향적인 설계:
Runnable
을 사용하면 작업과 스레드 제어를 분리할 수 있다.Runnable
인터페이스를 구현한 객체는 스레드가 아닌 작업 자체에 집중하고, 스레드는Thread
클래스에 의해 관리된다.Runnable
을 통해 여러 스레드가 같은 작업을 공유할 수 있고, 작업 로직과 스레드 실행 로직을 분리하여 더 유연한 설계가 가능하다.예시: 동일한 작업을 여러 스레드에서 처리하도록 할 수 있다.
class MyTask implements Runnable { public void run() { for (int i = 1; i <= 5; i++) { System.out.println(Thread.currentThread().getName() + " Task: " + i); try { Thread.sleep(500); } catch (InterruptedException e) {} } } } public class Main { public static void main(String[] args) { MyTask task = new MyTask(); Thread t1 = new Thread(task); // 스레드1에 작업 연결 Thread t2 = new Thread(task); // 스레드2에 같은 작업 연결 t1.start(); // 스레드1 시작 t2.start(); // 스레드2 시작 } }
메모리 효율성:
Thread
클래스를 상속받으면 각각의 스레드는 별도의Thread
인스턴스를 생성한다. 하지만Runnable
을 사용하면 여러 스레드가 같은Runnable
객체를 공유할 수 있어 메모리 효율이 높아짐.
더 나은 코드 재사용성:
Runnable
을 구현한 객체는 스레드와 무관하게도 사용할 수 있으므로, 코드 재사용성이 높아짐. 반면,Thread
클래스를 상속받은 경우 해당 객체는 스레드로서의 기능만을 가진다.
결론:
Runnable
인터페이스를 사용하는 이유는 자바의 단일 상속 제약을 해결하고, 스레드 작업과 스레드 관리의 분리를 통해 더 유연하고 객체 지향적인 설계를 가능하게 하기 위함이다. 이는 코드 재사용성을 높이고, 메모리 효율성을 개선하며, 스레드 기능을 다양한 상황에서 유연하게 사용할 수 있게 해준다.
'Programming > JAVA' 카테고리의 다른 글
JAVA 스레드의 우선순위 (0) | 2024.10.22 |
---|---|
JAVA에서의 스레드의 상태 (1) | 2024.10.22 |
자바 스레드(Thread) (1) | 2024.10.22 |
JAVA의 함수형 프로그래밍 (1) | 2024.10.21 |
자바 제네릭 (0) | 2024.10.09 |