-
Kotlin 문법 및 사용법 정리개발 모음집/Kotlin 2021. 4. 26. 15:00
1.코틀린이란?
- Intellj로 유명한 젯브레인의 오픈소스 그룹에서 개발된 언어
- 2017년 5월 구글I/O 행사에서 안드로이드의 공식 언어로 코틀린이 지정됨
- 자바,안드로이드 100% 호환가능한 언어 --> 코틀린도 JVM위에서 동작함
- 코틀린 프로그램의 확장자는 .kt
[ Kotlin 공식 사이트 ]
https://kotlinlang.org/docs/reference/
Reference - Kotlin Programming Language
kotlinlang.org
[ Kotlin 소스 작성 및 테스트를 해볼 수 있는 사이트 ]
이클립스나 인텔리제이 등의 IDE 툴 환경셋팅을 하지 않아도 kotlin 소스를 작성해보고 테스트해볼 수 있다.
https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt
Try Kotlin
Try Kotlin right in the browser.
try.kotlinlang.org
2. 코틀린문법
2-1. 변수선언 및 초기화
val data1:Int = 10 // 기본적으로 변수는 val(혹은 var) 변수명:타입 = 값 으로 선언 // val는 변경할 수 없는 값(read-only) var는 변경할 수 있는 값 val data2:String = 'test' val data3 = 20 // 다음과 같이 데이터타입을 명시해주지 않아도 되는데 명시하지 않으면 // 대입하는 초깃값에 따라 적절한 타입으로 알아서 적용됨 // 이런걸 '타입추론' 이라고 함 var data4:String = 'hello world' data4 = 'change value' //var 변수라서 값 변경 가능
val nulldata:String = null // error // ?기호를 붙이지 않으면 null을 대입할 수 없는 변수라는 의미 val nulldata2:String? = null //String val이지만 null도 허용 var nulldata3:String? = null fun main(args: Array<String>){ nulldata2 = "hello" //error //val변수의 값을 변경하려 했으므로 재할당시 에러 nulldata3 = "hello world~" }
//상수변수 : 처음에 대입한 값을 변경할 수 없고 항상 초깃값만을 반환하도록 보장하는 변수 const val val_1:Int = 10 const var val_2:Int = 20 // error // var변수에는 const를 사용할 수 없음 public static final int CONST_VAL = 10; //자바에서의 상수변수 사용 예 const val CONST_VAL = 10 //코틀린에서의 상수변수 사용 예 //코틀린에서는 static 예약어가 없음
2-2. 함수사용방법
// fun 함수명(매개변수명:타입) : 반환타입{} 으로 함수를 선언함. // 함수를 선언할때 fun이라는 예약어를 사용한다는 것 기억! fun sum(a:Int , b:Int) : Int { return a+b } 혹은 fun sum(a:Int, b:Int) = a+b 로 작성 가능
//함수 오버로딩 fun cal(a:String) { println("String") } fun cal(a:String,b:Int) { println("String,Int") } fun cal(a:String,b:Int,c:String) { println("String,Int,String") } fun cal2(a:String) { println("a parameter only String") } fun cal3(a:String?) { println("a parameter null or String") } // ?를 붙임으로써 null param도 가능 fun cal4(a:String = "test"){ println("a 의 기본 값은 test라는 의미") } --> cal() 호출시 a 값은 test가 됨 --> cal(xxx) 호출시 a 값은 xxx가 됨
//Unit fun Funtion_1(){} fun Funtion_2() : Unit{} //Funtion_1에는 return타입이 없음. 기본적으로 Unit으로 선언된것과 같음 //Funtion_2와 같은 형태라고 생각하면 되며 java에서는 void와 비슷하다고 이야기할 수 있음.
2-3. 데이터타입
//코틀린에서의 모든것은 객체(Object)다. //자바에서는 데이터타입을 명시할 때 int,String과 가은 기초타입과 Integer,Double등의 Wrapper //클래스로 구분해서 사용하지만 코틀린에서는 기초타입 자체가 없다. //int,String,Double등은 모두 클래스고, 이 클래스로 타입을 명시하여 선언한 변수들은 //그 자체로 객체가 된다. val num : Int = 10 val result = num.minus(5) fun main(args : Array<String>){ println(result) //5 }
fun main(args: Array<String>) { var char = "x" // error // char는 ''로 작성해야 함 var str:String = 'xx' // error // String은 ""로 작성해야 함 }
//코틀린 클래스의 최상위 클래스가 Any //Any로는 어떤 타입의 데이터도 대입할 수 있음. //특정 변수의 타입을 예츠갈 수 없을 때 유용하게 사용됨 fun _get(obj : Any) : Any{ if(obj is String){ return obj.length } return obj } fun main(args: Array<String>) { println( _get(333) ) // 333 } //변수가 Any타입으로 선언되어썽도 null을 허용하려면 ?를 명시적으로 선언해줘야 함. var data:Any? = null
//형변환 var a1 : Int = 10 var a2 : Double = a1 // 에러 var a3 : Double = a1.toDouble() // toByte() // toShort() // toInt() // toLong() // toFloat() // toDouble() // toChar() // toString()
2-4. 변수출력
//코틀린에서는 출력시 System.out.print()를 쓰지 않고 print() println()을 쓴다. fun main(args: Array<String>) { var name : String = "hong-kil" println(name) //hong-kil println("${name}") //hong-kil //문자열 내 변수출력 방법은 "$변수명" 또는 "${표현식}" 으로 사용한다. println("${name[3]}") //g }
2-5. 컬렉션타입(Map,Array,List...)
2-5-1. Array
fun main(args: Array<String>) { //array 만드는 방법 arrayOf() var array = arrayOf(1,2,3,4,5) array[0]=6 array[1]=7 println("${array[0]}") //6 println("${array[3]}") //4 println("${array.get(1)}") //7 }
fun main(args: Array<String>) { //array 만드는 방법 var array = arrayOf(1,2,"xxxx",4,5) var arrayInt = arrayOf<Int>(1,2,3,4,5) //Int타입의 data만 추가가능 array[2] = "vvvvv" println("${array[2]}") //vvvvv arrayInt[2] = "ddddd" //error //Type mismatch: inferred type is String but Int was expected var arrayInt2 = intArrayOf(10,20,30) //기초타입과 관련해서 위와같이 배열을 선언할 수도 있음 //charArrayOf(), longArrayOf(), booleanArrayOf() 등... }
var array2 = arrayOfNulls<Any>(3) array2[0] = 100 array2[1] = "hello" array2[2] = "world" println( "${array2[0]} ${array2[1]} ${array2[2]}") //100 hello world var emptyArray = Array<String>(3,{""}) //배열의 초깃값을 빈상태("")로 println( "${emptyArray[0]} _ ${emptyArray[1]} _ ${emptyArray[2]}") // _ _
2-5-2. List, Set, Map
fun main(args: Array<String>) { // List listOf() 불변 // MutableList mutableListof() 가변 var list : List<String> = listOf("hello","world") println("${list[0]}") //hello //list.add("!!!") //Unresolved reference: add //listOf는 불변이라 set() 또는 add() 함수를 제공하지 않음 var muList : MutableList<String> = mutableListOf("hello","world") muList.add("~~~") //mutableListOf는 가변이므로 set() 또는 add() 를 제공함 muList.add("!!!") println("${muList[0]} _ ${muList[1]} _ ${muList[2]} _ ${muList[3]}") //hello _ world _ ~~~ _ !!! //arrayList 클래스를 직접 사용하면 가변 상태로 이용이 가능함 val arrayList : ArrayList<String> = ArrayList() arrayList.add("aaa") arrayList.add("bbb") println("${arrayList[0]} _ ${arrayList[1]}") //aaa _ bbb arrayList.set(1,"ccc"); println("${arrayList[0]} _ ${arrayList[1]}") //aaa _ ccc }
fun main(args: Array<String>) { //mapOf 불면 //mutableMap 가변 //Pair로 선언방법 var map = mapOf<String,String>(Pair("1","hello"),Pair("2","world")) println("${map.get("1")} _ ${map.get("2")}") //hello _ world //map.put("3","!!!") //error //Unresolved reference: put //to로 선언방법 var map2 = mapOf<String,String>(Pair("1","hello"),Pair("2","world")) println("${map2.get("1")} _ ${map2.get("2")}") //hello _ world var mutableMap = mutableMapOf<String,String>() mutableMap.put("1","hello") mutableMap.put("2","world") println("${mutableMap.get("1")} _ ${mutableMap.get("2")}") //hello _ world }
//set도 동일(예제생략)
import java.util.* fun main(args: Array<String>) { //코틀린이 JVM에서 수행되는 프로그램이라는 가정하에 JAVA에서 사용하던 java.util.*의 //List, Set, Map등 사용가능 var list : ArrayList<String> = ArrayList() list.add("xxx") var map : HashMap<String,String> = HashMap() map.put("kkey","vvalue") var _set : HashSet<String> = HashSet() _set.add("xxx") }
'개발 모음집 > Kotlin' 카테고리의 다른 글
Kotlin 문법 및 사용법 정리 (3) (0) 2021.04.26 Kotlin 문법 및 사용법 정리 (2) (0) 2021.04.26