목록전체 글 (140)
시배's Android
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FWzu3/btsEa71lt7n/4URHeLC6VxKyZ5LcxkVKp0/img.png)
프로젝트에서 Naver Map을 사용하여 지도 관련 Feature를 구현하여야 했습니다. 저희 프로젝트는 Compose로 작성되어 있었기 때문에 Compose용 Naver Map을 사용할 수 있는 라이브러리를 찾아 보았고, 안성용님께서 진행중이신 오픈소스를 찾을 수 있었습니다. https://github.com/fornewid/naver-map-compose GitHub - fornewid/naver-map-compose: NAVER Map Android SDK for Jetpack Compose 🗺 NAVER Map Android SDK for Jetpack Compose 🗺. Contribute to fornewid/naver-map-compose development by creating an ac..
fun main(){ val name = "si8ae" val welcome = "Hello, $name" println(welcome) } Kotlin에서는 문자열 템플릿을 사용하여 문자열을 쉽게 결합할 수 있습니다. 위 코드와 같이 name이라는 변수를 문자열 템플릿을 이용하여 welcome 변수를 초기화하면 자바에서는 어떻게 구현이 되는지 살펴보겠습니다. public static final void main() { String name = "si8ae"; String welcome = "Hello, " + name; System.out.println(welcome); } 자바에서는 단순한 문자열 연결(+)로 변환되는 것을 확인할 수 있습니다.
기본 요소 : 함수와 변수 함수를 선언할 때 fun 키워드를 사용한다. 파라미터 이름 뒤에 그 파라미터의 타입을 쓴다. 함수를 최상위수준에 정의할 수 있다. (자바와 달리) 꼭 클래스 안에 함수를 넣어야 할 필요가 없다. 배열도 일반적인 클래스와 마찬가지다. 코틀린에는 자바와 달리 배열처리를 위한 문법이 따로 존재하지 않는다. System.out.println 대신에 println이라고 쓴다. 코틀린 표준 라이브러리는 여러 가지 표준 자바 라이브러리 함수를 간결하게 사용할 수 있게 감싼 래퍼를 제공한다. 최신 프로그래밍 언어 경향과 마찬가지로 줄 끝에 세미콜론(;)을 붙이지 않아도 좋다. 함수 fun max(a: Int, b: Int): Int { return if (a > b) a else b } fu..
단순히 스레드를 죽이면 연결을 닫고 자원을 해제하는 기회가 없기 때문에 최악의 취소 방식입니다. 기본적인 취소 Job 인터페이스는 취소하게 하는 cancel 메서드를 가지고 있습니다. 호출한 코루틴은 첫 번째 중단점에서 잡을 끝냅니다. 잡이 자식을 가지고 있다면, 그들 또한 취소됩니다. 하지만 부모는 영향을 받지 않습니다. 잡이 취소되면, 취소된 잡은 새로운 코루틴의 부모로 사용될 수 없습니다. cancel 함수의 인자로 사용되는 예외는 반드시 CancelationException의 서브타입이어야 합니다. cancel이 호출된 뒤 다음 작업을 진행하기 전에 취소 과정이 완료되는 걸 기다리기 위해 join을 사용하는 것이 일반적입니다. join을 호출하지 않으면 경쟁상태가 될 수도 있습니다. 잡이 취소되..
자식은 부모로부터 컨텍스트를 상속받습니다. 부모는 모든 자식이 작업을 마칠 때까지 기다립니다. 부모 코루틴이 취소되면 자식 코루틴도 취소됩니다. 자식 코루틴에서 에러가 발생하면, 부모 코루틴 또한 에러로 소멸합니다. Job 이란 잡은 수명을 가지고 있으며 취소 가능합니다. 잡은 인터페이스이긴 하지만 구체적인 사용법과 상태를 가지고 있다는 점에서 추상 클래스처럼 다룰 수도 있습니다. 잡의 수명은 상태로 나타냅니다. Active 상태에서는 잡이 실행되고 코루틴은 잡을 수행합니다. 대부분의 코루틴은 Active 상태로 시작됩니다. 지연 시작되는 코루틴만 New 상태에서 시작됩니다. 실행이 완료되면 상태는 Completing으로 바뀌고 자식들을 기다립니다. 자식들의 실행도 모두 끝났다면 잡은 마지막 상태인 Co..
data class Person( val age : Int, val name : String ) 위 코드는 'Person'이라는 이름의 Data Class를 선언한 것입니다. 이 클래스는 두 개의 프로퍼티를 가지고 있습니다: 'age'와 'name'. 이제 이 코드를 자바로 디컴파일하면 어떤 형태로 변환되는지 살펴보겠습니다. @Metadata( mv = {1, 9, 0}, k = 1, d1 = {"\u0000 \n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u000b\n\u0002\u0010\u000b\n\u0002\b\u0004\b\u0086\b\u0018\u00002..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kFyI8/btsDZLpL8Xd/RawKwoTOW8WKyYrzgB8rQ0/img.jpg)
코틀린 맛보기 data class Person( val name: String, val age: Int? = null ) name과 age라는 프로퍼티가 들어간 간단한 데이터 클래스를 정의한다. age 프로퍼티의 디폴트 값은 null이다. 코틀린의 주요 특성 정적 타입 지정 언어 자바와 마찬가지로 코틀린도 정적 타입 지정 언어다. 정적 타입 지정이라는 말은 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻이다. 이런 점은 다른 동적 타입 지정 언어와는 다르다. JVM에서는 그루비(Groovy)나 JRuby가 대표적인 동적 타입 지정 언어다. 동적 타입 지정 언어에서는 타입과 관계없이 모든 값을 변수에 넣을 ..
CoroutineContext는 원소나 원소들의 집합을 나타내는 인터페이스입니다. Job, CoroutineName, CoroutineDispatcher와 같은 Element 객체들이 인덱싱된 집합이라는 점에서 맵이나 셋과 같은 컬렉션이랑 개념이 비슷합니다. CoroutineContext의 모든 원소가 CoroutineContext로 되어 있습니다. CoroutineName이나 Job은 CoroutineContext 인터페이스를 구현한 CoroutineContext.Element를 구현합니다. CoroutineContext는 컬렉션과 비슷하기 때문에 get을 이용해 유일한 키를 가진 원소를 찾을 수 있습니다. 다른 키를 가진 두 원소를 더하면 만들어진 컨텍스트는 두 가지 키를 모두 가집니다. Corout..