오늘 계획
⏲️ 공부시간 09 : 05 ~ 09 : 30
오늘 잠을 계속 설쳐서 몬스터를 마시고있긴한디 뇌가 맹하당~
문제가 길어서 처음에 보고 쫄았는데 안어려워서 쉽게 풀었음
람다식 ? 활용해서 더 단순하게 해서 풀거나 하는 것도 빨리 익숙해지고싶다
⏲️ 10 : 00 ~ 10 : 20
이번주에 대해서 설명해주심
⏲️ 공부 시간 10 : 30 ~ 11 : 40
데이터 타입 변환
숫자 자료형 끼리는 to데이터타입() 활용해서 변환
문자형을 숫자형으로 바꿀때에는 Integer.parseInt(str변수명) , str변수명.toDouble()
객체 자료형간의 변환(업캐스팅 / 다운캐스팅) ❗
상속관계에서 가능
자료형 타입 확인 ❗
is 데이터타입
여러 인스턴스 리턴 가능 ❗
Pair , Triple 키워드 사용
자기 자신의 객체를 전달해서 효율적인 처리 가능 ❗
Scope Function을 사용
기존클래스에 쉽게 메서드를 추가하는 것
원하는 메서드가 있지만 내가 설계한 클래스가 아닐 때 외부에서 메서드를 관리함
여러개의 작업을 순차적으로만 진행하면 다른 작업을 하지못하고 앱이 멈추는 등의 문제가 발생할 수있다.
동기적 프로그래밍
순서대로 하나의 작업씩 수행하는 것
앞선 작업에 영향을 받음
앞선 작업이 끝나지 않으면 뒷 작업이 영원히 수행되지않음
꼭 동기적으로 실행하지 않아도 되는 기능은 비동기적으로 실행하는것이 좋음
비동기적 프로그래밍
요청을 보내고 결과값을 받을 때까지 멈추지 않고 또 다른 일을 수행함
로직을 동시에 실행할 수 있도록 도와줌
프로그램은 하나의 메인 쓰레드(실행흐름)가 있다.
하나의 메인 쓰레드는 fun main() 함수를 의미함
실습 프로그램은 메인쓰레드 위에서 로직을 실행해서 동시 처리가 불가능했음
별도의 자식 쓰레드를 생성해서 동시에 로직을 실행할 수 있다.
코틀린에서는 thread 키워드로 쓰레드를 생성할 수 있다.
프로세스 : 메모리에 프로그램이 올라가서 실행되는 것
쓰레드 : 프로세스보다 더 작은 단위
쓰레드가 생성되면 독립된 메모리 영역인 STACK을 가진다.
쓰레드를 사용하는 이유
몬스터공격, 체력줄어들고, 효과음이 동시에 발생해야함
경마 프로그램의 말들은 동시에 출발해서 경쟁해야함
즉 동시에 진행되어야하는 것들이 있음
쓰레스보다 경량화된 동시처리 기능을 제공하고
운영 체제에 깊이있는 지식이 없어도 비동기 프로그래밍을 할 수 있게 해줌
최적화된 비동기 함수를 사용
하드웨어 자원의 효율적인 할당을 가능하게함
안정적인 동시성, 비동기 프로그래밍을 가능하게함
코루틴이 쓰레드보다 더욱 가볍게 사용가능
로직들을 협동해서 실행하자는것이 목표이고 구글에서 적극 권장한다.
코루틴은 빌더와 함께 사용한다.
launch 와 async 빌더를 많이 사용한다.
lauch는 결과값이 없는 코루틴 빌더를 의미
launch는 Job 객체로 코루틴을 관리함
async 는 결과값이 있는 코루틴이고 Deffered 타입으로 값을 리턴한다.
코루틴은 스코프로 범위를 지정할 수 있다.
GlobalScope : 앱이 실행된 이후에 계속 수행되어야할 때
CoroutineScope: 필요할 때만 생성하고 사용후에 정리가 필요
코루틴을 실행할 쓰레드를 Dispatcher로 지정
코루틴을 실행할 쓰레드를 Dispatcher로 지정할 수 있다.
Dispatchers.Main : UI와 상호작용하기 위한 메인 쓰레드
Dispatchers.IO : 네트워크나 디스크 I/O 작업에 최적화 되어있는 쓰레드
Dispatchers.Default : 기본적으로 CPU 최적화 되어있는 쓰레드
안드로이드에서는 특히 Dispatcher간의 변환을 해야하는 작업을 고려해야함
코루틴은 여러개 사용할 수 있다.
코루틴의 결과값을 리턴 받을 수도 있다.
코루틴의 결과값을 리턴 받을 때는 await이라는 일시중단이 가능한 코루틴에서 실행한다.
둘다 동시성 프로그래밍을 위한 기술
동시성 프로그래밍은 컨텍스트 스위칭이 중요하다.
차이점
쓰레드
Blocking
쓰레드 A가 쓰레드 B의 결과를 기다리고 있으면 쓰레드 A는 블로킹 상태.
A는 B의 결과가 나올 때까지 해당 자원을 사용하지 못함
스케줄링
쓰레드 A에서 쓰레드 B의 결과가 필요한 작업을 할 때
쓰레드 A는 블로킹되고, 쓰레드 B로 프로세스 스위칭이 일어나서 B에서 할 일을 하게됨
B의 결과가 나오면 다시 쓰레드 A로 스위칭해서 결과를 반환함
이 때 쓰레드 C , 쓰레드 D 는 멈추지 않고 각각 동시에 실행됨.
컴퓨터 운영체제 입장에서 이럴 때 각 Task를 쪼개서 얼마나 수행할지가 중요한데, 어떤 쓰레드를 먼저 실행할지 결정하는 행위를 스케줄링 이라고함.
코루틴
하나의 쓰레드에서 다수의 코루틴을 수행함
커널의 스케줄링을 따르는 컨텍스트 스위칭을 수행하지 않음
일단 강의는 한번 들었는데
비동기 프로그래밍은 아예 처음 접하는 개념이라 뭔소린지 잘 모르겠다.
따로 비동기 프로그래밍을 찾아서 더 공부하고 쓰레드랑 코루틴에 대한 개념이 잡히면
TEXT RPG 제작하는 실습을 진행해봐야겠당.
⏲️ 공부 시간
12 : 00 ~ 13 : 00
14 : 00 ~ 17 : 00
공부계기
5주차 강의 학습하던 중에 쓰레드와 코루틴의 개념을 처음 접했는데,
강의 내용만으로는 정확히 이해가 안가서 따로 더 공부해야할 것 같다고 생각함.
공부 내용
코틀린에서 비동기 프로그래밍을 구현할 수 있는 두가지 방법인
쓰레드와 코루틴에 대해서 공부
느낀점
공부 할수록 미궁에 빠지는 느낌임
뭐가 너무 많다. 이거 어떻게 이해하지?!!?!?!
뭐지??? 음.. 음..이론만 해서 그런건가???
실습을 해보면 이해가 되려나???
근데 너무 알아야할게 많은디??
정리한 걸 계속 읽어볼수록 더 혼란스러워져버림 ㅋㅋ
요즘 공부하는 것들이 다그런거같음 오히려 이해하려고 공부할수록 멀어져버림..
나한테 냄새나냐고;;
일단은 어느정도 정리했는데 이해가안되니깐
또 다시 강의에서 했던 실습 코드를 보면서
실제 예시를 봐야할듯?
궁금증
중요한 개념 같은데 후에 쓰레드와 코루틴에 대한 강의나 설명이 따로 더 있는지?
만약에 없다면 쓰레드와 코루틴에 대해 어느정도까지 이해를 해야되는건지?
공부하다보니까 정확히 이해하려면 JVM 이나 OS 에대해서도 알아야되는거아닌가싶어버림.. 이해가안되는게너무많아용
⏲️ 공부시간
17 : 00 ~ 18 : 00
20 : 00 ~
아니 원래 잘되던게 갑자기
왜인지 상속받는 클래스가 final 이라면서 상속이 안돼서 1시간 헤맸음
분명히 open키워드 붙여놨는데 이새끼 왜 final이라는거지? 하고
그냥 복붙한코드가 안될일이 뭐가있냐고 분기탱천해서 컴퓨터 뿌실뻔했는데
알고보니까 내가 처음부터 하려고 복붙하다가 잘못해서 package 주소를 지워버린 거였음 ㅎㅎㅎ
항상 그렇듯이 때려부술건 컴퓨터가아니라 내 대가리였다는 해피엔딩~~~!
이거때매 밥시간에 밥도 안먹었는데
결과적으로 멍청한 몸뚱아리에 벌을 잘 준 셈이 된거라서 아주 현명했던것같당~
머리가나쁘면 몸은 고생해야지
아무튼 실습 코드 공부를 다시 했는데,
다시한번 공부해야할 부분들을 알 수 있었음
와 개어렵다 볼게 한두개가 아니네 ㅎㅎ
일단 오늘 내가 뭘 모르는지 체크했으니깐 내일 모르는 부분에 대한 강의 한번씩 다시 보고, 그래도 모르겠으면 따로 더 공부하기!
⏲️ 공부시간 19 : 00 ~ 20 : 00
특강 내용 정리
으어.. 힘들엉
슬슬 어려운것들 나오니까 바로바로 이해도안되고
붙들고 몇시간 있어도 이해를 다 못하고~~ 일단 넘기고 다른거 또 해야되고 하는데
이러다 또 나중에 갑자기 딱 깨달음이 오면 더 신나겠징~~~