일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- lifecycle
- ViewModel
- LiveData
- room
- Android
- 안드로이드
- sqlite
- HTTP
- Algorithm
- Coroutine
- hilt
- recyclerview
- onLayout
- 코틀린
- 알고리즘
- DataBinding
- CustomView
- CoordinatorLayout
- CollapsingToolbarLayout
- 백준
- AppBarLayout
- Navigation
- BOJ
- notification
- 알림
- onMeasure
- Behavior
- activity
- kotlin
- View
- Today
- Total
목록코틀린 (38)
개발일지
- 상속 상속을 하면 부모 클래스의 프로퍼티와 메서드를 불려받는다. open 키워드를 붙여서 상속 시킬 수 있다. 코드 open class Parent(val name: String) { } class Child(name: String) : Parent(name) { } fun main() { val child = Child("개발일지") println(child.name) } 결과 개발일지 자바는 open 키워드를 안붙여도 상속 시킬 수 있고, final 키워드를 붙여야 최하위 클래스가 되지만, 코틀린은 open 키워드를 붙여야 상속 시킬 수 있고, open 키워드를 붙이지 않으면 최하위 클래스가 된다. - 메소드 오버라이딩 open과 override 키워드를 통해 부모의 클래스로 부터 상속받은 메서드..
- 클래스 선언하기 코드 // 클래스 선언 class Something { // 프로퍼티 val id:Long = 0 // 메서드 fun action() { } } - 인스턴스 선언하기 생성자를 통해 인스턴스를 생성할 수 있다. 코드 val something = Something() - 주 생성자 코드 // 주 생성자 정의 class Something constructor(_id:Long) { val id: Long = _id } fun main() { // 주 생성자로 인스턴스 생성 val something = Something(123L) } - constructor를 생략한 주 생성자 코드 // 주 생성자 정의 class Something(_id:Long) { val id: Long = _id } f..
for문 for (변수 in 범위 또는 컬렉션) { 코드 } 변수에 범위 또는 컬렉션의 요소만큼 대입되면서 반복한다. - for 문 in 범위 코드 // i에 1..5가 대입 되면서 반복 for(i in 1..5) { println(i) } 결과 1 2 3 4 5 - for문 in 컬렉션 코드 val arr = arrayOf(1, 2, 3, 100, 900) for(i in arr) { println(i) } 결과 1 2 3 100 900 while문 while(조건) { 코드 } 조건이 만족할 때까지 while문을 반복 코드 var i = 0 while(i < 5) { println(i) i++ } 결과 0 1 2 3 4 do ~ while문 do { 코드 } while(조건) while문은 조건을 검..
when문 when(인자) { 표현식1 -> 코드 표현식2 -> 코드 표현식3 -> 코드 else -> 코드 } 다른 언어의 switch문과 비슷하다 else if문을 간단하게 표현할 수 있다. 인자와 표현식의 결과가 같으면 해당하는 코드를 실행한다. 코드 val x = 1 when(x) { 1 -> println("x is 1") 2 -> println("x is 2") else -> { // 여러줄의 코드가 필요하면 블록을 사용하여 표현할 수 있다. println("================") println("x is not 1 and 2") println("================") } } 결과 x is 1 when 일치되는 조건을 한번에 표현하기 일치되는 조건을 , 를 사용하여 한번에..
if문 if (조건) { 코드 } 조건을 만족시키면 코드를 실행한다. 코드 val a = readLine()?.toInt() if(a ?: 0 > 10) { println("a is over than 10") } if ~ else문 if (조건) { 코드1 } else { 코드2 } 조건을 만족시키면 코드1을 만족하지 않으면 코드 2를 실행한다. 코드 val a = readLine()?.toInt() val b = readLine()?.toInt() if(a == b ?: false) { println("Same") } else { println("Different") } 간단한 if ~ else 문 if ~ else 문을 표현식으로 표현할 수 있다. 코드 val max = if(a > b) a else..
- 익명함수 함수의 형태를 가지고 이름이 없는 함수이다. 코드 val fun0: (Int, Int) -> Int = fun(x:Int, y:Int): Int {return x + y} println(fun0(1, 2)) 결과 3 익명함수의 간단한 표현 코드 val fun0 = fun(x:Int, y:Int) = x + y println(fun0(1, 2)) 결과 3 람다식 vs 익명함수 람다식에서는 return, continue, break처럼 제어문을 사용하기 어렵기 때문이다. 하지만 익명함수는 람다식보다 가독성이 떨어지는 특징이 있기 때문에 적절히 사용하애한다. - 인라인 함수 (inline) 인라인 함수는 함수가 호출되는 곳에 코드를 붙여넣기 때문에 함수 콜백간 오버헤드를 줄일 수 있는 장점이 있다..
- 람다식 형태 { x:Int, y:Int -> x + y } - 람다식을 변수에 할당하기 (Int, Int) -> Int 같은 형식으로 람다의 형태를 선언 후 { x:Int, y:Int -> x + y } 같은 형식으로 대입한다. 코드 val lambda1: (Int, Int) -> Int = {x:Int, y:Int -> x + y} - 람다식 간단히 표현하기 람다의 형태를 선언한 경우 람다의 형태를 표현할 때 자료형을 생략할 수 있다. val lambda1: (Int, Int) -> Int = {x, y -> x + y} 람다를 대입할 때 사용하지 않는 매개변수가 있을 경우 _로 생략할 수 있다. val lambda1: (Int, Int) -> Int = { _, y -> y } 람다의 매개변수가 ..
- 순수 함수의 정의 같은 인자에 대하여 항상 같은 결과를 '반환하면 부작용이 없는 함수'라고 부른다. 부작용이 없는 함수가 함수 외부의 어떤 상태도 변화시키지 않으면 '순수 함수'라고 부른다. - 일급 객체의 특징 일급 객체는 함수의 인자로 전달할 수 있다. 일급 객체는 함수의 반환값에 사용할 수 있다. 일급 객체는 변수에 담을 수 있다. - 고차 함수의 정의 다른 함수를 인자로 받을수 있는 함수 다른 함수를 리턴값으로 사용할 수 있는 함수 - 함수를 쓰는 이유 재사용성을 높여 코드의 중복을 없애기 위해 함수를 이용하여 코드의 가독성을 높일 수 있다. 모듈성을 높여 유지보수를 쉽게 할 수 있다. - 함수 정의하기 fun Name(Parm1, Parm2): ReturnType { Body } fun키워드..