SlideShare a Scribd company logo
1 of 37
Kotlin
CONTENTS
Kotlin
소개
01
Kotlin
배경
JetBrains
Kotlin
의미
Jvm
언어
2011년7월
JavaScript,
Native
Google
I/O
01 Kotlin 소개
Kotlin
개발 철학
02
02 Kotlin 개발 철학
실용성
• 다른 언어에서 채택 후 검증된 해법과 기능 사용
• 특정 프로그래밍 스타일이나 패러다임을 강제하
지 않음
• IDE의 활용 강조 (간결한 코드패턴 제안)
간결성
• 불필요한 준비 코드를 적게
• 의도 파악이 쉬운 구문 구조 제공
• 코드 작성과 읽는 시간을 최대한 줄이자
안전성
• 적은 비용으로 높은 안정성을 달성
• 컴파일 시점에 최대한의 오류 가능성 발견
상호운용성
• 기존 라이브러리 그대로 사용 가능
• 다중 언어 프로젝트를 완전 지원
• 기존 라이브러리를 최대한 활용하며 기능 확장
Kotlin
환경
03
03 Kotlin 환경
Ant, Maven, Gradle, Kobalt, javascript 빌드 지원(intellij)
Build tool
기존 자바 프로젝트들이 사용하던 프레임워크 등 그대로 사용 가능
예) Spring, Netty, Guava, Log4j, Gson 등
Library
IntelliJ, Eclipse, Android Studio 에서 코틀린 플러그인 제공
Command Line Compiler 제공
IDE
jdk 1.6 ~ 1.8 지원
Jdk
kotlin code -> js 빌드
javascript
03 Kotlin 환경
Kotlin
특징
04
Kotlin 프로젝트 빌드 과정
04 Kotlin 특징
04 Kotlin 특징
TEXT HERE
4-1
선언 방법
04 Kotlin 특징 – 선언 방법
변수
val(value), var(variable) 두가지 키워드를 제공,
타입 추론을 제공하는 정적 타입 언어
• val: final 변수와 같음
• var: 일반 변수와 같음
• 구현부(body)가 식으로 사용 가능
• return type 생략 가능
• 함수 내부에 함수 생성 가능
함수
04 Kotlin 특징 – 선언 방법
• 기본적으로 final 속성을 가짐
• 선언시 default 생성자 정의 가능
클래스
04 Kotlin 특징 – 선언 방법
• java 1.8과 같이 메소드 구현 가능
• 변수 초기값 못 가짐
• 부모를 선택하여 함수 실행 가능
인터페이스
04 Kotlin 특징 – 선언 방법
인터페이스
04 Kotlin 특징 – 선언 방법
4-2
새로운 부분
if, when, try/catch 등의 제어 구조가 식(값 생성)
제어구조 식(expression)
04 Kotlin 특징 – 새로운 부분
04 Kotlin 특징 – 새로운 부분
when
자바 switch의 확장 개념
• 객체비교 가능
• 구문이 아니라 식
널이 될 수 있는 타입과 될 수 없는 타입을 명시적으로 지원
• 변수 선언 시 타입 뒤의 ‘?’ 여부로 판단
Null Safety - ? (nullable)
04 Kotlin 특징 – 새로운 부분
null검사와 호출을 한번에 제공
• xxx?.method() 형식, xxx가 null일 경우 null return
Null Safety - ?. (safe call)
04 Kotlin 특징 – 새로운 부분
• ?:를 코틀린에서 엘비스 연산자라 부름
• 왼쪽의 값이 null이면 오른쪽의 설정값 return
Null Safety - ?: (elvis)
04 Kotlin 특징 – 새로운 부분
어떤 클래스의 멤버 메소드인 것 처럼 호출 가능
확장 함수
04 Kotlin 특징 – 새로운 부분
객체간 연산이 가능하게 연산자를 오버로딩
• times, div, mod, plus, minus 등 지정된 함수명과 opertator 키워드 사용
산술 연산자 오버로딩
04 Kotlin 특징 – 새로운 부분
함수 타입 지정이 가능하며 함수를 인자로 사용 가능
• 람다를 jdk 1.6에서도 사용 가능
함수 타입
04 Kotlin 특징 – 새로운 부분
4-3
편해진 부분
문자열 내부에서 연산과 변수 바인딩 가능
String Template
04 Kotlin 특징 – 편해진 부분
메소드 생성시 default 파라미터 설정 가능
메소드 호출시에 오버로딩 함수처럼 사용가능
메소드 파라미터
04 Kotlin 특징 – 편해진 부분
• getter, setter 자동 생성
• copy(clone), toString, hashCode, equals등 자동 작성
data 클래스
04 Kotlin 특징 – 편해진 부분
data 클래스
04 Kotlin 특징 – 편해진 부분
객체타입 검사로 자동 캐스팅 가능
스마트 캐스팅
04 Kotlin 특징 – 편해진 부분
코틀린은 static을 제공하지 않음
object 키워드로 싱글턴 객체 사용
싱글톤
04 Kotlin 특징 – 편해진 부분
샘플 데모
05
1. intermax의 imxwsmj 모듈의 일부 클래스를 코틀린으로 컨버팅
시나리오
05 샘플 데모
2. 컴파일된 결과를 비교
3. 컴파일된 바이너리를 이용하여 실제 서비스 동작 확인
감사
합니다
”

