Languages 20

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의 가시성 (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

Kotlin의 함수 (Collection, 확장함수, 가변 인자 함수, 중위호출)

3장. 함수 정의와 호출 🎃 Kotlin 에서 Collection 만들기 val set = setOf(1,2,3) val set2 = hashSetOf(1,7,53) val list = arrayListOf(1,7,53) val map = hashMapOf(1 to “one”, 7 to “answer”, 53 to “fifty-three”) to : 언어가 제공하는 특별한 키워드가 아니라 일반 함수이다 중위함수 : 인자가 1개인 함수 .javaClass 객체가 어떤 클래스에 속하는지를 볼 수 있다 java에서는 getClass() set2.javaClass class java.util.HashSet kotlin이 자신만의 컬렉션 기능을 제공하지 않는다는 의미 kotlin이 자체 컬렉션을 제공하지 않는 이..

Languages 2020.04.16

Kotlin과 Java의 차이 그리고 혼용

2장. Kotlin 기초 Kotlin 코드는 Java 코드와 한 프로젝트에 있어도 완벽하게 혼용 가능하고 컴파일 된다. 그리고 심지어 컬렉션 (ex. java.util.HashSet )을 공유하면서도 기능은 더 많다. 🐨 예제로 살펴보는 Kotlin의 특징 class Person (val name: String, val age: Int? = null) fun main (args: Array){ val persons = listOf(Person(“영희”), Person(“철수”, age = 29)) val oldest = persons.maxBy { it.age ?: 0 } } class 의 파라미터 파라미터 이름 뒤에 파라미터의 타입을 쓴다 ? 표시를 통해 null값이 될 수 있다는 표시를 해주고 = 뒤..

Languages 2020.04.10

Kotlin 튜토리얼

1장. Kotlin 이란 무엇이며, 왜 필요한가? 🐨 Kotlin 튜토리얼 코틀린 튜토리얼 링크 IntelliJ IDEA 튜토리얼 사용 kotlin getting-started hello world 출력 프로그램 만들어보기 java와 차이점 system.out.println —> println 코틀린 코드 컴파일 코틀린 소스코드 확장자 : .kt 코틀린 컴파일러 또한 자바 컴파일러처럼 소스코드를 분석해서 .class 파일을 만들어낸다 커맨드라인 실행방법 kotlinc -include-runtime -d java -jar 코틀린 런타임 라이브러리 코틀린 컴파일러로 컴파일한 코드는 런타일 라이브러리에 의존 배포시 런타임 라이브러리도 함께 배포해야한다 maven, gradle등의 빌드 시스템은 알아서 런타임을..

Languages 2020.04.10