굥뷰를 햡시댜

[Kotlin] Basic Syntax 본문

언어/Kotlin

[Kotlin] Basic Syntax

GodZ 2019. 4. 23. 05:52

(+ Inflearn -> 새차원님의 Kotlin 강좌를 토대로 공부했습니다.)

 

1. 패키지 정의

  • 파일 최상단에 정의해야 합니다.
  • 디렉터리와 패키지를 일치시키지 않아도 됩니다.
  • ex) 아래와 같이 선언하시면 됩니다.
package my.demo

/* ..... */

 

2. 함수 정의

  • 함수는 'fun' 키워드로 정의합니다.
  • ex) fun '함수명'('매개변수 이름': '타입', '매개변수 이름': '타입'): '반환형 타입' 순으로 함수를 선언했습니다.
fun sum(a: Int, b: Int): Int {
	return a + b
}
  • 함수 몸체가 식(expression)인 경우 return을 생략해서 함수를 작성할 수 있습니다.
  • ex) 몸체가 식인 경우 아래와 같이 함수를 작성하시면 됩니다.
  • 아래와 같이 작성하게 되면 컴파일러가 알아서 return 타입을 추론해줍니다.
fun sum(a: Int, b: Int) = a + b
  • 함수의 return 타입을 따로 명시하지 않는 경우 Unit(Object)로 return 합니다.
  • Unit은 void와 같은 역할을 합니다.
  • 정리 : 함수의 반환 타입을 쓰지 않으면 디폴트 값으로 Unit이 됩니다.
  • ex) 아래와 같이 작성해주시면 됩니다.
//Unit 쓴 경우
fun printKotlin(): Unit {
	println("Hello Kotlin")
}

//Unit 안 쓴 경우
fun printKotlin() {
	println("Hello Kotlin")
}

 

3. 지역변수 정의

val var
  • 읽기 전용 변수(immutable 변수)
  • 값의 할당이 1회만 가능
  • mutable 변수(변경이 가능함)
  • 값을 여러번 할당할 수 있음
//val
//잘 선언한 예
val a:Int = 1	//선언과 동시에 할당해줘야함
val b = 2		//타입을 따로 선언하지 않더라도 컴파일러가 b의 타입을 자동으로 Int로 추론해줌

//잘못 선언한 예
val c:Int		//컴파일 에러, 초기화가 필요함
c = 11			//컴파일 에러, 읽기 전용


//var
var x = 5
x += 1

 

5. 문자열 템플릿

  • 문자열 보간법(String Interpolation)
  • '$' 기호를 이용하여 변수에 직접 접근하여 값을 가져올 수 있다.
  • ex) 아래 코드를 보면 $를 이용하여 값을 직접 가져온 것을 확인할 수 있다.
  • Kotlin의 강력한 장점중 하나이다. { }를 사용해서 문자열 안에서 문자열을 유동적으로 바꿀 수 있다.
var a = 1
var s1 = "a is $a"		//-> s1에는 "a is 1"이 저장됨

a = 2	//a의 값을 2로 바꿔주고

val s2 = "${s1.replace("is", "was")}, but now is $a"

//s1의 "is"를 "was"로 바꿔주고 a의 값을 가져와서
//s2에는 "a was 1, but now is 2"가 저장됨

 

6. 조건문(if)

  • 다른 프로그래밍 언어에서 사용하는 것과 똑같음
  • ex) 아래와 같이 활용할 수 있다.
fun maxOf(a: Int, b: Int):Int {
	if(a>b) return a
    else return b
}

//함수 몸체가 식(expressioin)인 경우
fun maxOf(a:Int, b:Int) = if(a>b) return a else b

 

7. nullable

  • 값이 null일 수 있는 경우 타입에 nullable 마크를 명시해야 함 -> '?'
  • ex) '?'는 ?앞의 반환할 타입(Int)이 나올수도 있고 null이 나올수도 있다는 것을 의미함.
fun parseInt(str: String): Int? {
	//정수가 아닌 경우 null 리턴
}
  • nullable을 사용했으면 항상 null 체크를 해줘야 함.
  • ex) 아래와 같이 check
fun printProduct(arg1: String, arg2: String) {
	val x: Int? = parseInt(arg1)
    val y: Int? = parseInt(arg2)
    
    //null인지 체크해주는 부분
    if(x != null && y != null) {
    	println(x * y)
    }
    
    else {
        println("either '$arg1' or '$arg2' is not a number")
    }
}

 

8. 자동 타입 반환

  • 타입 체크만 해도 자동으로 타입 변환이 됨
  • 'is'를 사용
  • ex) if(obj is String)
fun getStringLength(obj: Any): Int? {	//Any는 Object type으로 최상위 클래스
    if(obj is String) {	
    // -> 자동으로 obj의 타입이 String으로 바뀜
    	return obj.length
    }
    return null	//obj가 null일 경우 null 반환
}

 

9. While loop

  • 그냥 while문 처럼 사용하면 됨.

10. When expression

  • Kotlin의 강력한 기능중 하나임..
  • 객체, 정수, String 등등.. 모든 타입에 대해 사용 가능
  • ex) 다음과 같이 사용할 수 있음
//함수 몸체가 식(expression)인 경우
fun describe(obj: Any): String =
	when(obj) {	
        1 -> "One"
        "Hello" -> "Greeting"
        is Long -> "Long"
        !is String -> "Not a String"
        else -> "Unknown"
    }

 

11. ranges

  • 'in' 연산자를 이용해서 숫자 범위 체크 가능
  • ex) 예제를 보는게 더 빠르다
//
val x = 3
if(x in 1..10) {	//..은 범위를 나타낸다. 여기서는 1부터 10까지를 나타낸다(1과 10 포함)
	println("fits in range")
}

 

12. Collections

  • Collections도 in으로 loop열기 가능함
  • ex) in으로 loop 실행
val items = listOf("apple", "banana", "kiwi")
for(item in items) {	//items에 있는 원소 하나씩 순차적으로 반복
	println(item)
}
  • in으로 해당 값이 collection에 포함되는지 체크 가능
  • ex) 다음과 같이 in으로 해당 값이 싶오..
val items = setOf("apple", "banana", "kiwi")

while {
    "orange" in items -> println("juicy")
    "apple" in items -> println("apple is fine too")
}
  • 람다식을 이용해서 컬렉션에 filter, map등의 연산을 하는 기능
var fruits = listOf("banana", "avocado", "apple", "kiwi"): 
fruits
    .filter(it.startsWith("a");
    .sortedBy{it}
    .map{it.toUpperCase()}
    .forEach(println(it))
}

 

'언어 > Kotlin' 카테고리의 다른 글

[Kotlin] Inheritance  (0) 2019.04.24
[Kotlin] Class  (0) 2019.04.24
[Kotlin] Packages, Return and Jumps  (0) 2019.04.24
[Kotlin] Control Flow  (0) 2019.04.24
[Kotlin] Basic Types  (0) 2019.04.23
Comments