More Related Content

Similar to Kotlin

Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docxKotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
ridex92
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
Daum DNA
 
C Language II
C Language IIC Language II
C Language II
Suho Kwon
 

Similar to Kotlin (20)

Kotlin
KotlinKotlin
Kotlin
 
Effective java
Effective javaEffective java
Effective java
 
Java to Kotlin
Java to KotlinJava to Kotlin
Java to Kotlin
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docxKotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
Kotlin 테스트 코드 결함 Intellij 플러그인 개발기.docx
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
Java script
Java scriptJava script
Java script
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
 
Java null survival guide
Java null survival guideJava null survival guide
Java null survival guide
 
C Language II
C Language IIC Language II
C Language II
 
Angular CodeLab 두번째
Angular CodeLab 두번째Angular CodeLab 두번째
Angular CodeLab 두번째
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Swift5 vs objective c
Swift5 vs objective cSwift5 vs objective c
Swift5 vs objective c
 

Kotlin

  • 6. 02 Kotlin 개발 철학 실용성 • 다른 언어에서 채택 후 검증된 해법과 기능 사용 • 특정 프로그래밍 스타일이나 패러다임을 강제하 지 않음 • IDE의 활용 강조 (간결한 코드패턴 제안) 간결성 • 불필요한 준비 코드를 적게 • 의도 파악이 쉬운 구문 구조 제공 • 코드 작성과 읽는 시간을 최대한 줄이자 안전성 • 적은 비용으로 높은 안정성을 달성 • 컴파일 시점에 최대한의 오류 가능성 발견 상호운용성 • 기존 라이브러리 그대로 사용 가능 • 다중 언어 프로젝트를 완전 지원 • 기존 라이브러리를 최대한 활용하며 기능 확장
  • 8. 03 Kotlin 환경 Ant, Maven, Gradle, Kobalt, javascript 빌드 지원(intellij) Build tool 기존 자바 프로젝트들이 사용하던 프레임워크 등 그대로 사용 가능 예) Spring, Netty, Guava, Log4j, Gson 등 Library IntelliJ, Eclipse, Android Studio 에서 코틀린 플러그인 제공 Command Line Compiler 제공 IDE jdk 1.6 ~ 1.8 지원 Jdk
  • 9. kotlin code -> js 빌드 javascript 03 Kotlin 환경
  • 11. Kotlin 프로젝트 빌드 과정 04 Kotlin 특징
  • 14. 04 Kotlin 특징 – 선언 방법 변수 val(value), var(variable) 두가지 키워드를 제공, 타입 추론을 제공하는 정적 타입 언어 • val: final 변수와 같음 • var: 일반 변수와 같음
  • 15. • 구현부(body)가 식으로 사용 가능 • return type 생략 가능 • 함수 내부에 함수 생성 가능 함수 04 Kotlin 특징 – 선언 방법
  • 16. • 기본적으로 final 속성을 가짐 • 선언시 default 생성자 정의 가능 클래스 04 Kotlin 특징 – 선언 방법
  • 17. • java 1.8과 같이 메소드 구현 가능 • 변수 초기값 못 가짐 • 부모를 선택하여 함수 실행 가능 인터페이스 04 Kotlin 특징 – 선언 방법
  • 18. 인터페이스 04 Kotlin 특징 – 선언 방법
  • 20. if, when, try/catch 등의 제어 구조가 식(값 생성) 제어구조 식(expression) 04 Kotlin 특징 – 새로운 부분
  • 21. 04 Kotlin 특징 – 새로운 부분 when 자바 switch의 확장 개념 • 객체비교 가능 • 구문이 아니라 식
  • 22. 널이 될 수 있는 타입과 될 수 없는 타입을 명시적으로 지원 • 변수 선언 시 타입 뒤의 ‘?’ 여부로 판단 Null Safety - ? (nullable) 04 Kotlin 특징 – 새로운 부분
  • 23. null검사와 호출을 한번에 제공 • xxx?.method() 형식, xxx가 null일 경우 null return Null Safety - ?. (safe call) 04 Kotlin 특징 – 새로운 부분
  • 24. • ?:를 코틀린에서 엘비스 연산자라 부름 • 왼쪽의 값이 null이면 오른쪽의 설정값 return Null Safety - ?: (elvis) 04 Kotlin 특징 – 새로운 부분
  • 25. 어떤 클래스의 멤버 메소드인 것 처럼 호출 가능 확장 함수 04 Kotlin 특징 – 새로운 부분
  • 26. 객체간 연산이 가능하게 연산자를 오버로딩 • times, div, mod, plus, minus 등 지정된 함수명과 opertator 키워드 사용 산술 연산자 오버로딩 04 Kotlin 특징 – 새로운 부분
  • 27. 함수 타입 지정이 가능하며 함수를 인자로 사용 가능 • 람다를 jdk 1.6에서도 사용 가능 함수 타입 04 Kotlin 특징 – 새로운 부분
  • 29. 문자열 내부에서 연산과 변수 바인딩 가능 String Template 04 Kotlin 특징 – 편해진 부분
  • 30. 메소드 생성시 default 파라미터 설정 가능 메소드 호출시에 오버로딩 함수처럼 사용가능 메소드 파라미터 04 Kotlin 특징 – 편해진 부분
  • 31. • getter, setter 자동 생성 • copy(clone), toString, hashCode, equals등 자동 작성 data 클래스 04 Kotlin 특징 – 편해진 부분
  • 32. data 클래스 04 Kotlin 특징 – 편해진 부분
  • 33. 객체타입 검사로 자동 캐스팅 가능 스마트 캐스팅 04 Kotlin 특징 – 편해진 부분
  • 34. 코틀린은 static을 제공하지 않음 object 키워드로 싱글턴 객체 사용 싱글톤 04 Kotlin 특징 – 편해진 부분
  • 36. 1. intermax의 imxwsmj 모듈의 일부 클래스를 코틀린으로 컨버팅 시나리오 05 샘플 데모 2. 컴파일된 결과를 비교 3. 컴파일된 바이너리를 이용하여 실제 서비스 동작 확인

