Kotlin

[새차원 코틀린(Kotlin) 강좌] 3. Basic Syntax 정리

YoungBok 2021. 7. 5. 02:32
728x90
반응형

 

  이번 여름방학에 코틀린(Kotlin)이라는 프로그래밍 언어를 배워보기로 했다. 우선 개념을 배우기 위해 새차원님의 코틀린 유튜브 영상을 참고했으며 이를 바탕으로 내 방식대로 정리해보려고 한다.

 

출처: https://www.youtube.com/watch?v=zoYXKQImmwg 

[새차원, 코틀린(Kotlin) 강좌] 3. Basic Syntax

 

1. 패키지 정의

  • 패키지 정의는 파일 최상단에 위치
  • 디렉터리와 패키지를 일치하지 않아도 됨 (Java와 다른점)
package my.demo

import java.util.*

	// ..

 

2. 함수 정의

  • 함수는 fun 키워드로 정의
fun sum(a: Int, b: Int): Int {
return a + b
}
  • 함수 몸체가 식(Expression)인 경우 return 생략 가능 -> 이런 경우 return type이 추론됨
fun sum(a: Int, b: Int) = a + b

 

  • 리턴할 값이 없는 경우Unit(Object)으로 리턴
  • Unit: Java에서 void 리턴 역할, 생략 가능
fun printKotlin(): Unit {
println(“hello Kotlin”)
}
fun printKotlin() {
println(“hello Kotlin”)
}

 

3. 지역 변수 정의

  • val : 읽기전용 변수 → 값의 할당이 1회만 가능, Java의 final과 유사
val a: Int = 1 // 즉시 할당
val b = 2 // ‘Int’type 추론 (생략가능)
val c: Int // 컴파일 오류, 초기화가 필요함
c = 3 // 컴파일 오류, 읽기전용​
  • var : Mutable 변수 → 값을 할당 및 변화시킬 수 있음
val x = 5
x += 1

 

4. 주석

  • Java와 Javascript와 동일함
  • // : 한 줄 주석
  • /* */ : 여러 줄 주석 (block comment)
  • block comment가 Java와 다르게 중첩 허용
// 한줄 주석

/* 여러줄
 주석 */

/* block comment가
 /* 중첩도 가능 */
*/

 

5. 문자열 템플릿

  • String Interpolation (문자열 보간법) ★
val a = 1
 // simple name in template:
val s1 = “a is $a”  // 변수에 접근해서 직접 가져올 수 있음

a = 2
// arbitrary expression in template:
val s2 = “${s1.replace(”is“, ”was“)}, but now is $a”
더보기
[실행결과]    a was 1, but now is 2

replace(A, B) : A를 B로 바꾸기(대체)

 

6. 조건문

fun maxOf(a: Int, b: Int): Int {
	if (a > b) {
		return a
	} else {
		return b
	}
}

- 조건식으로 사용가능

fun maxOf(a: Int, b: Int) = if (a > b) a else b

 

7. nullable ★

  • 값이 null일 수 있는 경우 타입에 nullable 마크를 명시해야 함
  • nullable 타입의 변수를 접근할 때 반드시 null 체크를 해야 함!! -> 그렇지 않으면 컴파일 오류 발생
fun parseInt(str: String): Int? {
	// 정수가 아닌 경우 null을 리턴
}
fun printProduct(arg1: String, arg2: String) {
	val x: Int? = parseInt(arg1)
	val y: Int? = parseInt(arg2)
    
	if (x != null && y != null) {    // NULL 체크를 꼭 해줘야 x, y에 접근이 가능해짐!
	println(x * y)
	} else {
	println(“either ‘$arg1’or ‘$arg2’is not a number”) // 직접 접근 가능
	}
}

 

8. 자동 타입 변환

- 타입 체크만 해도 자동으로 타입이 변환

fun getStringLength(obj: Any): Int? {  // Any: Java에서 object 타입
	if (obj is String) {  // obj가 String 객체라면?
		// ‘obj’가 자동으로 String 타입으로 변환 됨
		return obj.length
	}
	return null
}

 

  • while loop (Java와 거의 같음)
val items = listOf(“apple”, “banana”, “kiwi”)
var index = 0
while (index < items.size) {
	println(“item at $index is ${items[index]}”)
	index++
}

 

  • when expression (switch문과 비슷함)
fun describe(obj: Any): String 
	= when (obj) {
	1 -> “One“
	“Hello” -> “Greeting”
	is Long -> “Long”
	!is String -> “Not a string”
	else -> “Unknown“
	}

 

  • ranges

- in 연산자를 이용하여 숫자 범위 체크 가능

 

val x = 3
if (x in 1..10) { // 1~10 사이에 x가 있는지 확인
	println(“fits in range”)
}

- range를 이용한 for loop

for (x in 1..5) {
	print(x)
}

 

  • collections

- 컬렉션도 in으로 loop 가능

val items = listof(“apple”, “banana”, “kiwi”)
for (item in items) {
	println(item)
}

- in으로 해당 값이 collection에 포함되는지 체크 가능

val items = setof(“apple”, “banana”, “kiwi”)
when {
	“orange” in items -> println(“juicy”)
	“apple” in items -> println(“apple is fine too”)
}

- 람다식을 이용해서 collection에 filter, map 등의 연산 가능

val fruits = listof(“banana”, “avocado”, “apple”,“kiwi”)
fruits
	.filter { it.startsWith(“a”) } // a로 시작하는 값들만
	.sortedBy { it }
	.map { it.toUpperCase() } // 대문자로 바꾸기
	.forEach { println(it) }

 

728x90
반응형