Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- knn
- 논문작성
- mMAPE
- SMAPE
- KAKAO
- 카카오
- Overleaf
- 파이썬을파이썬답게
- 프로그래머스
- TypeError
- 논문
- Scienceplots
- python 갯수세기
- Pycaret
- mes
- 에러해결
- Alignments
- Python
- 평가지표
- MAPE
- 스택
- 논문editor
- PAPER
- n_sample
- 코테
- Mae
- n_neighbors
- RMES
- iNT
- Tire
Archives
- Today
- Total
EunGyeongKim
코틀린 특징 본문
- 링크 :
- 기본은 정적 타입 언어
- 컴파일 시 변수의 자료형(type)이 결정되니 안전
- 정적타입(statically typed)반대는?
- 정적타입 : C, C++, JAVA, Kotlin,,,
- 동적타입 : Javascript, python, objective-C, PHP
- → 동적타입(Dynamically typed)
- 단, kotlie/JS를 쓸때는 동적타입 지원을 위해 dynamic 제공
- 자료형(type)을 명시하지 않아도 자료형 추론이 가능
- interoperable
- JAVA와 100% 호환(Kotlin / JVM)
- 코틀린 컴파일러는 자바 중간코드(ByteCode)
- 이미 존재하는 자바 라이브러리를 그대로 이용
- Java와 kotlin을 섞어서 써도 됨
- JAVA와 100% 호환(Kotlin / JVM)
## JAVA
public class Customer{
public static final String LEVEL = "Basic";
public static void login(){
System.out.println("login");
}
}
## kotiln
fun main(){
println(Customer.LEVEL)
Customer.login()
}
java 보다 kotiln이 더욱 간편하게 코드를 쓸 수 있음.
## java
public class MyClass{
public void callKotlin(){
System.out.println(HelloKt.world("helld", "world!!"));
}
}
//// kotlin
// filename = 'Hello.kt'
fun world (a:String, b:String):String{
return "$a, $b Kotlin !!"
}
- null safety
- NPE를 방지할 수 있는 안전성
- Null point Exception
- 널이 가능한 자료형(nullable type)과 불가능한(non-null type) 자료형을 구분
- NPE를 방지할 수 있는 안전성
//// kotlin
var a:String? null
var b:String = "hello"
b = null // Error!!
/* 컴파일 안됨*/
var name : String? = null
val len = name.length // Error : null 가능성이 있는 경우 length에 접근 불가
// 컴파일 가능 , 세이프콜(safe call) 사용
var name : String? null
val len = name?.length //name이 null이 아닐 경우에만 length에 접근
- immutable
- 상태를 바꾸지 않는 불변성 제공
- val(value) = immutable = final variable = 할당후 변경 불가
- var(variable ) = mutable = non-final variable = 언제든 변경 가능
- 상태를 바꾸지 않는 불변성 제공
//// kotlin
val one : Int = 10 // Java: final int one = 20;
one = 12 // Error
var two : Int = 2
two = 5 // ok
val mutableList = mutavleListOf<Int>(1,2,3,4)
// .add()나 .remove()를 사용해 요소 추가 삭제 가능
val immutableList = listOf<Int>(1,2,3,4)
// .add()나 .remove()를 사용해 요소 추가 삭제 불가능
- Concise
- 코드의 간결성 제공
- 자바처럼 장황하지 않은 깔끔함, 보일러플레이트 코드의 최소화
- 코드의 간결성 제공
// java
public class Address{
private String city;
private Country country;
public Address(String city, Country country){
this.city = city;
this.country = country;
}
public String getCity(){
return city;
}
public void setCity(String city){
this.city = city;
}
public Country getCountry(){
return country;
}
public void setCountry(Country country){
this.country = country;
}
}
⬇⬇⬇⬇
//// kotlin
data class Address(var city:String, var country:Country)
- Extension Functions
- 확장함수
- 클래스 상속이나 디자인 패턴을 사용하지 않고도 새로운 기능 확장 가능
- 단, 너무 많이 사용하면 기능들을 남발하게 되므로 가독성이 떨어짐
- 클래스 상속이나 디자인 패턴을 사용하지 않고도 새로운 기능 확장 가능
- 확장함수
//// kotlin
class original {
fun onlyOneFunction(){
println("onle one!")
}
}
fun original.myExtension(): String{
return "original 클래스에 멤버 메서드 추가!!"
}
fun main(){
val origianlObj = original()
val result = origianlObj.myExtension()
println(result)
}
- Functional Programming
- 함수형 프로그래밍
- 함수의 유기적 연결을 통한 프로그래밍 방식
- 함수가 일급객체(first-class citizens)로 사용할 수 있게 됨
- 여기저기 사용가능
- 권한이 많아짐함수형 프로그래밍
- 함수형 프로그래밍
- 람다(lambda)식을 통해 선언되지 않고도 익명의 함수기능을 식에 전달할 수 있음
- 람다 : 이름이 없는 함수 체계
- 선언하지 않고도 함수의 기능을 식에 따라 사용 가능
- 람다 : 이름이 없는 함수 체계
//// kotlin
fun calculator(a: Int, b:Int, sum:(Int, Int) -> Int):Int{
return a+b+sum(a,b)
}
fun main(){
val out = calculator(11, 10, {a, b -> a+b})
// calculator(11, 10) {a, b -> a+b}와 동일
// 11+10+(11+10) = 42
println(out)
}
//// kotlin
fun add(a:Int, b:Int) = a+b
fun subtract(a:Int, b:Int) = a-b
fun main(){
val functions = mutableListOf(::add, ::subtract)
println(functions[0])
// fun add(kotlin.Int, kotlin.Int):kotlin.Int
println(functions[0](12, 30))
// 12 + 30 = 42
println(functions[1](57, 15))
// 57-15 = 42
}
- Multiplatform
- DSL
- Coroutines
- Multiplatorm
- higher-order functions
- OOP
- 다양한 플랫폼
- 사용가능한 플랫폼
- kotlin / JVM : 자바 가상머신상에서 동작하는 앱을 만들 수 있음
- kotlin / JS : 자바스크립트에 의해 브라우저에서 동작하는 앱을 만들 수 있음
- kotlin / Native : LLVM 기반의 네이티브 컴파일을 지원해 여러 타깃의 앱을 만들 수 있음
- 사용가능한 플랫폼
- kotlin / Navtive에서의 타깃
- iOS (arm32, arm64, emulator x86_64)
- MacOS(x86_64)
- Android(arm32, arm64) -> 주로 64에서 돌음
- Windows(mingw x86_64)
- Linux(x86_64, arm32, MIPS, MIPS little endian)
- WebAssembly (wasm32) -> 웹엔진상에서 돌 수 있음
- 비교문과 엘비스 연산자
val len = if(str1 != null) str1.length else -1
val len = str1?.length ?: -1
Comments