본문 바로가기

Kotlin/Basic

(16)
[Kotlin] 지연 계산(lazy) 컬렉션 연산: Sequence 컬렉션 API 중, map이나 filter같은 함수는 결과 컬렉션을 즉시 생성한다.이는, 컬렉션 함수를 연쇄하면 매 단계마다 중간 계산 결과를 새로운 컬렉션에 임시로 저장하고 있다는 것이다.반면에, 시퀀스(Sequence)를 사용하면, 중간 임시 컬렉션을 사용하지 않고도 컬렉션 연산을 연쇄할 수 있다. 간단한 예로, 성이 ‘김’씨인 사람만 추려내는 예제를 살펴보도록 하겠다./* 김씨인 사람만 추리기 */ people.map(Person::name).filter {it.startsWith("김")}코틀린 레퍼런스 문서에는 filter와 map이 List를 반환한다고 명시되어있다.이 말은 이 연쇄 호출이 List를 총 2개 만든다는 것을 알 수 있다.한 리스트는 map의 결과를 담고, 다른 하나는 filte..
[kotlin]코틀린의 생성자(constructor) 🧭 코틀린의 생성자(Constructor)코틀린에서는 하나의 주(primary) 생성자와 여러 개의 부(secondary) 생성자를 사용할 수 있다. 주 생성자는 클래스의 헤더로써 클래스의 이름과 동일한 이름을 사용한다.만약 주 생성자에 어노테이션이나 가시성 변경자(visibility modifiers)가 없다면, 생성자 키워드는 생략 가능.// constructor 키워드를 사용한 모습 class Person constructor(firstName: String) { /* . . . */ } // constructor 키워드를 생략한 모습 class Person(firstName: String) { /* . . . */ }보통 주 생성자는 클래스를 초기화할 때 주로 사용하는 간략한 생성자로, 클래스 본..
[Kotlin] Scope Functions 정리 Scope Function(let, with, run, apply, also) 정리Scope Function 이라는 함수명에서 알 수 있듯이, 이 함수들을 람다식을 이용해서 호출하면 일시적인 Scope(범위)가 생기게 되고, 이 범위 안에서는 전달된 객체에 대해 “it” 또는 “this”라는 Context Object를 통해서 접근하게 된다. 두 가지 차이점Scope Function에는 서로 다른 두 가지 주요 차이점이 있다.Context Object를 참조하는 방법(this, it)Return value Context Object: this or itScope Function 람다식 내에서 Context Object는 실제 객체명 대신 짧은 참조명인 “it”또는 “this”키워드로 접근할 수 있다. 그..
[Kotlin] 클래스 계층 정의 인터페이스코틀린 인터페이스 안에는 추상 메소드 뿐만이 아니라, 구현이 있는 메소드도 정의할 수 있다.interface MyInterface{ fun printHi() } class Printer: MyInterface{ override fun printHi() = println("Hi") } // >> Printer().printHi() // >> Hi Java에서는 extends와 implements 키워드를 사용하여 상속과 구현을 처리 하지만, 코들린에서는 클래스 이름 뒤에 콜론(:)을 붙이고 인터페이스와 클래스 명을 명시하는 것으로 상속과 인터페이스 구현을 처리한다.Override를 하는 경우, 자바는 @Override 어노테이션을 사용하는데, 코틀린에서는 그냥 Override 라는 키워드를 함수 ..
[Kotlin] 코틀린 프로퍼티와 필드(Properties and Fields) 🥅 들어가며 N2T로 업로드 했던 글들을 하나씩 다시 보고 있는데, 티스토리에서 전부 코드 블럭이 뭉개져서 업로드 되는 것을 발견했다.. 천천히 하나하나 전부 티스토리 에디터로 다시 수정작업을 진행할 예정이다.(ㅠㅠ) 이번 글의 목표는 다음과 같다. 프로퍼티와 필드(백킹 필드)에 대한 내용 이해하기 그럼 긴말 없이 바로 시작해 보자. ✍🏼 프로퍼티(Properties) 코틀린에서는 두가지 방법으로 프로퍼티를 선언할 수 있다. 변경이 가능한 (= Mutable) 변수로 var 값을 읽기만 가능(read only)하고, 변경할 수 는 없는( = Immutable) 변수로 val class Address{ var name : String = "Park Sang Hyun" var street: String = ..
[Kotlin basic] forEach Kotlin에서 forEach를 사용하는 방법에 대해 좀더 심화적으로 알아보겠습니다. # 개요 forEach는 순서가 있는 데이터(CharSequence, Iterable 등)에 대한 확장함수로, 기존의 for문을 사용하던 외부 반복(Iteration)에서 내부 반복(Iteration)으로 바꿔줄 수 있게 하여 가독성을 좋게 만든 확장 함수입니다. 먼저 외부 반복에 대해 알아보겠습니다. 외부 반복이란 다음과 같이 외부에서 반복하는 것을 말합니다. fun main() { val exampleList = mutableListOf(1, 2, 3) for (numb in exampleList) { println(numb) } } 이 코드를 forEach를 이용하여 내부반복으로 바꾼다면 다음과 같이 바뀌게 됩니다..
[Kotlin Tip] 대소문자 변환 문자열의 대소문자를 변환하는 방법에 대해서 간단하게 작성합니다. > 대문자로 변환 : toUpperCase str.toUpperCase() > 소문자로 변환 : toLowerCase str.toLowerCase() 변환할 수 없는 숫자나 기호는 알아서 무시됩니다. fun main() { val str:String = "lowercase" val str2:String= "UPPERCASE" println(str.toUpperCase()) println(str2.toLowerCase()) } 대소문자를 판별하고 싶다면, > 대문자 여부 판단 : isUpperCase() -> boolean타입으로 반환됨 str.isUpperCase() > 소문자 여부 판단 : isLowerCase() -> boolean타입으..
[Kotlin Tip] 코틀린 변수 타입 출력하기 val x:Int = 3 println(x::class.simpleName) 리플렉션(reflection)을 위해 더블콜론(::) class해주고, .simpleName하면 변수의 타입을 알 수 있다.