일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- activity
- CoordinatorLayout
- Behavior
- CustomView
- View
- HTTP
- onMeasure
- CollapsingToolbarLayout
- kotlin
- Coroutine
- LiveData
- 코틀린
- 알고리즘
- hilt
- onLayout
- 안드로이드
- Android
- lifecycle
- 알림
- BOJ
- 백준
- DataBinding
- Navigation
- room
- recyclerview
- ViewModel
- sqlite
- AppBarLayout
- notification
- Algorithm
- Today
- Total
목록Kotlin (코틀린) (38)
개발일지
- 내부 클래스 내부 클래스를 사용하는 이유는 독립적인 클래스로 정의하기 모호한 경우나 다른 클래스에서 잘 사용하지 않고 내부에서만 사용하는 클래스를 외부에서 접근할 필요가 없을 때 사용한다. 너무 무분별하게 사용하면 코드의 의존성이 커지기 때문에 조심해야 한다. - 중첩 클래스 (Nested Class) 기본적으로 자바의 정적(static)클래스 처럼 다뤄진다. 바깥 클래스를 접근할 수 없다. 바깥 클래스를 인스턴스 할 필요 없이 바로 인스턴스화 할 수 있다. 바깥 클래스에서 중첩 클래스를 바로 접근할 수 없다. -> 인스턴스화 해야 함 코드 class Parent { val value: Int = 0 fun func() { println("Parent") } fun nestedAction() { //..
데이터 클래스 (DTO) 자바에서는 POJO라고 부르는 개념이다. 특정 동작을 하지 않고 오로지 데이터 전달을 위한 목적의 클래스이면 클래스에서 필요없는 기능을 제외하여 리소스를 효과적으로 활용할 수 있다. 데이터 클래스가 자동으로 가지는 메서드 프로퍼티를 위한 getter, setter equals() hashCode() toString() copy() 프로퍼티에 상응하는 component1(), component2() .... 데이터 클래스의 조건 주 생성자는 최소 하나 이상의 프로퍼티를 가져야 한다. 주 생성자의 모든 매개변수는 val, var로 지정된 프로퍼티여야 한다. 데이터 클래스는 abstract, open, sealed, inner 키워드를 사용할 수 없다. 객체 디스트럭처링 (Destru..
- 추상 클래스 (abstract) 추상 클래스는 객체를 인스턴스화 할 수 없다. 추상 클래스는 하위 클래스를 어떻게 구현해야 하는지 나타내는 용도로 쓰인다. open 키워드를 사용할 필요 없이 상속시킬 수 있음 코드 abstract class Parent { val normal: Int = 0 // 추상 프로퍼티, 하위 클래스에서 반드시 재정의를 해야함 abstract val abstractVal: Int fun normalFunction() { println("Normal Function") } // 추상 메소드, 하위 클래스에서 반드시 재정의를 해야함 abstract fun abstractFunction() } class Child : Parent() { // override 키워드를 사용해서 재정..
- 인터페이스 (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..