Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바 Thread 클래스 vs Runnable 인터페이스, 차이점 완벽 비교

자바에서 멀티스레딩을 구현하는 대표적인 방법은 크게 두 가지입니다. 하나는 Thread 클래스를 상속받는 방식이고, 다른 하나는 Runnable 인터페이스를 구현하는 방식입니다. 두 방법 모두 스레드를 생성할 수 있지만, 동작 방식과 설계 측면에서 중요한 차이가 있습니다.

Thread 클래스란?

  • 클래스(class) 형태로 제공되며, 이를 상속받아 스레드를 생성할 수 있습니다.

  • start(), run() 등 스레드 제어에 필요한 다양한 메서드를 내장하고 있습니다.

  • 클래스 자체에 여러 기능이 포함되어 있기 때문에 상대적으로 더 많은 메모리를 사용합니다.

  • 자바는 다중 상속을 지원하지 않으므로, 한 번 Thread 클래스를 상속하면 다른 클래스를 더 이상 상속할 수 없습니다.

  • 각 스레드마다 고유한 객체가 생성되며, 해당 객체와 연결됩니다.

Runnable 인터페이스란?

  • 함수형 인터페이스(functional interface)로, 추상 메서드 run() 하나만 가지고 있습니다.

  • 구현 후 Thread 객체에 전달하여 스레드를 실행할 수 있습니다.

  • 불필요한 기능이 없어 적은 메모리를 사용합니다.

  • 인터페이스를 구현하더라도 다른 클래스를 자유롭게 상속받을 수 있어 설계 유연성이 높습니다.

  • 여러 스레드가 동일한 객체(리소스)를 공유할 수 있어 효율적인 자원 활용이 가능합니다.

정리: 어떤 것을 선택해야 할까?

별도의 부모 클래스를 상속해야 하거나, 여러 스레드 간에 작업 객체를 공유해야 한다면 Runnable 인터페이스 구현이 권장됩니다. 반면 Thread 클래스만의 메서드를 직접 활용하고 싶다면 Thread 클래스 상속 방식을 선택할 수 있습니다. 일반적으로는 유연성과 확장성이 뛰어난 Runnable 방식이 더 널리 사용됩니다.