문자열 문자열 템플릿 import java.util.Date fun main() { val name = readLine() println("Hello, $name!\n, Today is ${Date()}") } ${}의 중괄호 사이에 코틀린 식을 넣으면 문자열에 식을 넣을 수 있다. 간단한 변수 참조인 경우 중괄호의 생략이 가능하다. 2. 로우 문자열 val message = """ Hello, &name! Today is ${Date()} """.trimIndent() 큰따옴표 세 개로 둘러싸여 있는 로우 문자열을 사용하면 이스케이프 시퀀스를 사용하지 않고 문자열을 작성할 수 있다. 3. 문자열 비교 자바 코틀린 ==와 != 연산자는 참조 동등성을 비교한다. 실제 문자열 내용을 비교하려면 equals(..
변수 val timeInSeconds = 15 val 키워드 한번 초기화하면 다시는 값을 대입할 수 없는 불변 변수를 정의하는 키워드. 자바의 final 변수와 비슷하다. 2. var 키워드 val과 반대로 가변 변수를 정의할 때 사용하는 키워드. 3. 타입 추론 변수 타입을 지정하지 않아도 컴파일러가 코드의 문맥에서 타입을 도출해주는 기능. 4. 변수 타입을 명시하는 경우 val text: String text = "Hello!" 초깃값을 생략하고 다른 문장에서 변수를 초기화하는 경우 변수 타입을 명시해야 한다. 기본 타입 1. 타입 정수 타입: Byte, Short, Int, Long 실수 타입: Float, Double 문자 타입: Char 논리 타입: Boolean 2. 원시 타입, 참조 타입 원..
조건문 if 문 fun max(a: Int, b: Int) = if (a > b) a else b 자바의 삼항 연산자가 없는 대신 if 문을 식으로 사용할 수 있다. 2. when 문 if 문을 중첩하여 사용하기 보다 when 문을 통해 조건을 순차적으로 검사한다. fun hexDigit(n: Int): Char { when { n in 0..9 -> return '0' + n n in 10..15 -> return 'A' + n - 10 else -> return '?' } } 여러 개의 조건 -> 문, 하나의 else -> 문으로 이루어질 수 있다. 자바의 switch와 비슷하지만 값을 선택하는 것이 아닌 임의의 조건을 검사한다. (또한 자바의 폴스루를 지원하지 않음) 하나의 변수만을 비교한다면 wh..
내가 구현하려던 건 안드로이드에서 사용자에 대한 인공지능 모델을 생성하고, 그 결과값을 받아오는 것이었다 (안드로이드->web->파이썬) 당연히 어플을 실행하지 않아도, 백그라운드에서 인공지능 모델을 생성하고 학습시켜야 했기 때문에 백그라운드로 로직을 실행할 수 있는 Service 클래스로 구현했다 그런데 파이썬에서 모델을 학습시키기 위해서는 아주 많은 시간이 필요했고.. 안드로이드에서 파이썬의 응답을 기다리는 동안 ui가 멈춰 아무것도 하지 못했고, 응답시간이 넘으면 아예 ANR(Application Not Responding) 오류가 발생했다.. 구글링하다가 서비스는 응답시간이 10초가 넘으면 ANR오류가 발생한다는 걸 봤고, 백그라운드에서 ui의 제한없이 실행할 수 있는 클래스들을 찾아봤다 그리고 ..
MainActivity 클래스 안에 BluetoothDataReceiver라는 BroadcastReceiver 클래스를 넣었다고 할 때, 위와 같이 지정해주면 된다. 보통 액션명은 com.example.패키지명.액션설명 이렇게 많이들 쓴다. "RECEIVED_DATA"처럼 액션에 대한 설명만 간단히 적어도 문제는 없다. 서비스 클래스의 변수가 변경될 때, MainActivity UI를 바꾸는 브로드캐스트를 바꾸려고 했다. 그런데 MainActivity 클래스 내에서만 액티비티의 ui를 변경할 수 있으므로(setText 등) 액티비티 안에 브로드캐스트의 클래스를 집어넣었다. (동적으로 브로드캐스트를 선언해도 되지만, 그럴 경우 액션을 발생시키는 클래스가 다른 클래스라면 LocalBroadcastManage..
디바이스 해상도가 달라져도 뷰를 고정시키는 방법 1) LinearLayout 로 묶기 2) LinearLayout의 weightSum을 100으로 설정 (100이 아니어도 되지만 뷰의 모든 weight 합이 weightSum과 같아야 함) 3) 설정하고 싶은 비율에 맞게 LinearLayout 속 하단 뷰의 weight를 설정 (여백을 주고 싶은 경우 Space를 사용하여 weight를 설정하면 됨) (ex: weightSum이 100이라면 하단 뷰의 weight를 각각 30 50 20으로 설정) 4) 하단 뷰의 width, height를 변경 LinearLayout이 vertical일 경우, 모든 하단 뷰의 width는 match_parent이고 height는 0dp LinearLayout이 horiz..