[내배캠 Android 4기] TIL 0611

오리너구리·2024년 6월 11일
0

TIL

목록 보기
30/48
post-thumbnail

오늘 계획

  • 코드카타 35
  • 이번주 발제
  • 코틀린 기초 문법 5강
  • 코틀린 기초 문법 실습 코드 다시 복습
  • 이종범 튜터님 알고리즘 특강

코드카타

⏲️ 공부시간 09 : 05 ~ 09 : 30

오늘 잠을 계속 설쳐서 몬스터를 마시고있긴한디 뇌가 맹하당~

문제가 길어서 처음에 보고 쫄았는데 안어려워서 쉽게 풀었음

람다식 ? 활용해서 더 단순하게 해서 풀거나 하는 것도 빨리 익숙해지고싶다

https://velog.io/@orinugoori_art/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-CODEKATA-35-%EB%B6%80%EC%A1%B1%ED%95%9C-%EA%B8%88%EC%95%A1-%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0


금주 발제

⏲️ 10 : 00 ~ 10 : 20

이번주에 대해서 설명해주심

  1. 이번주 과제 : 키오스크 만들기
  2. 계산기 과제 피드백 내일 주심
  3. 이번주 넘어서 다시 기초문법때문에 막히는 일 없게 이번주에 열심히 다 이해해놓기

코틀린 문법 종합반 5주차 강의 학습

⏲️ 공부 시간 10 : 30 ~ 11 : 40

코틀린의 유용한 기능

  1. 데이터 타입 변환

    숫자 자료형 끼리는 to데이터타입() 활용해서 변환

    문자형을 숫자형으로 바꿀때에는 Integer.parseInt(str변수명) , str변수명.toDouble()

  2. 객체 자료형간의 변환(업캐스팅 / 다운캐스팅)

    상속관계에서 가능

  3. 자료형 타입 확인

    is 데이터타입

  4. 여러 인스턴스 리턴 가능

    Pair , Triple 키워드 사용

  5. 자기 자신의 객체를 전달해서 효율적인 처리 가능

    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이라는 일시중단이 가능한 코루틴에서 실행한다.

쓰레드와 코루틴

둘다 동시성 프로그래밍을 위한 기술

동시성 프로그래밍은 컨텍스트 스위칭이 중요하다.

차이점

쓰레드

  • 작업 하나하나의 단위
  • 각 쓰레드가 독립적인 Stack 메모리를 가진다.
  • Context Switching을 통해서 동시성 보장

Blocking

쓰레드 A가 쓰레드 B의 결과를 기다리고 있으면 쓰레드 A는 블로킹 상태.

A는 B의 결과가 나올 때까지 해당 자원을 사용하지 못함

스케줄링

쓰레드 A에서 쓰레드 B의 결과가 필요한 작업을 할 때

쓰레드 A는 블로킹되고, 쓰레드 B로 프로세스 스위칭이 일어나서 B에서 할 일을 하게됨

B의 결과가 나오면 다시 쓰레드 A로 스위칭해서 결과를 반환함

이 때 쓰레드 C , 쓰레드 D 는 멈추지 않고 각각 동시에 실행됨.

컴퓨터 운영체제 입장에서 이럴 때 각 Task를 쪼개서 얼마나 수행할지가 중요한데, 어떤 쓰레드를 먼저 실행할지 결정하는 행위를 스케줄링 이라고함.

코루틴

  • 작업 하나하나의 단위 : Coroutine Object
  • 여러 작업에 각각 오브젝트를 할당하고, 코루틴 오브젝트도 객체이기 때문에 JVM Heap 에 적재한다.
  • Programmer Switching을 통해 동시성 보장 프로그래머가 소스코드를 통해 스위칭시점을 정함 (OS는 관여 x) Suspend (Non-Blocking) Object 1이 Object 2의 결과를 기다릴 때 Object 1의 상태는 Suspend로 바뀜 Suspend로 바뀌어도 Object 1의 쓰레드는 유효함 그래서 Object 2 도 Object 1 과 동일한 쓰레드에서 실행된다.

하나의 쓰레드에서 다수의 코루틴을 수행함

커널의 스케줄링을 따르는 컨텍스트 스위칭을 수행하지 않음

일단 강의는 한번 들었는데

비동기 프로그래밍은 아예 처음 접하는 개념이라 뭔소린지 잘 모르겠다.

따로 비동기 프로그래밍을 찾아서 더 공부하고 쓰레드랑 코루틴에 대한 개념이 잡히면

TEXT RPG 제작하는 실습을 진행해봐야겠당.


비동기 프로그래밍 공부

⏲️ 공부 시간

12 : 00 ~ 13 : 00

