전체 글 46

kotlin의 원시타입 (int, boolean, any)

6.2 코틀린의 원시 타입 6.2.1 원시 타입 : Int, Boolean java 원시타입 int 등 값이 직접 들어간다 참조타입 String 등 메모리 상의 객체 위치가 들어간다 참조 타입이 필요한 경우, wrapper type을 이용해서 원시 타입을 감싸서 사용한다 kotlin 원시타입, 참조 타입을 구분하지 않는다 숫자 타입 등 원시타입의 값에 대해 메소드를 호출할 수 있다 6.2.2 널이 될 수 있는 원시 타입 : Int?, Boolean? java 에서 kotlin 변수 사용 널이 될 수 있는 코틀린 타입은 자바 원시 타입으로 표현할 수 없다 자바의 래퍼 타입으로 컴파일된다 제네릭 클래스 래퍼타입을 사용 val listOfInts = listOf(1,2,3) 래퍼인 Integer 타입으로 이뤄..

Languages 2020.05.07

kotlin의 null 가능성 (?. ?: !!)

6.1 널 가능성 NPE : null pointer exception 코틀린은 Nullability로 NPE를 피할 수 있게 해준다 6.1.1 널이 될 수 있는 타입 코틀린은 java와 다르게 null 이 될 수 있는 타입을 명시적으로 지원한다 모든 타입은 기본적으로 널이 될 수 없는 타입이다 ?가 붙어야 널이 될 수 있다 널이 될 수 있는 타입의 변수인 경우 수행할 수 있는 연산이 제한된다 변수.메소드() 형식이 제한된다 ?. !! 등을 써줘야 한다 널이 될 수 있는 값을 널이 될 수 없는 타입의 변수에 대입할 수 없다 널이 될 수 있는 타입의 값을 널이 될 수 없는 타입의 파라미터를 받는 함수에 전달할 수 없다 null과 널이 될 수 있는 변수를 비교한 다음에는 위의 제한 되는 부분들이 모두 풀리고 ..

Languages 2020.05.07

kotlin의 수신객체 지정 람다 (with, apply)

