POST

[안드로이드] 코틀린 Thread 클래스 / Runnable 인터페이스 사용

2022.01.26 - [Android] - [안드로이드] 코틀린 메인스레드 / 백그라운드스레드

2022.01.26 - [Android] - [안드로이드] 코틀린 핸들러와 루퍼

2022.01.27 - [Android] - [안드로이드] 코틀린 스레드(Thread)연습 - 타이머 만들기

 

Thread(스레드)

안드로이드 코틀린에서 스레드를 생성 하는 방법은 아래와 같습니다.

 

Thread 클래스

Thread 클래스를 상속받는 WorkThread 라는 클래스를 정의 합니다. 

이어서 스레드가  처리할 로직을 정의하는 run() 메서드를 오버라이드 합니다.

run() 메서드 안에 i라는 변수에 값이 1부터 10까지 될 때 까지 반복하는 코드를 만듭니다.

run() 메서드의 실행이 끝나면 스레드는 종료됩니다.

class WorkThread: Thread() { // Thread 클래스
    override fun run() {
        var i = 0
        while(i<10) {
            i+=1
            Log.d("Thread11","$i ")
        }
    }
}

 

생성된 스레드의 처리 - Thread 클래스

WorkThread 객체를 메인 액티비티에서 생성해 별도의 스레드를 생성하고 start()메서드를 호출하면 run() 메서드에 정의한 코드를 생성된 스레드가 처리합니다.

var thrd = WorkThread()
thrd.start()

 

 

Runnable 인터페이스

Runnable 인터페이스는 다중 상속을 허용 하지 않는 코틀린언어의 특성상 상속관계에 있는 클래스도 구현할 수 있도록 지원하는 모델입니다.

Runnable 인터페이스를 구현하는 WorkRunnable 라는 클래스를 정의 합니다.

이어서 위와 동일하게  run()메서드를 오버라이드 하여 코드를 정의 합니다.

class WorkRunnable: Runnable { // Runnable 인터페이스
    override fun run() {
        var i = 0
        while(i<10) {
            i+=1
            Log.d("Runnable","iii=$i")
        }
    }
}

 

생성된 스레드의 처리 - Runnable 인터페이스

위의 Thread를 상속받은 객체와는 달리 Runnable 인터페이스를 구현한 객체는 Thread클래스의 생성자로 전달하고 Thread 클래스의 start0 메서드를 호출해야 스레드가 생성 됩니다.

var thrdRun = Thread(WorkRunnable())
thrdRun.start()

 

람다식으로 Runnable 익명 객체 구현

인터페이스 내부에 메서드가 하나만 있는 경우는 람다식으로 변환이 가능합니다. Runnable 이ㅏㄴ터페이스를 이용한 스레드는 람다식으로 변환이 가능합니다. 메인 액티비티에서 작성 하여 봅시다.

Thread { //  람다식 Runnable 익명 객체 구현
    var i = 0
    while(i<10) {
        i+=1
        Log.d("LambdaT","Lambda i = $i")
    }
}.start()

 

코틀린에서 제공하는 thread() 구현

코틀린에서는 다음과 같이 백그라운드를 사용할 수 있습니다. thread() 안에 파라미터로 start=true를 전달하면 thread() 안의 코드 블럭이 실행 됩니다. 메인 액티비티에서 작성하여 봅시다.

thread(start=true) { // 코틀린에서 제공하는 thread()구현
    var i=0
    while(i<10) {
        i+=1
        Log.d("KotlinT","ko i = $i")
    }
}