14 : 00 ~ 17 : 00

공부계기

5주차 강의 학습하던 중에 쓰레드와 코루틴의 개념을 처음 접했는데,

강의 내용만으로는 정확히 이해가 안가서 따로 더 공부해야할 것 같다고 생각함.

공부 내용

코틀린에서 비동기 프로그래밍을 구현할 수 있는 두가지 방법인

쓰레드와 코루틴에 대해서 공부

느낀점

공부 할수록 미궁에 빠지는 느낌임

뭐가 너무 많다. 이거 어떻게 이해하지?!!?!?!

뭐지??? 음.. 음..이론만 해서 그런건가???

실습을 해보면 이해가 되려나???

근데 너무 알아야할게 많은디??

정리한 걸 계속 읽어볼수록 더 혼란스러워져버림 ㅋㅋ

요즘 공부하는 것들이 다그런거같음 오히려 이해하려고 공부할수록 멀어져버림..

나한테 냄새나냐고;;

일단은 어느정도 정리했는데 이해가안되니깐

또 다시 강의에서 했던 실습 코드를 보면서

실제 예시를 봐야할듯?

궁금증

  1. 중요한 개념 같은데 후에 쓰레드와 코루틴에 대한 강의나 설명이 따로 더 있는지?

  2. 만약에 없다면 쓰레드와 코루틴에 대해 어느정도까지 이해를 해야되는건지?

    공부하다보니까 정확히 이해하려면 JVM 이나 OS 에대해서도 알아야되는거아닌가싶어버림.. 이해가안되는게너무많아용


코틀린 문법 강의 Text RPG 실습 코드 공부하기

⏲️ 공부시간

17 : 00 ~ 18 : 00

20 : 00 ~

아니 원래 잘되던게 갑자기

왜인지 상속받는 클래스가 final 이라면서 상속이 안돼서 1시간 헤맸음

분명히 open키워드 붙여놨는데 이새끼 왜 final이라는거지? 하고

그냥 복붙한코드가 안될일이 뭐가있냐고 분기탱천해서 컴퓨터 뿌실뻔했는데

알고보니까 내가 처음부터 하려고 복붙하다가 잘못해서 package 주소를 지워버린 거였음 ㅎㅎㅎ

항상 그렇듯이 때려부술건 컴퓨터가아니라 내 대가리였다는 해피엔딩~~~!

이거때매 밥시간에 밥도 안먹었는데

결과적으로 멍청한 몸뚱아리에 벌을 잘 준 셈이 된거라서 아주 현명했던것같당~

머리가나쁘면 몸은 고생해야지

아무튼 실습 코드 공부를 다시 했는데,

다시한번 공부해야할 부분들을 알 수 있었음

  1. 부생성자에 -어쩌구 이렇게 언더바 붙이는거 무슨뜻인지 기억안남
  2. Any 타입을 스스로 설명못하겠음
  3. 예외처리 하는 try catch 문 이렇게 넘기면 나중에 써야할 때 활용 못할 거같음
  4. 늦은 초기화 개념 자체는 알고있는데, 활용을 못할 거같음
  5. companion object 개념 이해 부족한듯 이거 진짜 주석조차 이해못함
  6. getInstance()함수가 왜 있어야되는건지 이유를 모름
  7. 스코프 함수도 이해못함
  8. 쓰레드쪽도 모르겠음

와 개어렵다 볼게 한두개가 아니네 ㅎㅎ

일단 오늘 내가 뭘 모르는지 체크했으니깐 내일 모르는 부분에 대한 강의 한번씩 다시 보고, 그래도 모르겠으면 따로 더 공부하기!


알고리즘 생존 가이드 특강 - 이종범 튜터님

⏲️ 공부시간 19 : 00 ~ 20 : 00

특강 내용 정리

  • 지금 우리가 푸는 알고리즘 문제들은 취업준비용은 아님
  • 조건문 반복문 잘쓰면 나가도됨
  • 컴퓨팅적 사고를 길러야함
  • 코딩을 잘하려면 1. 기본 개념을 이해하고 2. 실습과 연습을 많이 해보고 3. 논리적 사고력을 개발해야함
  • 코딩은 단순히 코드를 작성하는 기술이아니라 문제를 해결하는 과정이다.
  • 코틀린 기본 문법 정리
  • 연습 문제 잔뜩 주심

TMI

으어.. 힘들엉
슬슬 어려운것들 나오니까 바로바로 이해도안되고
붙들고 몇시간 있어도 이해를 다 못하고~~ 일단 넘기고 다른거 또 해야되고 하는데
이러다 또 나중에 갑자기 딱 깨달음이 오면 더 신나겠징~~~

profile
오리너구리입니다

0개의 댓글