수신 객체 지정 람다 : with 와 apply kotlin 표준 라이브러리 with, apply kotlin에만 있는 기능 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 하는 것 이 람다를 수신객체 지정 람다 (lambda with receiver) 라고 부른다 🧵 with 함수 코틀린은 with 함수를 언어 구성요소가 아닌 라이브러리 함수를 통해 제공함 ? fun alphabet(): String { val stringBuilder = StringBuilder() return with(stringBuilder){ for (letter in 'A'...'Z'){ this.append(letter) } append("\nNow I know..

Languages 2020.04.26

java 함수에 kotlin lambda 식 메소드로 전달하기 (자바 함수형 인터페이스)

자바 함수형 인터페이스 활용 코틀린 lambda를 java API에 사용할 수 있다 SAM 인터페이스 == functional interface single abstract method : 단일 추상 메소드 interface에 추상 메소드가 하나만 있는 경우에 사용가능 ? java로 작성한 functional interface에서만 동작 SAM conversions이 동작하면 lambda 식을 사용할 수 있다 👨‍👨‍👧‍👦 자바 메소드에 람다를 인자로 전달 // java public interface OnClickListener { void onClick(View v); } // kotlin button.setOnClickListener { v -> ...} // java void postponeComp..

Languages 2020.04.26

kotlin의 lazy evaluation (sequence, map, filter)

5.3 지연 계산(lazy) 컬렉션 연산 map, filter 컬렉션 함수 결과 컬렉션을 즉시 생성한다 // 그냥 collection 함수 연쇄적으로 사용 people.map(Person::name).filter{it.startsWith("A")} // sequence 사용 people.asSequence() .map(Person::name) .filter{it.startsWith("A")} .toList() filter, map 모두 collection을 반환한다 collection의 크기가 커지면 위 연쇄 호출은 리스트 2개를 만들게 되어 효율이 떨어진다 각 연산이 컬렉션을 직접 사용하는 대신 시퀀스 사용하도록 변경해야 함 sequence 사용하는 경우 collection을 sequence로 변경 한..

Languages 2020.04.26

kotlin의 collection 관련 함수 (filter, map, groupby ,flatMap, 술어함수)

kotlin 에서의 collection 함수 API 여기에 등장하는 함수중에 코틀린에서 새로 만들어진 함수는 없다 👺 filter 와 map val list = listOf(1,2,3,4) println(list.filter{it %2 == 0}) println(list.map{it*it}) filter 함수 collection을 iteration하면서 주어진 lambda 에 각 원소를 넘겨서 true를 반환하는 원소만 모은다 예제 : 짝수만 출력하게 됨 filter 함수는 collection에서 원소를 제거한다 원소를 return 하지는 않는다 map 함수 원소를 return 해준다 예제 : 각 원소의 제곱값을 가진 collection을 반환한다 return값과 원본의 원소 개수는 같다 val peop..

Languages 2020.04.26

kotlin에서의 람다식과 멤버 참조 (lambda, ::, 값으로 표현된 함수)

kotlin에서의 람다식과 멤버 참조 (lambda, ::, 값으로 표현된 함수) 람다 다른 함수에 넘길 수 있는 작은 코드 조각 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있다 람다 주 사용처 컬렉션 처리 람다 식은 java 에도 있다 (버전 8부터) 😎 람다 소개 : 코드 블록을 함수 인자로 넘기기 람다 이전의 방식 무명 내부 클래스 사용 (java) // 이름이 없는 클래스 (watchTV) 예시 abstract class TV { public abstract void powerOn(); } public class Test{ public static void watchTV(TV tv){ tv.powerOn(); } public static void main(String[] args){ wa..

Languages 2020.04.26

kotlin in Action 4장 예제 (by, selaed, factory method, constructor)

by 예제 interface Attackable { fun attack(): String } class Knife : Attackable { override fun attack() = "attack with knife" } class Gun : Attackable { override fun attack() = "attack with gun" } class Attacker(val impl: Attackable) : Attackable by impl { fun attackEmoji() = "${attack()} 😱😵" } fun main() { println(Attacker(Knife()).attackEmoji()) println(Attacker(Gun()).attackEmoji()) } 하위 클래스가 상위..

Languages 2020.04.26

kotlin으로 java springboot 프로젝트 리팩토링 하기 2

kotlin 으로 java springboot 프로젝트를 리팩토링 하며 알게된.. java와 kotlin의 차이 java와 kotlin 코드에 사용되는 몰랐던 개념 좋은 코드를 위한 고민 Any type을 Any라는 키워드로 지정할 수 있다 Any Java의 Object에 해당된다 when 인수에 대응하는 모든 분기를 조건이 충족될때까지 순차적으로 맞춰본다 모든 가능한 경우가 존재한다고 증명할 수 없는 경우에 else는 꼭 있어야 한다 companion object 코틀린에는 정적변수 혹은 메소드가 없고, 대신 패키지 내에 함수를 선언하여 사용할 수 있다 kotlin은 static 키워드 대신 companion object 기능을 제공 companion은 클래스 내부에 companion이라는 정적(sta..

Backend 2020.04.19

kotlin의 가시성 (open, final, abstract), 생성자

4장. 클래스, 객체, 인터페이스 😤 클래스 계층 정의 kotlin의 가시성/접근 변경자는 자바와 비슷하지만 아무것도 지정하지 않은 경우 기본 가시성은 다르다 sealed 코틀린에 새로 도입됨 클래스 상속을 제한 🤪 kotlin 인터페이스 코틀린 인터페이스 안에는 추상 메소드 뿐 아니라 구현이 있는 메소드도 정의할 수 있다 interface에는 아무런 field도 들어갈 수 없다 interface Clickable { fun click() fun showOff() = println(“I’m clickable!") } interface Focusable { fun showOff() = println(“I’m focusable!”) } 이 인터페이스를 구현하는 모든 비추상 클래스는 click에 대한 구현을 ..

Languages 2020.04.19