자~ 요번 글에서는 안드로이드에서 Thread를 사용하는
방법에 대해서 포스팅 해보겠습니다.
쓰레드를 사용하기에 앞서서 그 개념에 대해서
미리 알고 가는게 좋겠죠?
기본적으로 Thread는 프로세스 속에서 순차적으로 실행되는 흐름이라고 생각하면 되겠습니다!
별도의 쓰레드를 생성하지 않은 상태에서는 메인쓰레드 한개가 존재하게 됩니다.
그렇게 되면 프로그램 내에 흐름이 1가지만 존재하게 됩니다.
흐름이 1개라는 건 한 번에 1가지 일만을 처리할 수 있다는 걸 의미합니다.
그렇게 되면 이런 상황이 됩니다.
예를 들면,
A와 B가 채팅을 하고 있습니다.
A가 B에게 채팅을 보냈는데, B가 몇일 동안 답이 없습니다.
하지만 흐름을 B가 가지고 있으므로 A는 B에게 메세지로 화를 낼 수도 없는 상황인거죠!
다른 예로 게임을 든다면,
내 캐릭터가 움직이는 동안 흐름이 내 캐릭터에 있으므로
다른 NPC라던가 몬스터들이 움직이지 못하게 됩니다.
( 옛날에 포켓몬스터가 그랬던거 같은데 기억나시는 분? ㅋㅋ)
하지만, 항상 멀티 쓰레드가 필요한 건 아닐 겁니다. 단일 쓰레드로도 충분한 경우는
굳이 쓰레드를 만들 필요가 없겠죠?
턴 제를 이용한 게임들의 경우가 그렇겠군요!
나름 이해하기 쉽게 쓰려고 노력했는데
이해가 잘 되시나요?
결국 단순히 쓰레드는 메인과 독립적인 하나의 흐름을
만들어 준다고 생각하시면 될 것 같습니다!
그럼 이제 사용 방법들에 대해서 알아보도록 합시다!
대략 4가지를 알아볼 예정인데요. 다음과 같습니다.
1. Thread 클래스를 상속해서 사용하는 방법
2. Runnable 인터페이스를 구현하는 방법
3. Handler를 사용하는 방법
4. AsyncTask를 사용하는 방법
이번 글에서는 1번과 2번 방법을 집중적으로 써보겠습니다.
첫번째로, Thread 클래스를 상속하는 방법입니다.
class MyThread extends Thread{
MyThread(){
}
public void run(){
//이 부분에 thread가 실행될 때 실행할 코드를 작성하면 되겠습니다~
}
}
MyThread mThread = new MyThread();
mThread.start();
기본적인 틀입니다. Thread를 상속하는 클래스를 1개 선언합니다.
그 안에는 무조건! Override 해야 할 run() 함수가 있습니다.
run()함수 안에는 본인이 이 Thread를 실행 했을때 작동할 코드를 작성하시면 됩니다.
그리고 정의한 클래스의 객체를 만들고 .start()를 해주면 객체의 run()이 실행되게 됩니다.
두번째로는, Runnable 인터페이스를 구현하는 방법입니다.
class MyRunnable implements Runnable{
MyRunnable(){
}
public void run(){
//위에서의 run()과 같은 작업을 수행합니다.
}
}
MyRunnable mRunnable = new MyRunnable();
Thread thread = new Thread(mRunnable);
thread.start();
Thread를 상속할때와 비슷하다는 것을 알 수 있을 겁니다.
마찬가지로, run()함수에 쓰레드 실행시에 작동할 코드를 넣습니다.
코드상의 차이는 Thread 객체를 만들때 생성자에 Runnable 객체를 넣어준다는 것입니다.
그렇다면, 두 가지 방법 중에 어떤 방법으로 하는 게 좋을까요?
우리가 1번 방법으로 쓰레드를 이용한다고 가정을 해보겠습니다.
그렇다면 우리는 Thread를 상속(extends) 해야 합니다.
하지만, 이 클래스가 꼭 Thread 이외의 다른 클래스를 상속해야 될 수도 있습니다.
그런 경우 자바는 다중상속을 허용하지 않기 때문에 1번 방법으로는 불가능하게 됩니다.
이런 경우, 2번 방법을 사용해야 합니다.
추상클래스인 Runnable은 추상(abstract)로 선언된 하나의 run() 함수만을 가지고 있습니다.
사용할 클래스가 Runnable을 구현(implements)하여 Thread를 상속하는 것과 유사한 효과를
얻을 수 있게 됩니다.
결과적으로,
Runnable 인터페이스를 구현하는 경우는
단순히 run() 함수만을 구현하거나 Thread 이외에 다른 클래스를 상속해야 할 때 사용하면 되겠습니다.
Thread 클래스를 상속하는 경우는
Thread의 run() 이외의 다른 기능들을 확장하고 싶거나 단순히 Thread만을 상속할 수 있을 때
사용하면 될 것 같습니다.
다음 글에서는 Handler와 AsyncTask를 사용하는 방법에 대해서
글을 올리면서, 제가 배울 때 만들었던 간단한 게임 영상도 올려보도록 하겠습니다~
'Develop > Android' 카테고리의 다른 글
[Android 기초 : Handler] (0) | 2019.11.06 |
---|---|
[Android 기초 : 시작 그리고 Manifest] (2) | 2019.10.27 |
[Android 기초 : ListView ] (0) | 2019.10.24 |
[Android 기초 : activity_main.xml 그리고 Layout ] (0) | 2019.10.21 |