일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- 안드로이드
- Android Apk
- R프로그래밍
- CSS사용법
- fragment
- tomcat
- MySQL
- html
- spring
- DataTable
- Exception
- JavaScript
- android fragment
- release unsigned
- android error
- jQuery
- error
- release Apk
- Kotlin
- css
- apache gzip
- Firebase
- Program type already present
- FLUTTER
- java error
- Android Apk 이름 변경
- Android
- Eclipse
- Android Apk 이름
- Today
- Total
selfstarter
Kotlin 사용법(Kotlin Summary with kotlin tutorial) 본문
Kotlin Summary
Benefit of Kotlin
1) Google I/O 2017에서 android의 공식언어로 지정되었고, Google에서 Kotlin 사용을 권장하고 있다(최근 android 예제에아예 JAVA 언어로 된 예제가 없는 경우도 있다)
2) Java에서 Asynctask가 없어졌고, kotlin에서 Coroutine을 사용하여 더 쉽고 간결하게 작업할 수 있다
3) 변수가 NullSafty한지 아닌지를 사용자가 지정하여 예외를 미연에 방지할 수 있다
4) Java와 Kotlin언어 호환 가능
function
-
Unit은 return value가 없음을 의미한다. Unit을 생략해도 된다
-
$연산자를 통해 따옴표 안에 메시지를 출력할 수 있다. 또 return 값이 생략되어있으므로 Unit return이다. 함수의 parameter에 기본값을 줘서 parameter를 넘기지 않을 때 기본값을 지정할 수 있다
-
두개의 Int parameter를 받고 Int를 return하는 함수이다
-
한줄로 처리가 가능하면 함수에 괄호를 치지않고 사용이 가능하다. 이 때 return에 대한 수식만 정의할 수 있다(한줄이라고해서println사용하면에러발생)
// 1 fun printString(str : String): Unit { println(str) } //2 fun printMessageWithPrefix(message: String, prefix: String="Info") { println("[$prefix] $message") } // 3 fun sum(num1: Int, num2: Int): Int { return num1 + num2 } fun multiply(num1: Int, num2: Int) = num1 * num2 fun main() { printString("hihihi") printMessageWithPrefix("hi", "Debug") printMessageWithPrefix("Debug") println(sum(10,20)) println(multiply(30,40)) }
Infix function
-
데이터타입에 function을 추가하는 방식. 아래 예제에서는 String에 onto 라는 function name을 가지는 함수를 선언했다
-
기존에 function 호출하는 형식(function(param...))과 다르게 두개의 인자 사이에 function을 호출하는 함수
-
String.onto(other: Int)에서 맨 앞에 String은 앞에서 올 데이터의 타입을 가르킨다. String이라고 지정했으므로 infix function 앞에 있는 "Today is"라는 String 데이터 형이 온 것이다
-
String. 다음은 함수 이름이다. 괄호를 사용하지 않는 함수라고 생각하면 된다
-
other: Int는 인자의 데이터 타입이다
-
infix function 안에서 this는 function명 앞에 있는 String을 의미한다("Today is")
infix fun String.onto(other: Int) = Pair(this, other) val myPair = "Today is" onto 4 println(myPair) println(myPair.javaClass.name)
-
infix function to는 Pair Type으로 리턴해준다. to는 우리가 선언하지 않았지만 기본라이브러리에 들어 사용할 수 있다
var pair = 1 to "hello" println(pair)
Operator Functions
- 연산자를 재정의 할 수 있다
- 첫번째 예제에서 times는 * 연산자이다
- 두번째 예제에서 get()은 bracket-access syntax를 사용한다
operator fun Int.times(str: String) = str.repeat(this)
println(2 * "Hello ")
operator fun String.get(range: IntRange) = substring(range)
val str = "Today is Monday~; I'm happy"
println(str[0..20])
vararg parameter
-
vararg parameter는 여러개의 같은 DataType의 변수를 마치 하나의 list 안에 들어가 있는 것 처럼 사용할 수 있다
-
이 때 parameter는 for문을 돌려야하기 때문에 하나로 통일해야 한다
fun main() { printAll("hi", "방가") printAllWithPrefix ("Hello", "Hi", "NicetoMeetyou", prefix="new:") } fun printAll(vararg message: String) { for (m in message) println(m) } fun printAllWithPrefix(vararg messages : String, prefix : String) { for (m in messages) println(prefix+m) }
variable
-
var 자료형은 값을 변화시킬 수 있는 변수이고, val 자료형은 값을 변경할 수 없는 불변성을 가진다
-
반드시 초기화를 하고 자료형을 사용해야한다. 그렇지 않으면 compile error가 난다
fun main() { var a : Int = 2 val b : Int = 4 a = 1 //b = 2 // immutability- println(a) println(b) var num: Int println(num) // error! }
Null Safety
-
변수 데이터 타입에 ?를 붙이지 않고 그냥 선언하면 null을 사용할 수 없다
-
변수 데이터 타입에 ?를 붙이면 null을 사용할 수 있다
fun main() { var neverNull : String = "This can't be null" neverNull = null var nullable : String? = "You can keep a null here" nullable = null var inferredNonNull = "The Compiler assumes non-null" inferredNonNull = null fun strLength(notNull : String):Int { return notNull.length } strLength(neverNull) strLength(nullable) }
Class
-
class는 괄호와 body를 생략할 수 있다.
-
new 키워드를 사용하지 않고 객체를 생성할 수 있다
fun main() { var test = Test() var user = User(1, "1234") println(user.id) println(user.pass) } class Test class User(val id: Int, var pass: String)
'App > Android' 카테고리의 다른 글
AnimatedVectorDrawable for Android (0) | 2020.05.17 |
---|---|
Android Error NotFoundException String resource ID (0) | 2020.05.06 |
Android adb command (0) | 2020.04.03 |
Android apk install (0) | 2020.04.01 |
Setting String format in Android (0) | 2020.04.01 |