* 해당 내용은 Kotlin 공식 레퍼런스에 있는 "Basic Syntax" 내용을 번역하고 제 방식으로 이해해서 작성하였습니다.
1. Package 정의와 import 방법
package com.example.suhwanc
import kotlin.text.*
소스 파일의 맨 윗부분에 이런 식으로 선언하면 된다.
import 맨 뒤 '*' 표시는 kotlin.text 안에 있는 모든 라이브러리를 가져온다는 의미로 자주 쓰이니 꼭 알아두자.
2. 프로그램 시작 지점
fun main(){
println("Hello World!")
}
코틀린 프로그램은 main 함수가 시작이다.
함수 선언은 앞에 fun을 붙이면 되고, 반환형과 파라미터는 따로 선언을 해주어야 한다.
여기서는 println("Hello World!")라는 문장만 써두었는데
print는 출력하기 위한 함수이고 그 뒤에 ln을 붙이면 뒤에 개행(엔터) 문자를 붙인 것이 된다.
내부에는 공백도 되고 어떤 자료형도 출력할 수 있다.
3. 함수
fun sum(a: Int, b:Int) : Int{
return a + b
}
fun main(){
println(sum(1, 2))
}
함수의 기본틀은 이러하다.
1) fun 선언
2) 함수 이름 (여기서는 sum)
3) 소괄호() 안에 파라미터 (함수로의 전달 값)
4) 함수의 리턴 자료형 (여기서는 : Int)
5) 함수의 표현식 body (중괄호{} 내부 코드)
코틀린은 자료형을 나타낼 때 ": (자료형)"와 같은 방식으로 나타낸다.
변수 선언 시에도 "var a: Int" 이런 식으로 선언해주는데, 이후에 변수 부분에서 더 자세히 언급하겠다.
함수의 반환형을 나타낼 때도 똑같이 파라미터 담는 () 괄호 뒤에 ": (자료형)"을 넣은 후 중괄호에 함수 내용을 추가하면 된다.
4. 변수
1) 상수 val
fun main(){
val a: Int = 1
a = 2
}
val은 상수로서 처음 선언부에서만 값이 들어갈 수 있다. 읽기 전용 지역 변수라고도 한다.
다음과 같이 선언 이후 값을 대입하면 오류가 발생하게 된다.
2) var
fun main(){
var a: Int = 1
a = 2
}
var은 재할당이 가능한 변수로, 주로 자주 쓰인다.
이 둘은 모두 변수 이름 뒤에 자료형을 명시해주어야 한다.
하지만
fun main(){
var a = 2
var s = "hello"
println(a)
}
이런 식으로 자료형을 굳이 언급하지 않아도 뻔히 무슨 자료형인지 아는 것들은 명시하지 않아도 된다.
프로그램이 자동으로 자료형을 구분해 대입한다.
5. 주석
// 한 줄 주석
/*
여러 줄 주석
*/
주석은 다음과 같이 한 줄로 처리하려면 "//"을 여러 줄을 쓰고 싶다면 "/* ~ */"을 붙여 쓰면 된다.
6. 문자열 템플릿
var who = "바보"
var s = "suhwan is $who"
who = "천재"
val s2 = "${s.replace("is", "was")}, but now is $who"
println(s2)
코틀린은 문자열 내부에 템플릿 표현형을 포함할 수 있게 되어있다.
예컨대, 이 기능은 문자열 안에서 외부 변수를 가져온다고 생각하면 된다.
이 부분은 "나 코틀린 좀 해봤어!"의 기준이 되는 영역인데, 코틀린을 정확히 이해하고 있다면
자바처럼 println("suhwan is" + "바보")와 같이 바보처럼 짜지 않고 위에 방식처럼 달러를 사용해 깔끔하게 처리한다는 것이다.
7. 조건문
fun maxOf(a:Int, b:Int): Int{
if(a > b) return a
else return b
}
fun main(){
println(maxOf(1, 3))
}
두 값을 받아 더 큰 값을 리턴하는 함수이다.
여러 언어처럼 if, else if, else 구조를 따르며 이 부분은 스킵하겠다.
8. Nullable 변수
fun main(){
var x:Int? = 5
x = null
println(x)
}
코틀린은 null 문자를 담을 수 있는 변수가 있고, 담지 못하는 변수가 있다.
자바 코드를 짜면서 null 포인터 에러에 엉엉 울던 시절은 지나갔다.. 우리가 담을지 안 담을 지 미리 정할 수 있는데
담으려면 물음표를 자료형 뒤에 붙이면 되고, 안 담으려면 그대로 두면 된다.
보통은 담지 않으므로 ?가 없는 버전이 기본형이 되겠다.
9. Type checks and automatic casts
fun getStrlen(str: Any):Int?{
//인자로 받은 str이 문자열이 아니라면
if(str is String) return str.length
else return null
}
코틀린은 "is" 또는 "as"를 통해 해당 변수가 어떤 자료형인지 미리 체크할 수 있게 한다.
위 코드를 해석하자면, 인자로 어떤 자료형이든 일단 받은 후 "is String" 문구를 if 문에 넣어서
함수가 받은 인자가 문자열인지 아닌지 확인해주는 기능을 한다.
이러한 방법을 타입 캐스팅이라 한다.
10. for 반복문
var animals = listOf("koala", "tiger", "fox")
for(animal in animals){
println(animal)
}
다음과 같이 특정 배열의 원소들을 하나씩 순회하며 꺼내거나, 출력할 수 있다.
fun main(){
for(x in 0..10){
println(x)
}
}
또는 범위를 지정해 출력할 수도 있는데 이 부분도 참 신기하다.
0.. 10처럼 한눈에 봐도 0부터 10까지라는 구문을 쓸 수 있다는 점인데 .. 표시는 코틀린에서 범위를 의미한다.
정확히 말하면 .. 표시를 기준으로 앞~뒤 범위라는 것이다.
11. while 반복문
var animals = listOf("koala", "tiger", "fox")
var idx = 0;
while(idx < animals.size){
println(animals[idx])
idx++
}
while 반복문은 for 반복문과 다르게 정확히 끝낼 지점을 파악하지 못할 때, 또는 끝낼 지점은 컴퓨터가 계산해야하는 상황에 자주 쓰인다.
위 코드에서도 배열의 크기보다 작으면 계속 인덱스를 늘려가며 배열 안의 원소들을 출력하고,
배열의 크기와 같아지는 순간 while 반복문을 빠져나오게 된다.
12. When expression
fun describe(obj: Any): String =
when(obj){
1 -> "하나"
"Hello" -> "안녕"
is Int -> "정수"
!is String -> "넌 문자열이 아니야"
else -> "Unknown"
}
fun main() {
println(describe(1))
println(describe("Hello"))
println(describe(1000))
println(describe(2L))
println(describe("other"))
}
결과

이것도 신기하다.
공식 문서에서는 C언어의 switch 구문과 비슷하다고 한다. 그런데 좀 알기 쉽게 -> 모양을 사용한다는 점과 코드가 switch 구문보다 훨씬 간결해보인다는 장점이 있다.
주의할 점은 switch문의 default 처럼, 여기서도 반드시 else를 넣어줘야한다. 공식 문서에선 이부분을 mandatory(필수) 라고 한다. 영어 공부할겸 적어놨다.
'학업 > Android' 카테고리의 다른 글
| [Android] Firebase Cloud Messaging - 친구 폰 토큰 가지고 알람 마구 보내기 (0) | 2021.06.10 |
|---|---|
| MainActivity.kt 기본 설명 (0) | 2021.01.29 |
| 문자열 리소스화 & 다국어 지원 기능 (4) | 2021.01.27 |
| Android Studio 프로젝트 구성 (0) | 2021.01.27 |