본문 바로가기

Kotlin

(18)
Kotlin 코딩테스트 기초 문법 정리 #1 현직 Android 개발자이기도하고 지향하는 커리어도 Kotlin fullStack이다 보니 Kotlin으로 코테를 준비하는게 맞다는 생각이 들었다.문제를 풀면서 필요했던 함수 혹은 알면 쓸만한 내용을 기록해두고자 한다.자료구조 관련 내용은 따로 작성하겠다.[내용 추가 진행 중입니다.....]1. 입출력기본 입출력readln(), readLine(), print(), println()fun main() { var name = readln() // 입력 var yourName = readLine() // 입력 print("my name: $name") // 일반 출력 println("my name: $name") // 출력 후 개행}readln()은 kotlin 1.6부터 도입된 입출..
[Kotlin] 반복문 최종 수정: 24.05.18 Kotlin에서 반복문을 통해 흐름을 제어(control flow)를 하는 방법에 대해서 알아보겠다.반복구문은 for과 forEach, while, repeat를 사용할 수 있다.for코틀린의 for문은, 아래와 같은 형태로 사용한다.집합 collection에 대해서 각각 요소를 Item으로 정의하고 식을 실행시키는 구조다.사실 for문은 모든 언어에서 사용되는 반복문인 만큼, 처음 코딩을 접하는 것이 아니라면 익숙한 개념이다.때문에, for문의 문법적인 내용을 다루기 보다는, 코틀린에서는 어떻게 반복 범위를 지정할 수 있는지를 다루는 것이 옳바른 방향이라고 생각된다.‣상행 반복 예제for (i in 0..5){ println(i)}---012345상향 반복에는 2개의 ..
집합: Set, MutableSet Atomic Kotlin Atom26: 집합을 정리한 내용에 개인 스터디한 것을 추가 Set Set은 각각의 값이 오직 하나만 존재 가능한 컬렉션 보통 in이나 contains()를 사용해서 원소 포함여부를 검사할 때 사용 fun main() { // 중복 허용 안함 val intSet = setOf(1, 1, 2, 3, 9, 9, 4) // 원소 순서는 중요x println(setOf(1, 2) == setOf(2, 1)) // >> true // 원소 포함 여부 검사(in) println((9 in intSet) == true) // >> true println((99 in intSet) == false) // >> true // 원소 포함 여부 검사(contains) println(intSet.co..
가변 인자 목록: vararg Atomic Kotlin의 Atom 25를 정리한 내용입니다. vararg 키워드는 길이가 변할 수 있는 인자 목록을 만든다. 이 키워드를 사용하면 listOf()처럼 임의의 길이로 인자를 받을 수 있는 함수를 정의할 수 있다. vararg는 가변 인자 목록(Variable argument list)의 줄인 말. 함수 정의에는 vargarg 로 정의된 인자가 최대 한개만 존재 가능하다. 파라미터 목록에서 어떤 위치에 있는 파라미터 든지 vararg로 선언 가능하지만, 일반적으로 마지막 파람을 vararg로 선언하는게 편하다. fun v(s:String, vararg d: Double){} 임의의 개수만큼(0 포함) 인자 전달 가능. 모든 인자는 지정한 타입에 속해야 함 함수 본문에서는 파람 이름으로 va..
[Kotlin] object & companion object ObjectObject 키워드를 다양한 상황에서 사용할 수 있다. 그 상황들의 공통점은, 클래스를 정의하면서 동시에 인스턴스(객체)를 생성한다는 점이다.코틀린에서 object키워드는 다음 두가지 형태로 사용 가능하다.object declarations(선언식)object expressions(표현식) 1. Object declaration(선언식): Singleton 만들기object를 선언식으로 사용하게 된다면, 무엇보다도 Singleton패턴 형태로 사용하는 것이다.객체지향 프로그램을 설계하다 보면, 인스턴스가 하나만 필요한 클래스가 유용한 경우가 많아진다.JAVA에서는 아래와 같이 보통 클래스의 생성자를 private로 선언하고, static 변수에 클래스 객체를 저장하는 방식으로 싱글턴 패턴을 구..
[Kotlin] lateinit와 lazy의 차이점 lateinit와 lazy 모두 변수를 늦게 초기화하는 방법들이다.늦게 초기화 한다는 것이 무엇일까? 늦은 초기화클래스 안에 ‘이 변수를 사용할 것이다’라고 선언만 해두고 나중에 변수를 실제로 사용하는 시점에 값을 입력해주어 사용하는 것을 말한다.물론 처음부터 null값을 넣어두고 나중에 제대로 된 값을 할당하는 것도 가능하다. 하지만 이럴 경우 2가지 고려해볼 요소가 있다.var a : String? = nulla의 값이 변할 수 있지만, 절대 null이면 안되는 경우 ⇒ 처음에 nullable한 으로 초기화해주는 것이 부적절하다.a의 값이 처음 한 번 정해지고 나면, 다시는 변하지 않는 경우⇒ a가 var일 필요가 없다.이런 걱정을 없에주는 것이 lateinit과 lazy이다. lateinit특징va..
[Kotlin] 내부(Inner class)와 중첩 클래스(Nested class) 자바에서는 A클래스 안에 B 클래스를 정의하면 B클래스는 자동으로 내부 클래스가 된다.하지만 코틀린에서는 반대이다. 한 클래스 안에 다른 클래스를 정의하면 기본적으로는 중첩 클래스가 되고, 내부 클래스로 만들고 싶다면 inner 키워드로 클래스는 선언해야 한다.내부 클래스는 기본적으로 외부 클래스를 참조하게 되지만, 중첩 클래스는 그렇지 않다. 다음의 코드들을 보자.class Outer{ private val bar:Int = 1 class Nested{ fun foo()=bar // error! bar가 아닌 다른 값으로 변경해 줘야한다. } } fun main(){ print(Outer.Nested().foo()) }먼저 중첩(Nested) 클래스다.중첩 클래스는 외부 클래스(위 코드에서는 Outer..
[Kotlin] 더블콜론(::) 참조 더블 콜론(::)더블콜론(::)은 코틀린에서 메서드 참조, 프로퍼티 참조, 클래스 리터럴(Literal)과 같은 메타 프로그래밍에 관련된 것으로, 리플렉션을 위해 사용한다.리플렉션이란 런타입에 프로그램의 클래스를 조사하기 위해서 사용되는 기술이다. 즉, 프로그램이 실행 중일 때 인스턴스 등을 통해 객체의 내부 구조 등을 파악할 수 있다.코틀린에서 변수나 클래스명 앞에 더블콜론(::)을 명시하면, 변수나 클래스에 대한 참조를 할 수 있다. 더블콜론을 명시하면 변수가 아닌 객체(Object)로 접근할 수 있기 때문이다. (Object::class)그럼 자바와 코틀린에서의 리플렉션 차이를 보자.SomeClass.class // 클래스 그 자체를 리플렉션 someInstance.getClass() // 인스턴스..