Skils/Kotlin

코틀린 공부
· Skils/Kotlin
Contract 1.3.60 버전부터 사용되었으며, 컴파일러가 이해할 수 있게 명시적으로 자신의 동작을 설명할 수 있게 한다. 컴파일러가 이해할 수 있게 라는 말이 조금은 헷갈릴 여지가 있다고 생각한다. 코드를 통해 살펴보자 회원가입을 구현하려고 할 때의 시나리오를 생각해 보자. @JvmInline value class Password(val password: String) @JvmInline value class Id(val id: String) fun validate(id: Id?, password: Password?): Boolean { return id != null && password != null } fun signUp(id:Id?, password: Password?){ if(validat..
· Skils/Kotlin
등장 배경 원시타입과 문자열을 wrapping 하기 위해 사용했던 데이터 클래스와 클래스는 추가적인 객체 생성과 메모리 할당이 필요했다. 하지만 value class가 추가되면서, 객체 생성 및 메모리 할당을 최소화하고 성능을 개선할 수 있게 되었다. kotlin 1.5에서는 inline class로 사용되었지만, 현재는 Deperecated 되었다. 현재 1.6에서는 value class로 사용하고 있다. 정의 primitive 타입이나, 다른 value class를 감사는 wrapper 클래스로서의 역할을 할 수 있다. 특징 상속이 불가능하다 @JvmInline value class Email(private val email:String) value class SchoolEmail(private va..
· Skils/Kotlin
고차 함수와 함숫값을 사용하면 함수가 객체로 표현되기 때문에 성능 차원에서 부가 비용이 발생한다. 이러한 부가 비용을 줄일 수 있는 해법이 Inline 기법이다. fun testInLine() { val time = 5 repeatInline(time) { println("inlie : $it") } } fun repeatInline(time: Int, action: (Int) -> Unit) { for (i in 0 until time) { action(i) } } fun main() { testInLine() } 코틀린 코드를 자바로 디컴파일해보면 아래와 같은 결과를 얻을 수 있다. public final class SolutionKt { public static final void testInLin..
· Skils/Kotlin
Data class는 Kotlin 언어로 바꾼 뒤 정말 많이 사용하는 클래스이다. 이러한 Data class가 일반 클래스와 어떤 것이 다르기 때문에 자주 사용되는 걸까에 대해서 알아볼까 한다. 우선 가장 큰 차이점은 Data class 자동으로 메서드를 만들어준다는 점이다. 자동으로 메서드를 만들어주는 게 왜 그렇게 큰 차이점일까에 대해서 궁금할 수도 있지만, 자동으로 만들어주는 메서드가 정~말정말 유용하기 때문에 Data class는 Kotlin에서 아주 사랑받는 녀석이다. Data class에서 자동으로 만들어주는 메서드는 다음과 같다. toString() equals() hashCode() copy() 위 메서드를 살펴보기 전에 Data class의 특징에 대해서 먼저 알아볼까 한다. Data c..
· Skils/Kotlin
완전탐색, 백트래킹, DFS에서 조합과 순열을 많이 사용한다. Kotlin은 정말 잘 만든 언어이지만, 조합은 파이썬처럼 라이브러리로 구현되어 있지 않아서 우리가 한 땀 한 땀 구현을 해야 한다. 매번 문제를 풀 때 헷갈리기도 하고, 정리하면 좋을 거 같아서 포스팅하게 되었다. 순열 (Permutation) 정의는 다음과 같다. 서로 다른 n개의 원소에서 r개를 중복 없이 순서에 상관있게 선택하는 혹은 나열하는 것 중복이 없고, 순서가 있다는 것이 순열의 특징이다. 순열은 재귀함수를 통해서 구현할 수 있다. cnt는 현재 내가 뽑은 원소의 수, depth는 내가 뽑아야 할 원소의 수이다. 즉 원소의 개수가 N이고, 내가 중복 없이 순서를 지키면서 R개를 뽑으려고 할 때는 nPr이고, makePermuta..
· Skils/Kotlin
코틀린 Collection에는 대표적으로 List, Set, Map이 있다. 자바와는 다르게 코틀린에서는 불변형, 가변형 Collection이 있다. 불변형은 읽기 전용, 가변형은 읽고 쓰기 전용 각각의 Collection마다 고유의 기능이 있다. 불변형의 공통적인 기능 size : 컬렉션의 크기 isEmpty() : 컬렉션이 비어있는지 확인. 비어있다면 True, 아니라면 False contains(element) : 특정 요소가 있다면 true, 아니라면 false 가반형의 공통적인 기능 add(element) : 추가 remove(element) : 삭제 addAll(Collection ) : 인자로 받은 컬렉션의 모든 요소 추가 removeAll(Collection) : 인자로 받은 컬렉션의 모든..
· Skils/Kotlin
scope 함수의 종류는 많지만 각 종류별로 적절한 쓰임을 모르고 사용하는 경우가 굉장히 많다. 각 함수를 적절하게 사용하기 위해서 각 함수들이 어떻게 다른지에 대해서 공부할 필요성이 있다. Scope Functions(스코프 함수) 특정 개체의 콘텍스트 내에서 특정 동작을 실행하기 위한 목적만을 가진 함수 객체의 이름에 일일히 접근할 필요가 없다는 것이 장점이다. 종류로는 apply,run,with,also,let이 있다. apply 인스턴스를 생성하고 , 특정 변수에 할당하기 전에 초기화 작업을 해준다. 모든 명령이 수행되면 명령이 적용되고 새로운 인스턴스를 반환해 줍니다. 즉 자기 자신을 반환합니다. Jaehan이라는 변수를 생성하면서 age와 salary에 대한 수정을 적용할 수 있습니다. app..
· Skils/Kotlin
코틀린에서 특정 문자열이 포함되어 있는지 아닌지를 판별하기 위해 사용되는 정규표현식을 적을까 합니다. 우선 정규표현식의 정의를 알아볼 건데 아래 내용은 위키피디아에서 가져왔습니다. 정규표현식이란? 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용되는 형식 언어 (위키피디아) 그렇다면 정규표현식은 어떠한 상황에서 사용될까요? 휴대폰번호를 입력받는데, 휴대폰 번호의 양식과 일치하는지 판별(숫자만 와야 함) email를 입력받는데, @가 있는지, 비밀번호 양식 (몇 글자이상, 특수문자 한 글자 포함, 대문자 한글자 포함 등등) 이러한 예외처리를 if문을 통해서 할 경우 굉장히 코드가 복잡해지고, 더러워집니다. 따라서 코틀린에서는 Regex를 제공해서 문자열에서 특정 문자열이 포함되어 있는지를 판별해 줍니다..
· Skils/Kotlin
코루틴 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 비동기 vs 동기 예를 들면, 요리를 할 때 동생 같은 요리 초보는 프라이팬을 하나만 사용하면서 요리를 한다. 이러한 방식을 동기라고 한다. 나같은 요리 고수는 프라이팬을 여러 개 사용하면서, 칼질도 하는 등 여러 작업을 동시에 한다. 이러한 방식을 비동기라고 한다. 그렇다면 비동기가 왜 필요할까? 만약 내가 버튼을 누름과 동시에 데이터베이스에서 접근해서 데이터베이스를 읽어 들이는데, 그 데이터베이스를 기다리는 동안 화면 UI는 데이터베이스에서 정보가 들어오지 않았기에, 계속 기다려야 하고, 그렇게 되면 사용자 입장에서는 텅 빈 화면을 바라봐야 한다. 이러한 상황이 발생되면 사용자도 불편하고..
재한
'Skils/Kotlin' 카테고리의 글 목록