본문 바로가기
개발

TIL: 20231212

by kks950115 2023. 12. 12.
728x90

숫자들끼리는 toInt()나 toShort(),toDouble()을 입력해주면 변환된다.
문자를 숫자로 바꾸는 법은 Integer.parseInt(str), double은 str.toDouble()이다.

업캐스팅 , 자식객체에서 부모객채로 생성하는 것. 일반적으로 업캐스팅이 많이 쓰인다. 
다운캐스팅, 부모객채를 자식객체로 생성하는 것. 다운캐스팅은 자식이 부모의 속성을 가져야하기 때문에 불가능함.

변수 is type -> is로 타입을 확인할 수 있다.true나 false를 반환한다.

pair -> 보통 메소드는 하나의 객체만 반환한다. pair를 사용하면 2개의 객체를 반환할 수 있 다. 물론 콜렉션 같은 개체로 여러값을 전달하는 경우가 있긴 하다. pair(값,값) 형태로 변수에 담아서 반환하면 된다.
불러올 때는 pair가 담긴 변수.firt , 변수,second 또는 변수[0], 변수[1] 형태로 불러오면 된다.
triple -> pair가 2개라면 이건 3개를 반환한다. 사용법도 pair와 비슷하다. 세번째는 third, 변수[2]로 읽어낼 수 있다.

let {} -> {} 안에서 it는 자기 자신을 가리킨다. 자신을 전달하며 수행된 결과를 반환한다. 
with(변수){} -> {} 안에서 this는 자기 자신을 가리킨다. 자신을 전달하고 코드를 수행한다. 반환값이 없고 코드를 수행할 뿐이다. this는 생략할 수 있으므로 null이 아닐 때만 사용하는게 좋다.
also {} -> {} 안에서 it는 자신을 전달하고 {}안에 코드수행 후, 코드가 수행된 자기 자신을 반환한다.
apply {} -> {} 안에서 this는 자신을 가리킨다. 자신을 전달하며 객체를 반환한다. 주로 객체의 상태를 변화시키고 바로 저장하고 싶을 때 사용한다.

run {} -> 객체에서 호출하지 않으면 {} 안에 코드를 수행하고 결과를 반환한다.
  객체에서 호출하는 경우 with와 달리 null 체크가 가능하다. with보다 run을 권장하는 이유디ㅏ.
var student = Student("참새", 10)
student?.run {
        displayInfo()
    }

코드를 짜다보면 {}안에서 또 다른 수신객체가 나올수도 있다. 이 경우에는 이름을 다르게 해야한다. 이름을 똑같이 해버리면 구분을 못하게 되기 때문이다. 
{it-> ....  {it2-> ...}   } 이런 식으로

확장함수 -> 클래스를 바꿀 수 없을 때 메소드를 추가하고 싶은 상황에서 쓸 수 있다.

동기 프로그래밍 -> 요청을 보내고 결과값을 받을 때까지 다른 작업을 멈추고 그 작업만 한다.
비동기 프로그래밍 -> 요청을 보내고 결과값을 받을 때까지 '다른 작업을 멈추지 않고' 그 작업도 한다.

우리가 컴퓨터에서 프로그램을 더블클릭하면 프로세스 1개가 생긴다. 프로세스는 안에서 작업을 쓰레드 단위로 처리하게 된다. 메인 쓰레드가 있고, 필요하다면 쓰레드를 더 생성해서 작업을 시킬 수 있다. 각 쓰레드마다 STACK 이라는 메모리 영역을 차지한다. 쓰레드가 많아질수록 차지하고 있는 STACK의 영역이 점점 많아지는 것이다. 이 쓰레드는 작업을 동시에 처리하기 위해 필요하다. 
가령 게임을 할 때 몬스터를 사냥할 때, 효과음이 나오고 , 체력이 줄어드는 작업들이 동시에 일어나야한다. 컴퓨터는 한개의 작업씩밖에 처리를 하지 못하기 때문에 쓰레드를 여러개 만들어서 각각의 작업을 처리하게 만들면 동시에 일어나는 것처럼 보인다.

코루틴
쓰레드보다 더 간편하게 비동기 프로그래밍을 하기 위해 개발됨. (동시성 프로그래밍)
로직들을 협동해서 실행하자는게 목표고 구글에서 적극 권장함.
수업에서 테스트한 환경은 main 쓰레드가 종료되면 끝이기 때문에 어떻게 돌아가는지 실제로 볼 수가 없었다.
쓰레드 하나를 여러개의 코루틴으로 나눠서 실행하는 것이기 때문에 쓰레드를 디스패처로 지정해야한다. 이 때 용도에 맞는 디스패처를 골라야 한다.
- Dispatchers.Main: UI와 상호작용하기 위한 메인쓰레드
- Dispatchers.IO: 네트워크나 디스크 I/O작업에 최적화되어있는 쓰레드
- Dispatchers.Default: 기본적으로 CPU최적화되어있는 쓰레드 

쓰레드 
작업 하나하나의 단위: 쓰레드
동시성 보장수단: 콘텍스트 스위칭 (각각의 작업이 따로 실행되고 있을 때, A작업을 하고 있을 때에 B작업이 필요하다면 B로 가서 작업을 완료한 후에 A로 돌아온다. 이 와중에도 C,D 역시 멈추지 않고 돌아가고 있다. 적재적소에 필요한 쓰레드를 조율하는 것으로 동시성을 보장한다. )
블로킹 : 작업 A 가 작업 B의 결과를 기다리고 있을 때, 작업 A를 블로킹 상태라고 한다. A는 작업 B의 결과가 나올 때까지 작업이 정지해있는다.

코루틴
작업 하나하나의 단위: 코루틴 오브젝트
객체이기 때문에 JVM Heap 메모리에 저장된다.
동시성 보장수단:  Programmer Switching (쓰레드처럼 콘텍스트 스위치가 없다. 한 쓰레드 안에서 잘개 쪼개서 작동하는 방식이기 때문에 스위칭을 하지 않고도 동시성을 보장할 수 있다.)
Suspend(Non-Blocking): 오브젝트 1이 오브젝트 2의 결과를 기다릴 때, 오브젝트 1은 suspend 상태로 바뀐다. 이 때 쓰레드는 유지된다. 왜냐면 오브젝트1,2는 여전히 쓰레드 안에서 처리되고 있기 때문이다. 쓰레드를 잘게

*** 코루틴은 쓰레드를 대체하는 기술이 아니라 한개의 쓰레드를 효율적으로 사용하는 기술이다.

728x90
반응형

'개발' 카테고리의 다른 글

TIL : 20231214  (0) 2023.12.14
TIL : 20231213  (0) 2023.12.13
코틀린: readLine/readln 으로 날짜만 입력받기  (1) 2023.12.11
프로그래머스 :공원 산책  (1) 2023.12.11
TIL : 코틀린 기초  (1) 2023.12.11

댓글