일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- notification
- lifecycle
- hilt
- Algorithm
- onLayout
- recyclerview
- 백준
- 안드로이드
- LiveData
- AppBarLayout
- Navigation
- sqlite
- CoordinatorLayout
- activity
- onMeasure
- room
- DataBinding
- kotlin
- BOJ
- 코틀린
- Coroutine
- HTTP
- CollapsingToolbarLayout
- CustomView
- View
- 알고리즘
- Behavior
- Android
- 알림
- ViewModel
- Today
- Total
목록kotlin (43)
개발일지
- 인터페이스 (interface) 추상 클래스는 클래스이기 때문에 상속에 관하여 문제점을 야기할 수 있다. (이중 상속, 상속으로 인한 강한 연관성 추상 클래스와 비슷한 개념이지만 프로퍼티를 통해 상태를 저장할 수 없다. abstract 키워드가 생략되어도 자동으로 붙는다. 코드 interface Test { // abstract 키워드 없이 자동으로 추상 프로퍼티, 값을 초기화 할 수 없음 val value:Int // Java의 default처럼 메소드를 정의할 수 있음 fun action1() { println("Test Action1") } // abstarct 키워드 없이 자동으로 추상 메소드 fun action2() } class Parent : Test { // override 키워드를 통..
싱글톤 싱글톤 패턴이란 전역 변수를 사용하지 않고 객체 하나만 생성하여 어디서든 참조할 수 있는 패턴입니다. 객체가 서로 동일한 정보를 가질 때 하나의 메모리만 유지해서 메모리 낭비를 막을 수 있습니다. - object object는 접근 시점에서 하나의 객체가만 생성됩니다. 그렇기 때문에 주 생성자, 부 생성자를 정의할 수 없습니다. object 객체를 초기화 하기 위해선 init블록을 사용하면 되고 접근할 때 처음에만 실행됩니다. 자바에서 object를 접근하려면 INSTANCE 키워드를 사용하면 됩니다. (자바파일에서) 코드 object Math { fun sum(vararg args: Int): Int { var result = 0 for(num in args) { result += num } r..
지연 초기화 인스턴스를 생성할 때 초기화를 할 필요가 없는 프로퍼티들이 존재한다. 그리고 인스턴스를 생성할 때 모든 프로퍼티를 초기화를 하는 것은 리소스에 부담을 줄 수 있다. 지연 초기화를 사용하여 프로퍼티를 사용하려 할 때 초기화를 할 수 있다. - lateinit primitive type에는 할 수 없다. (Int, Long, Double...) var로 선언된 프로퍼티에만 가능하다 프로퍼티에 대한 getter와 setter를 사용할 수 없다. 초기화를 하지 않은 상태에서 접근하면 UninitializedpropertyAccessException을 발생한다. 코드 class Base { lateinit var hi: String fun action() { // 초기화가 됐는지 확인하는 방법 if(..
C++이나 Java에서는 멤버 변수를 private으로 선언하고 getter, setter를 public으로 선언하여 접근하였다. 따라서 멤버 변수가 많아지면 그에 상응하는 getter, setter가 많아져 코드량이 길어지는 단점이 있다. Kotlin은 getter와 setter를 선언하지 않아도 자동으로 만들어준다. getter와 setter의 작동방식 Kotlin은 자동으로 getter와 setter를 만들어준다. val로 선언된 프로퍼티는 읽기전용이기 때문에 setter를 만들지 않는다. private으로 선언된 프로퍼티는 getter와 setter를 만들지 않는다. 코드 // 프로퍼티 선언시 자동으로 getter와 setter가 정의된다. class Base(var id: Long = 0, va..
가시성 지시자 가시성 지시자 의미 private 외부에서 접근할 수 없다. public 어디서든 접근할 수 있다. protected 외부에서 접근할 수 없으나 상속 관계에선 접근 할 수 있다. internal 같은 정의의 모듈에서 접근할 수 있다. 코드 open class A ( private var privateVar: Int = 0, protected var protectedVar: Int = 0, public var publicVar: Int = 0, internal var internalVar: Int = 0, var noneVar: Int = 0 // 가시성 지시자를 지정하지 않으면 자동으로 public ) { } class B : A() { fun action() { println(privat..
- 상속 상속을 하면 부모 클래스의 프로퍼티와 메서드를 불려받는다. 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문은 조건을 검..