또는

 

모든 언어가 그렇듯이 코틀린 언어에도 문법이 있습니다. 여기에서는 코틀린의 기본 문법들을 익혀 봅시다.

프로그래밍 언어들은 단 한 가지 언어라도 입문했었다면 사실상 다른 언어들은 거져 먹는 식입니다.

코틀린 역시 특별히 새로운 문법은 없으니까 아래 글을 한 번 읽어 보는 것만으로도 파악이 끝나실 거예요.

 

문법을 설명하기 전에 먼저 스튜디오 안에 있는 편리한 도구 두 가지를 소개해 드릴게요.

[편리한 도구 - REPL]

REPL (Read-eval-print loop)은 코틀린 명령어(='함수'='메서드' 모두 같은 의미로 받아들여도 됨)를 한 줄씩 입력해서 실행해 볼 수 있는 쉘입니다. (쉘: 인간의 명령과 기계의 동작 사이에서 소통을 도와주는 통역자 같은 프로그램) 

 

REPL을 실행해 보세요 --> 메인메뉴 Tools>Kotlin>Kotlin REPL 클릭하고, 아래 명령을 입력해 보세요.

println("안녕하세요, 코틀린")

   

   명령을 실행하도록 Ctrl+엔터 를 눌러주세요.

   println() 은 괄호 속의 문자열을 출력해 주는 메서드 입니다.

코틀린 REPL

 

[편리한 도구 - 스크래치]

여러 줄의 명령어들을 한꺼번에 실행시켜 볼 수 있는, 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#과 같은 언어에 비해

덜 직관적인 것 같아 보이네요;; 뭐라고 표현해야 할까... 코틀린 문법이 마치 공돌이 덕후스러운

오버가 너무 많이 보인다고나 할까요^^;

제가 마소의 열성팬은 아니지만, 마소의 팬이 안될래야 안될 수가 없게 만드네요. ㅎㅎ

 

 

(계속...)

 

<<< 이전 글 보기      다음 글 보기 >>>

+ Recent posts