목록전체 글 (114)
Hello, Android!
- runBlocking runBlocking은 새로운 코루틴을 실행하고, 해당 코루틴이 완료되기 전까지 현재 스레드를 블로킹 한다 위 예제에서는 메인 함수 자체가 코루틴에서 실행이 된다 블로킹으로 움직이기때문에 내부의 코루틴이 종료될때까지 자동으로 블로킹한다 그렇기때문에 별도로 내부 코루틴이 종료될때까지 기다리게 하지않아도 아래와 같은 결과가 나온다 만약 코루틴의 작업이 완료되는것을 기다리기 위해서는 Job객체의 join() 함수를 사용한다 main내부의 두번째 코루틴에서 job.join으로 인해 print in main 이 출력되고 첫번째 코루틴이 끝날때까지 기다린 뒤 두번째 내부 코루틴이 실행된다 - async 함수의 시작 시점 조절 async함수는 context, start, block 세개의 매..
프로세스나 스레드는 진행중인 작업을 중단하고 다른 작업을 실행하기 위한 문맥교환이 발생할때 많은 비용이 발생한다 하지만 코루틴은 문맥교환 없이 일시중단하여 비용이 적게 발생하는 장점이 있다 - 라이브러리 추가 코루틴을 사용하기 위해서는 라이브러리를 추가해야한다 인텔리J 에서 라이브러리를 추가하기 위해서는 File -> Project Structure -> Libraries에서 + 버튼을 눌러 From Maven 에서 Kotlinx 를 검색하여 org.jetbrains.kotlinx:kotlinx-coroutines-core:버전 을 선택하여 라이브러리를 다운받으면 된다 - launch launch를 통해 코루틴 블록을 만드는 것을 코루틴 빌더 생성 이라고 한다 launch는 현재 스레드를 차단하지 않고 ..
어떠한 작업을 하기 위해서 컴퓨터는 프로세스를 만들어 작업을 수행한다 과거에는 프로그램에서 단일 프로세스만으로 충분히 작업이 가능하였지만 한 프로그램 내에서 여러 작업을 동시에 수행해야 하는 경우 여러개의 프로세스를 만들었다 새로운 프로세스를 생성하는것은 비용적인 측면에서도 효율이 좋지 않고 프로세스들 사이에 정보 교환이 어려웠다 이러한 문제를 해결하기 위해 프로세스보다 작은 단위인 스레드가 나왔다 하나의 프로세스 내에서 여러 스레드를 만들어 작업을 수행할수 있으며 메모리를 공유하기때문에 정보 교환도 손쉽게 가능하며 스레드의 생성과 삭제도 적은 비용으로 가능하게 되었다 코틀린에서도 스레드 사용이 가능하며 당연히 자바의 스레드 클래스를 코틀린에서도 사용이 가능하다 main함수에서 생성한 첫번째 스레드는 T..
파일을 읽어올때는 java.io 의 FileReader 클래스를 활용한다 readText는 텍스트를 메모리에 가져온 뒤 그 내용을 반환한다 - InputStream, BufferedReader 파일 읽기또한 쓰기에서처럼 확장함수 use를 사용하면 close를 자동으로 하기때문에 더욱 간단한 코드 작성이 가능하다 inputStream의 bufferedReader를 사용하고 있는데 자바에는 inputStream에 bufferedReader가 존재하지 않는다 이는 kotlin.io 패키지에서 확장함수로 추가되었다 bufferedReader를 사용하는 경우에도 동일하게 사용이 가능하다 파일을 읽어올때 줄 단위로 처리하고싶은 경우 useLines를 사용하면 된다 - copyTo copyTo함수는 이름 그대로 특정..
I/O는 input output으로 데이터를 필요로 하는곳으로 보내고 파일에 저장하거나 읽어올수 있다 - 표준 입출력 출력의 대표로는 우리가 자주 사용하던 print함수가 있다 이는 표준 출력이며, 내부적으로는 자바의 System.out.println()을 호출한다 표준 입력으로는 readLine() 함수가 있으며, 입력받은 데이터를 String으로 반환한다 readLine()는 String타입으로 반환하지만, int로 바로 캐스팅을 할려면 readLine()!!.toInt() 혹은 readLine()?.toInt() 의 형태로 사용하면 된다 여기서 !! 이나 ? 를 사용하여 null이 될수없게 하거나 null을 허용하는 것은 입력에 실패하는 경우 null 가능성이 생기기 때문이다 - 파일 입출력 파일을..
DSL(Domain Specific Languages) 이란 도메인 특화 언어로써 특정 애플리케이션, 특정 분야에 특화된 언어를 의미한다. 대표적으로 오로지 데이터베이스만을 다루며, DB에 접근하기 위한 SQL이 있다. 일반적인 프로그래밍 언어와 DSL의 차이점은 프로그래밍 언어와 비교하여 덜 복잡하다는 것이다. 대부분의 경우 DSL은 해당 DSL의 대상 분야에 전문적인 분들이 사용하도록 제작된다. 이런 DSL의 특성을 이용하여 화면 레이아웃을 단순화한 DSL, 웹 접근을 쉽게하는 DSL등 많은 프레임 워크가 있다. 기존에 제작되어있는 프레임 워크를 사용하는것도 가능하지만, 코틀린에서는 람다식 확장함수 등을 사용하면 DSL 형태의 언어를 만들 수 있다. 예를들어 위와 같이 도서정보를 관리하는 DSL을 만..
코틀린 표준함수에는 if문과 상당히 유사하게 보이는 takeif() 함수와 takeUnless() 함수가 있다 - takeif() 코틀린에서 설명하는 takeif()를 보면 객체(T)의 확장함수이기때문에 .takeif()의 형태로 사용이 가능하다 takeif()의 반환값은 객체를 predicate함수에 전달하였을때 true인 경우 this를 반환하며 false인 경우 null을 반환한다 즉 지금까지의 범위지정 함수들과 유사하게, 람다식의 결과가 true이면 this가 반환되고 false이면 null이 반환된다 - takeUnless() takeUnless()는 takeIf()와 전반적으로 동일하지만, 반대로 predicate의 결과가 false일때 this 객체를 반환하고 true일때 null을 반환하는..
객체를 사용한 이후, 필요없는 객체를 닫아야하는 경우가 있다 이때 use()함수를 사용하면 예외 발생과 상관없이 항상 close() 호출을 보장한다 원형의 T : Closeable? 이며 닫힐수 있는 객체를 지정해야 한다 대표적인 닫힐수 있는 객체로는 파일처리 객체가 있다 PrintWriter는 매개변수로 받는 경로에 데이터를 작성한다 이때 use에서는 앞에서 설정된 경로를 it으로 받아 데이터를 작성하고 user가 파일을 닫는다 readData함수는 읽을 파일의 경로를 받아 파일 객체를 생성한다 use에서는 it으로 해달 파일의 내용을 읽어낸 뒤 반환을 하고 다시 파일을 닫아준다 만약 use를 사용하지 않는다면 직접 close를 다 해야만 하며 파일 내용을 반환하는 경우 readData함수처럼 파일 내..