Editor's Notes

  1. 코틀린
  2. 코틀린은 2011년 7월 최초 개발 발표가 있었고 jetbrains회사에서 개발을 하였습니다. kotlin이라는 이름은 러시아의 작은 섬이름을 따왔다고 하는데 자바처럼 섬이름으로 하고자 그렇게 정했다고 합니다. 기존 자바와 100% 호환되는 자바를 대신할 언어를 찾다가 개발이 시작 되었습니다. javascript는 1.1부터 지원하고 코틀린 프로젝트를 jvm없이 실행되는 바이너리로 컴파일이 가능 합니다. 작년 5월 구글 io에서 안드로이드 공식언어로 채택되면서 많은 관심을 받고있는 언어입니다.
  3. 코틀린의 개발철학 4가지 실용성 간결성 안전성 상호운용성 입니다 실용성의 예를들면 ~
  4. 코틀린으로 작성한 코드를 빌드하여 js파일로 만들어서 사용 가능 합니다.
  5. 코틀린 컴파일러와 자바 컴파일러가 각각 코틀린 파일과 자바파일을 클래스로 만들고 여러jar와 kotlin runtime jar를 포함하여 배포가 됩니다. 크기가 900kb정도 입니다.
  6. 세미콜론을 사용하여도 되고 생략하여도 되지만 IDE에서는 생략을 추천합니다. val 을 변경하려 하지만 불가, var는 같은 타입으로 변경 되지만 다른 타입으로 변경 불가 아래쪽에 보시면 명시적으로 타입이 지정 가능합니다.
  7. fun1- 일반적인 함수형태로 파라미터, 리턴타입, 함수구현부를 가집니다. fun2- 중괄호가 사라지고 식이 함수의 본문이 됩니다. fun3- return 타입이 생략이 가능합니다. fun4- 함수내부에 함수정의가 가능합니다.
  8. Class1- 중괄호가 없이 바로 생성이 가능합니다. Class2- 중괄호를 가지는 기본적인 형태의 클래스 입니다. Class3- 클래스 선언시 constructor 키워드를 사용하여 default 생성자를 만들 수 있고 Class4- constructor 키워드를 생략한 모습 입니다. Class5- 의 경우 open 키워드를 사용하여 final속성을 제거하여 상속이 가능한 상태 입니다. Class6- open 키워드가 사용된 Class5를 상속하여 아래와 같이 부모의 변수에 접근한 모습입니다.
  9. 인터페이스1과 인터페이스2가 동일한 fun2라는 함수명을 가지고 있는데 두가지 인터페이스를 다중 상속하여도 어떤 부모의 함수를 실행할지 선택이 가능 합니다.
  10. 인터페이스1과 인터페이스2가 동일한 fun2라는 함수명을 가지고 있는데 두가지 인터페이스를 다중 상속하여도 어떤 부모의 함수를 실행할지 선택이 가능 합니다.
  11. 자바와 다르게 if, when(자바에서는 switch), try/catch 제어구조가 식이라 값을 가집니다 따라서 아래 예제로 보면 식이기에 연산이 가능한 것을 볼 수 있습니다.
  12. 자바 switch에선 불가능했던 객체비교가 가능하고 when 또한 if와 마찬가지로 식으로 값을 가집니다. 중괄호를 사용하여 로직이 있을경우 마지막 줄이 값으로 return 됩니다.
  13. notnull 변수에는 절대 null이 들어갈 수 없게 컴파일러에서 잡아주고 함수 파라미터 또한 null값이 들어올 수 없게 잡아줍니다.
  14. ?.을 safe calls라고 부르는데 객체가 null이면 메소드call을 하지않고 null을 return 합니다. ?:는 엘비스 연산자라고 부르고 연산자 왼쪽의 값이 null이면 지정된 값을 return 합니다. 예제를 보시면 100일떄는 정상적으로 call chain이 수행되어 103 이라는 값이 나왔고 null일때는 엘비스 연산자에 의해 100이라는 값이 나온 것을 볼 수 있습니다.
  15. notnull 변수에는 절대 null이 들어갈 수 없게 컴파일러에서 잡아주고 함수 파라미터 또한 null값이 들어올 수 없게 잡아줍니다.
  16. 특정 객체에 임의의 메소드를 확장하여 멤버 메소드처럼 호출 가능합니다. 문자열의 중간부를 구하는 함수를 임의로 구현하여 문자열.확장함수 형식으로 사용이 가능합니다. 제네릭 타입도 지원하여 다양하게 확장이 가능합니다.
  17. 뿐만 아니라 ++, += 등 연산식은 모두 가능 합니다. 포인트라는 객체에 operator 키워드를 사용한 plus 함수를 구현하여 객체간 + 연산이 가능한 모습입니다.
  18. jdk1.8부터 지원하는 람다를 1.6에서도 사용할 수 있고 함수타입이 사용 가능하여 함수를 인자로 사용이 가능 합니다. 파라미터와 리턴타입을 정의해서 인자로 받는 print함수를 만들고 같은 형식의 함수 sum과 minus의 레퍼런스를 인자로 넘기는 식으로 사용이 가능 합니다.
  19. 문자열 내부에서 변수 사용과 연산이 가능합니다. if 또한 식이므로 바로 사용 가능합니다.
  20. ~~~ / 자바의 경우 이렇게 오버로딩 함수들을 전부 구현하거나, 메소드 호출시 null로 빈 파라미터를 채워서 호출 해야되는 번거로움이 있습니다.
  21. data 키워드를 class앞에 붙이면 간단하게 vo를 만들어 줍니다. 디컴파일된 class를 보면 vo 사용시 기본적으로 구현해 주어야 할 메소드들을 자동으로 작성해 줍니다.
  22. data 키워드를 class앞에 붙이면 간단하게 vo를 만들어 줍니다. 디컴파일된 class를 보면 vo 사용시 기본적으로 구현해 주어야 할 메소드들을 자동으로 작성해 줍니다.
  23. 인터페이스 Expr을 구현하는 클래스 num과 sum이 있는데 is 로 타입검사와 동시에 자동으로 캐스팅되어 해당하는 객체의 멤버가 사용 가능한 모습 입니다. // 자바의 경우 instanceof로 검사하고 별도의 캐스팅을 거친후에 사용하는 번거로움이 있었습니다.
  24. @Metadata = 코틀린 컴파일러가 class 파일 생성시 나타남. 컴파일러와 리플랙션이 사용