반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

멋진 개발자가 되고 싶다

[Android] 스레드에 대해 끄적여본다. 본문

Android/개발 관련 팁

[Android] 스레드에 대해 끄적여본다.

오패산개구리 2021. 8. 24. 00:52
728x90
반응형

스레드로 입 털기

 

우리가 안드로이드 앱을 만들면 단순한 앱일 경우 메인 스레드 하나만으로 동작할 것이야.

 

물론 우리가 사용한 코드 내부를 들어가 보면 다른 스레드를 쓸지도 모르지만 말이다. 

 

그런데 말이다..

 

 

너가 생각하는 멋진 앱을 만들고 싶다면 멀티 스레드는 필수가 된다..

 

멀티 스레드가 뭐냐고?

 

이름만 들어도 스레드를 여러 개 돌려버린다는 뜻이지.

 

친절하게 예를들어 설명해주지.

 

네가 김치볶음밥을 만든다고 치자.

 

너는 햄을 볶고 나서 김치를 넣고 그 뒤에 밥을 넣어 잘 섞어준 다음

 

프라이팬에 있는 김치볶음밥을 접시에 올리겠지.

 

그 뒤에 쓰던 후라이팬을 이용해 달걀 프라이를 할 거야.

 

달걀 프라이를 다 하고 김치볶음밥에 얹게 되면 이미 김치볶음밥은 다 식어서 맛이 없게 된 뒤겠지?

 

이렇게 융통성 없게 하지 말고

 

프라이팬 하나를 더 꺼내서 김치볶음밥을 하면서 달걀 프라이를 하게 되면

 

김치볶음밥이 완성되었을 때 달걀 프라이도 완성돼서 바로 냠냠 쩝쩝 먹음 된다 이거지!

 

이게 멀티 스레드란다.

 

 

 

스레드 생성 방법

 

1. Thread 클래스 상속(extend)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
class NewThread extends Thread {
        NewThread() {
 
        }
 
        public void run() {
            // TODO : thread running codes.
        }
    }
 
    NewThread nt = new NewThread() ;
    nt.start() ;
cs

 

2. Runnable 인터페이스 구현(implement)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
 class NewRunnable implements Runnable {
        NewRunnable() {
 
        }
 
        public void run() {
            // TODO : thread running codes.
        }
    }
 
    NewRunnable nr = new NewRunnable() ;
    Thread t = new Thread(nr) ;
    t.start() ;
cs

 

 

두 방법이 있는데 뭘 써야 될지 난감할 거야 친구..

 

두 기능이 똑같다면 굳이 자바에서 두 개를 만들어 놨겠니?

 

이제부터 상황에 따라 뭘 쓸지 알아보자 레쓰 기릿!!!!

 

출처: https://recipes4dev.tistory.com/143

 

간단하게 설명해줄게.

 

Thread 클래스를 상속하는 것은 뭔가 상당히 묵직한 느낌이야.

 

김치볶음밥을 하는데 프라이팬만 가져온 게 아니라

 

가위, 집게, 국자 등등 불필요할 수 있는 것들을 다 가져온 거지.

 

하지만 Runnable 인터페이스를 구현하는 것은 프라이팬만 딱 가져온 거라 볼 수 있지.

 

우리는 run() 하나만 필요한데 Thread를 상속하게 되면

 

자바에서는 다중 상속이 불가능하기 때문에 꼭 필요한 다른 클래스를 상속받기 어려워져.

 

그럴 때 Runnable을 쓰는 거야. implement(구현)은 extend(상속)과 달리 여러 개 쓸 수 있으니까.

 

ok? 유노?

 

 

 

 

 

메인 스레드 : UI 담당 일진

 

제목 그대로 UI는 메인 스레드에서만 담당을 하고 있어!

 

얼핏 생각해보면 UI의 부분 부분을 1번부터 n번까지 나눠서 만들면 더 효율적이지 않나 생각도 들지?

 

하지만 그렇게 해서 효율적일 수도 있지만 오히려 이렇게 만들 수 있게 되면 더 큰 문제를 초래해.

 

예를 들어 네가 1번 스레드에서 이미지 뷰를 만들고 2번 스레드에서 화면을 구성한다고 생각해보자.

 

화면을 구성한 다음 이미지뷰를 만들어야 화면 위에 이미지가 얹어질 테니 자연스럽겠지?

 

하지만 UI를 멀티스레드로 구성해버리면 1번 스레드가 먼저 끝날지, 2번 스레드가 먼저 끝날지 알 수가 없어.

 

그래서 섣불리 개발자가 여러 스레드를 이용해서 UI를 만들 수 없도록

 

자체적으로 메인 스레드에서만 UI를 다룰 수 있게 막아놓게 된 거지.

 

그래서 만약 서브 스레드의 데이터를 받아서 메인 스레드에서 UI를 만들려면

 

지속적으로 서브 스레드에서 보내오는 데이터를 메인 스레드가 받아야 되잖아?

 

그래서 Looper는 메시지 큐(Message Queue)에 메시지가 들어오나 안들어오나 반복적으로 감시를 해.

 

그러다가 메세지 큐에 메세지가 들어오면 Looper는 Handler 메서드를 호출해서

 

Handler가 이 메시지를 메인 스레드로 전달할 수 있도록 하지.

 

 

이상으로 스레드에 대한 설명은 끝이야.

 

이 내용은 다음 블로그를 참고해서 작성했고 자세한 내용은 여기서 보면 될 것 같아!

 

https://recipes4dev.tistory.com/143

 

안드로이드 스레드(Android Thread)

1. 스레드(Thread), 그리고 프로그램(Program)과 프로세스(Process). 스레드(Thread)를 설명하는 이 문장을 읽고 나서, 어떤 용어 또는 개념들이 머리 속에서 확장되나요? 스레드(Thread)라는 단어를 듣는 것

recipes4dev.tistory.com

 

 

728x90
반응형