분류 전체보기
-
[안드로이드] registerForActivityResult란?카테고리 없음 2024. 3. 21. 09:54
registerForActivityResult registerForActivityResult는 기존 startActivityForResult의 대체 구문으로 액티비티로부터 결과 값을 받고 싶을 때 사용한다. (startActivityForResult가 deprecated 되었는데 그 이유가 새롭게 연 액티비티에서 메모리를 많이 사용할 경우 이전에 열려있던 액티비티가 죽어서 콜백을 제대로 받지 못하는 경우가 있다고 한다.) registerForActivityResult와 startActivityForResult의 차이점 Main 액티비티와 Test 액티비티가 있다고 가정해보겠다. startActivityForResult[with onActivityResult] 1. Main에서 Test를 실행했는데 메모리..
-
[안드로이드] 명시적/암시적 인텐트카테고리 없음 2024. 3. 19. 20:58
인텐트란? 메시지 객체이고, 이것을 사용하여 다른 앱으로 작업을 요청하여 결과를 전달받을 수 있다. 인텐트 종류에는 두가지가 있는데 명시적 인텐트와 암시적 인텐트가 있다. 명시적 인텐트 특정한 컴포넌트를 직접적으로 호출할 때 사용된다. (새로운 액티비티를 실행하기 위해 사용된다.) class MainActivity : AppCompactActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // TestActivity를 지정하여 액티비티를 띄운다. val intent = Intent(this, TestActivi..
-
[코틀린] 생성자카테고리 없음 2024. 3. 15. 10:06
Primary Constructor 클래스는 하나의 primary constructor와 여러 개의 secondary constructor을 가질 수 있다. class Country constructor(displayName: String) // 아래처럼 constructor 키워드에 접근 제한자가 없다면 축약하여 적을 수 있다. class Country(displayName: String) primary constructor에선 코드를 실행할 수 없다. 만약 코드를 실행하고 싶다면 init 블럭을 이용하면 된다. (굳이 아래처럼 만들지 않고 주석처럼 만들면 되지만 init 블럭 예시로 보여준 것이다.) class Country(displayName: String) { private val length:..
-
[코틀린] 업/다운캐스팅카테고리 없음 2024. 3. 14. 10:09
업캐스팅 업캐스팅은 자식 클래스를 부모 클래스 타입으로 변환시키는걸 말한다. open class Bird { val age = 5 } class Crow : Bird() fun main(args: Array) { val crow = Crow() println(crow.age) // 5 val bird = crow as Bird println(bird.age) // 5 } 다운캐스팅 다운캐스팅은 업캐스팅이 된 객체에 대해 다시 원래 타입으로 변환시키는걸 말한다. 제일 아래에서 ClassCastException이 발생하는 이유는 처음 생성된 원본 타입이 Bird라서 Crow로 변환시킬 수 없기 때문이다. open class Bird { val age = 5 } class Crow : Bird() fun ma..
-
[(코틀린)알고리즘] 약수 구하기카테고리 없음 2024. 3. 14. 09:55
방법1 숫자 n이 있다면 1부터 n까지 모두 순회해서 나머지가 0인 경우를 필터링하여 찾는 방법이다. (n까지 모두 반복문이 돌아야하기 때문에 시간복잡도가 O(n)만큼 걸린다.) fun getDivisors(n: Int): List { return (1..n).filter { n % it == 0 } } 방법2 숫자 n이 있다면 1부터 √ n까지 순회해서 찾는 방법이다. 약수가 d일 때 다른 하나의 약수는 n / d가 성립하게 된다. (√ n까지 반복문을 돌기 때문에 시간복잡도가 O(√n)만큼 단축된다.) fun getDivisors(n: Int): List { val sqrt = Math.sqrt(n.toDouble()).toInt() val divisors = mutableListOf() (1..sq..
-
[코틀린] 예외처리카테고리 없음 2024. 3. 12. 09:59
원리 함수 실행 중 오류가 발생하면 예외를 던져서 함수를 호출하는 쪽에서는 해당 예외를 잡아 처리할 수 있다. 예외를 처리하지 않는 경우 함수를 계속 타고 올라가 예외를 처리할 때까지 예외를 던진다. 사용법 input으로 "1000?!!"을 입력받았다고 가정하고 String#toInt()를 사용하면 NumberFormatException이 뜰 것이다. 그리고 당연히 실행 도중 예외가 발생하였기 때문에 println은 출력되지 않는다. val input = "1000?!!" val number = input.toInt() println("숫자 ${number}을(를) 입력하였습니다.") 여기서 try catch문으로 예외를 잡아서 숫자가 아닌 경우 에러 메시지를 뜨게할 수 있다. (솔직히 try catch..
-
[코틀린] 널세이프티카테고리 없음 2024. 3. 11. 09:22
코틀린은 기본적으로 null을 허용하지 않는다. 변수에 null을 허용하려면 자료형 오른쪽에 물음표를 붙이면 된다. // x val text: String = null // o val text: String? = null 안전한 호출 변수가 null이면서 안전한 호출을 하고 싶으면 변수명으로 호출할 때 변수명 오른쪽에 물음표를 붙이면 된다. val kotlin: String? = "Kotlin" println(kotlin?.length) 엘비스 연산자 null을 참조할 수 있는 변수가 있을 때 해당 변수가 null이 아니면 해당 값을 사용하고 해당 변수가 null이면 엘비스 연산자 오른쪽에 있는 값을 대신 사용한다. var text: String? = null println(text ?: "안녕하세요")..