모든 언어가 그렇듯이 코틀린 언어에도 문법이 있습니다. 여기에서는 코틀린의 기본 문법들을 익혀 봅시다.
프로그래밍 언어들은 단 한 가지 언어라도 입문했었다면 사실상 다른 언어들은 거져 먹는 식입니다.
코틀린 역시 특별히 새로운 문법은 없으니까 아래 글을 한 번 읽어 보는 것만으로도 파악이 끝나실 거예요.
문법을 설명하기 전에 먼저 스튜디오 안에 있는 편리한 도구 두 가지를 소개해 드릴게요.
[편리한 도구 - REPL]
REPL (Read-eval-print loop)은 코틀린 명령어(='함수'='메서드' 모두 같은 의미로 받아들여도 됨)를 한 줄씩 입력해서 실행해 볼 수 있는 쉘입니다. (쉘: 인간의 명령과 기계의 동작 사이에서 소통을 도와주는 통역자 같은 프로그램)
REPL을 실행해 보세요 --> 메인메뉴 Tools>Kotlin>Kotlin REPL 클릭하고, 아래 명령을 입력해 보세요.
println("안녕하세요, 코틀린")
명령을 실행하도록 Ctrl+엔터 를 눌러주세요.
println() 은 괄호 속의 문자열을 출력해 주는 메서드 입니다.
[편리한 도구 - 스크래치]
여러 줄의 명령어들을 한꺼번에 실행시켜 볼 수 있는, REPL 보다 좀 더 진보된 쉘입니다.
스크래치를 실행해 보세요 --> 메인메뉴 File>New>Scratch File>Kotlin 클릭하고, 아래 소스를 입력해 보세요.
var a=10
println (a * 10)
이들 명령을 실행하도록 창에서 '▶'아이콘을 눌러주세요.
var 는 변수를 선언하는 명령어이고 a에 10이 대입된 후, 이어지는 문장에서 a*10이 계산되어 100이라는 결과가 출력되는데 재밌는 것은 각 줄마다 처리된 결과가 각 줄 우측에 각각 표시된다는 거죠. 스레기통 아이콘을 누르면 출력 결과가 지워집니다.
참고) 만약 각 행에 밑줄이 그어지면서 런타임 스크립트 오류가 표시되면, Ctrl+Shift+Alt+s를 누르시고 Dependencies>app 에서 Path를 업데이트 시켜주세요. 업데이트 링크가 보일 거예요.
(안보이면 수직 스크롤바를 내려보세요)
[코틀린 기본 문법 1]
기본적인 문법을 간략하게 정리해 보겠습니다.
프로그래밍을 조금이라도 했던 분들은 그냥 이해되시겠지만, 처음 프로그래밍을 접하시는 분들은 지금부터 아래 나열된 각 키워드들에 대해서는 각자 검색등을 통해 지식을 습득하셔야 합니다. 이들에 대한 설명은 두꺼운 서적 한 권 정도 되니까 여기에 세세한 내용들을 적을 수는 없어요. ㅠㅜ
수치 자료형 : Int, Long, Short, Byte, Float, Double
문자 자료형 : Char, String
기타 : Unit (아무것도 없는 상태를 가리킴. 타 언어의 void에 해당)
리터럴 (데이터형을 표현하는 방법입니다)
1 : Int형
1L : Long형
1.0 : Double형
1.0f : Float형
var는 변수 (값 수정 가능), val은 상수 (값 수정 불가)
var a: Int = 10 // 변수 a를 Int형으로 선언 후 10을 대입
var b: Long = 10L // 변수 b를 Long형으로 선언 후 10을 대입
val pi: Float = 3.14f // 상수 pi를 Float형으로 선언 후 3.14를 대입 (값 수정 불가)
val str: String = "안녕" // 문자열 상수. 여러 줄의 문자열은 """로 감싸면 됨 (값 수정 불가)
val ch: Char = '굿' // 문자 상수. (값 수정 불가)
참고) 다른 언어에서 처럼 변수타입 없이 다음과 같이 써도 되는데, 이런 경우에는 타입이 자동으로 설정됨
var a = 10
val str = "안녕"
배열은 var, val 어느 키워드로 선언하든 모두 값 수정이 가능
val arr: Array<Int> = arrayOf(1,2,3,4,5) // Int형 1차원 배열
val arr = arrayOf(1,2,3,4,5) // 자료형을 생략해도 됨 (위와 동일)
arr[0] = 2 // 배열
++i // 증감연산자 사용 가능. i++ 라고 해도 됨.
== // 문자열 비교
=== // 개체 비교
println("입력하신 문자열은 $str 입니다") // " "내에서 문자열 변수 참조 (이건 마치 PHP 같네요)
<함수>
fun circleArea(r: Float) : Float { // Float형 인자 r을 받고 Float형 반환 값을 갖는 함수
return (r*r*pi)
}
fun circleArea(r: Float) : Pair<String, Float> { // 두 가지 형 데이터를 반환하는 함수
return Pair("원의 넓이 = ", r*r*pi)
}
fun circleArea(r: Float) : Unit { // 반환 값은 Unit형 즉, 없음.
println(r*r*pi)
}
fun circleArea(r: Float) { // 반환 값이 없을 때(=return문 없음) 반환타입을 아예 생략해도 됨
println(r*r*pi)
}
※ 식의 결과를 함수의 결과 값으로 대입
fun f( ) : Unit = println("Hi")
fun f( ) = println("Hi")
<조건문>
if ( a == 10) { println("맞아요") } // 조건문
else { println("틀려요") }
val max = if (a>b) a else b
when (a) { // switch 문을 코틀린에서 when 이라고 적음(이건 SQL 같은 모습이죠)
1 -> println("1 입니다")
2, 3 -> println("2 또는 3 입니다")
4..7 -> println("4~7 사이 값입니다") // ..연산자 사용도 가능하네요
!8..10 -> println("8~10 사이 값이 아닙니다")
else -> println("...")
}
val str = when (a % 2) {
0 -> "짝수"
1 -> "홀수"
}
fun isEven(n: Int) = when (n%2) { // when 문 결과를 함수의 반환 값으로도 사용 가능
0 -> "짝수" // 나잘난 프로그램 덕후나 쓸법한 문법...알아도 쓰지말자!
1 -> "홀수"
else -> "Exception Error" // else 분기식은 생략할 수 없음
}
println(isEven(3)) // 결과: "홀수"
val numbers : Array<Int> = arrayOf(1,2,3,4,10,11,-3,-2,-1,0)
for (i in numbers){ // 타 언어의 foreach문에 대응함
println(i) // 결과: 1;2;3;4;10;11;-3;-2;-1;0
}
for (i in 1..10) {.....} // 1,2,3,...,10
for (i in 1..10 step 2) {.....} // 1,3,5,7,9 step은 양수만 가능
for (i in 10 downTo -2 step 2) {.....} // 10,8,6,4,2,0,-2 10..-2라는 표현은 불가함
while (i < 10) {.....} // while 문
do {.....} while(i<10) // do while 문
몇 가지 문법을 살펴봤는데, 변수 선언 방법이나 클래스 상속 부분들이 C#과 같은 언어에 비해
덜 직관적인 것 같아 보이네요;; 뭐라고 표현해야 할까... 코틀린 문법이 마치 공돌이 덕후스러운
오버가 너무 많이 보인다고나 할까요^^;
제가 마소의 열성팬은 아니지만, 마소의 팬이 안될래야 안될 수가 없게 만드네요. ㅎㅎ
(계속...)