일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- onMeasure
- Coroutine
- Navigation
- 안드로이드
- 백준
- CustomView
- ViewModel
- kotlin
- BOJ
- Behavior
- activity
- room
- recyclerview
- DataBinding
- CollapsingToolbarLayout
- 알림
- LiveData
- View
- CoordinatorLayout
- onLayout
- 알고리즘
- HTTP
- Algorithm
- hilt
- AppBarLayout
- notification
- Android
- sqlite
- Today
- Total
목록Programming (프로그래밍) (212)
개발일지
Array 선언방법 // arrayOf를 이용한 생성 // 여러가지 자료형을 가질 수 있다. val arr1 = arrayOf(1, 2, 3, "str") // 생성자를 이용한 생성 // 첫번째 인자 : Size, 두번째 인자 : Lambda #각 인덱스별로 어떻게 처리할지 val arr2 = Array (10) { it } // 형식을 지정하는 arrayOf val arr3 = intArrayOf(1, 2, 3, 4) // null로 채우고 시작하는 배열 // 첫번째 인자 : Size val arr4 = arrayOfNulls(10) Array 접근 Array는 인덱스가 0부터 시작한다. 코드 val arr = Array (5) { it*it } println(arr[3]) arr[3] = 1 prin..
reified의 필요성 코드 fun genericFunction() { // Error Kotlin: Cannot use 'T' as reified type parameter. Use a class instead. println(T::class.java) } 위 함수는 일반적인 제네릭 함수이다. 위 함수 같은 경우는 Java처럼 T 형식 매개변수가 런타임에 삭제되기 때문에 T에 접근할 수 없다. 자바에서 접근하던 방법 매개변수를 받아서 실행시간에 사라지지 않게 했다. 코드 void genericFunction(T arg) { arg.getClass(); } reified inline 함수에만 사용할 수 있다. inline처리 될 때 코드가 복사되면서 실제 자료형을 알 수 있기 때문에 런타임에서도 사용할 ..
가변성 가변성이란 매개변수가 클래스에 영향을 주는 것을 말한다. 예를 들어 Int클래스는 Number클래스를 상속받았고, Number클래스 변수에 Int의 인스턴스를 대입할 수 있다. 이때 Int는 Number의 하위 형식이 된다. 가변성의 3가지 유형 용어 의미 공변성(Covariance) A가 B의 하위 형식이면 C는 C의 하위 형식이다. 생산자 입장의 out 성질 반공변성(Contravariance) A가 B의 하위 형식이면 C는 C의 하위 형식이다. 소비자 입장의 in성질 무변성 C와 C는 아무 관계가 없다. 생산자 + 소비자 무변성 기본 값이다. Any -> Number -> Int의 관계가 있지만 무변성이 적용되면 아무 관계가 없기 때문에 Type mismatce가 발생한다. class Box..
제네릭 개념 제네릭은 인스턴스를 생성할 때 자료형을 결정한다. 컴파일 시간에 자료형을 검사하여 코드의 안정성을 높인다. 제네릭의 본질은 런타임에 ClassCastException을 막아주어 안정성을 높이는데 있다. 제네릭 사용법 자료형을 결정할 수 없는 경우를 조심해야한다. 엥글 브래킷() 사이에 형식 매개변수를 넣어 선언한다. 코드 // 제네릭 클래스 class Box(vararg val elements: T) { fun printElements() { for(i in elements) { print("$i ") } println() } } // 제네릭 함수 fun printGeneric(element: T) { println(element) } fun main() { // 자료형을 유추할 수 있으면 ..
연산자 오버라이딩 operator 키워드를 통해 구현한다. 코드 class Base(var x: Int = 0) { operator fun plus(other: Base): Base { return Base(this.x + other.x) } override fun toString(): String { return "Base(x = $x)" } } fun main() { val x = Base(1) val y = Base(2) println(x + y) } 결과 Base(x = 3) 연산자 종류 표현식 의미 a + b a.plus(b) a - b a.minus(b) a * b a.times(b) a / b a.div(b) a % b a.rem(b) a..b a.rangeTo(b) a(b) a.invoke..
- 열거형 클래스 (Enum Class) Java의 Enum Class와 매우 유사하다 코드 enum class Direction { NORTH, SOUTH, WEST, EAST } - 멤버를 가지는 열거형 클래스 프로퍼티와 메서드를 가질 수 있다. 코드 enum class Direction(private val value: Int = 0) { NONE { val str: String = "None" }, NORTH(1), SOUTH(2), WEST(3), EAST(4); fun getValue() { println(value) } } - 인터세이스를 상속받는 열거형 클래스 인터페이스를 상속받고 개별적, 통합적으로 재정의할 수 있다. 코드 enum class Direction(private val val..
- 내부 클래스 내부 클래스를 사용하는 이유는 독립적인 클래스로 정의하기 모호한 경우나 다른 클래스에서 잘 사용하지 않고 내부에서만 사용하는 클래스를 외부에서 접근할 필요가 없을 때 사용한다. 너무 무분별하게 사용하면 코드의 의존성이 커지기 때문에 조심해야 한다. - 중첩 클래스 (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..