본문 바로가기
쿤즈 Dev/Java

[Java] Thread vs Runnable 둘 중 뭘 써야해?

by :)Koon 2023. 10. 7.

자바(Java)에서 스레드를 이용한 프로그래밍을 구현하기 위해서는 클래스 혹은 인터페이스 하나를 사용해야 한다. 바로 'Thread' 클래스와 'Runnable' 인터페이스다. 그럼 둘 중 무엇을 사용해야 할까?

이번 포스팅에서는 'Thread' 클래스와 'Runnable' 인터페이스중 무엇을 사용해야 하는지 알아보자.


Thread 클래스 vs Runnable 인터페이스

앞선 포스팅에서 'Thread' 클래스와 'Runnable' 인터페이스에 대한 포스팅을 했다.

2023.10.06 - [쿤즈 Dev/Java] - [Java] 멀티 스레드 (Multi-Thread) 기본 개념

 

[Java] 멀티 스레드 (Multi-Thread) 기본 개념

자바(Java) 프로그래밍을 이용해서 서비스를 만들고자 할 때, 반드시 등장하는 부분이 바로 동시성(Concurrency)이다. 동시성 문제는 다양하게 해결이 가능하며, 이때 다루는 개념이 바로 멀티 스레

koonsland.tistory.com

'Thread' 클래스는 상속받아서 사용하고 상속받은 자식 클래스는 스레드로서 기능을 가지게 된다.

'Runnable' 클래스는 스레드를 생성하기 위한 또 다른 방법이며 인터페이스를 implement 하여 'run()' 메서드를 구현하고 'Thread' 클래스의 생성자에 주입하여 스레드를 생성할 수 있다.

 

생각해 보면 'Runnable' 인터페이스로 만든 클래스는 다시 'Thread' 클래스에 주입해줘야 하는데 굳이 이렇게 사용할 필요가 있을까?

이 역시 생각해 보면 간단하다. 상속과 인터페이스의 다음과 같은 특징 때문이다.


상속관계

'Thread' 클래스를 사용하면 다른 클래스를 상속받아야 하므로 다른 클래스를 상속받을 수 없는 경우에는 'Runnable' 인터페이스를 사용하는 것이 유용하다.

 

유연성

'Runnable' 인터페이스를 구현하는 방법은 다중 상속을 지원하므로, 이미 다른 클래스를 상속받은 경우에도 'Runnable' 인터페이스를 구현할 수 있다.

 

재사용성

'Runnable' 인터페이스를 구현하는 방법은 더 재사용이 가능한 코드를 작성할 수 있다. 여러 클래스에서 'Runnable' 인터페이슬르 구현한 객체를 공유하여 사용할 수 있다.

 

자원 공유

'Runnable' 인터페이스를 사용하는 경우, 여러 스레드가 같은 객체를 공유하여 작업할 때 더 유리한 상황이 발생할 수 있다.


결론적으로 'Thread' 클래스를 상속받은 경우에는 스레드 동작이 다른 클래스의 메서드와 강하게 결합된 경우 혹은 클래스를 더이상 확장하지 않아도 되는 경우 사용하면 된다. 반대로 'Runnable' 인터페이스를 사용하는 경우는 이미 다른 클래스를 상속받은 경우나 여러 클래스에서 공유할 수 있는 Runnable 객체가 필요한 경우 다중 상속이 필요할 때 사용하면 된다.


이번 포스팅에서는 스레드의 마무리로 'Thread' 클래스와 'Runnable' 인터페이스를 언제 사용하면 좋을지 생각해 보았다. 자바의 기초적인 부분이지만 현업에서도 가장 고민이 많은 부분이 바로 멀티스레딩이며 동시성 문제이다. 어떠한 문제를 해결하기 위해서는 역시 기초가 중요한 것 같다.

댓글