[안드로이드 Android] Kotlin 언어로의 전환 1. 주요특징 및 화면출력
코틀린 언어 기초문법
이제 코틀린 언어의 문법을 10단계에 걸쳐서 소개해 보겠습니다.
먼저. 코틀린언어를 작성하기 위해 별도의 파일을 만들어야 겠지요. 별도의 Project를 다시 생성할 필요는 없습니다. 현재 KotlinHello 프로젝트의 MainActivity.kt 파일이 있는 패키지에서 코틀린 파일을 만들어 실습을 진행하겠습니다.
1) 마우스 우클릭으로 new >> Kotlin Class/File 선택
자바언어로 개발할때는 새로운 Java 파일을 만드실 때 메뉴명을 자세히 보면 Java Class 만 되어 있는데 코틀린은 Kotlin Class/File 로 되어있을 겁니다. 어떤 차이가 있는 걸까요? 자바의 파일은 반드시 class 를 만들어야 한다는 것이고 코틀린은 class를 가진 파일도 있고 없는 파일도 있다는 겁니다. 자바문법을 이미 알고 있으시다면 이해가 조금 되실텐데 자바는 완전체 객체지향을 꿈꾸는 언어입니다. 그래서 객체만 존재해야 합니다. 그러다 보니 심지어 프로그램의 시작점을 의미하는 main()함수 조차도 별도로 존재 할 수 없어서 class 안에 존재하는 것이죠. 그게 static main() 으로 만들어야만 하는 이유이기도 합니다.
이에반해 코틀린은 자바와 다르게 class 영역 밖에 변수와 함수가 존재할 수 있습니다. main()함수도 class 안에 만들지 않습니다. C언어나 Dart언어처럼요. (실은. 코틀린을 컴파일하면 class 밖에 있는 변수나 함수도 class로 묶어서 .class파일이 되긴 하지만 개발자가 코드를 작성할때는 이 부분을 신경쓰지 않아도 됩니다.)
그러다 보니 안드로이드 스튜디오의 코틀린 파일 생성 메뉴를 누르면 class를 만들것인지 그냥 파일을 만들것인지 선택하게 됩니다.
2) 우선 기본 문법 테스트로서 File을 만들어 실습을 진행하겠습니다. File 항목을 선택하고 파일명은 [ Test01Basic] 으로 작성합니다.
파일명을 작성하고 엔터키를 누르면 Test01Basic.kt 파일이 만들어진 것을 볼 수 있습니다. 근데 같은 코틀린파일인 MainActivity 는 뒤에 .kt 확장자가 없네요?
없는게 아니고 생략하여 보여주지 않는 겁니다. 실제 액티비티파일도 MainActivity.kt 로 만들어져 있습니다. 왜 굳이 다르게 표시할까요?
좀전에 설명했듯이 코틀린 파일은 class를 작성한 파일도 있고 없는 파일도 있습니다. 이 구별을 쉽게 하기 위해 안드로이드 스튜디오에서 여러분을 위한 제공하는 편의기능 입니다. 자세히 보면 아이콘의 차이도 확인할 수 있습니다. 클래스를 의미하는 ⓒ 가 클래스를 가진 파일을 의미합니다. 앞으로 .kt 확장자의 유무와 아이콘을 통해 만들어진 코틀린 파일의 역할이 쉽게 구별될 겁니다.
만들어진 Test01Basic.kt 파일은 아래 그림처럼 자바파일을 만들었을 때와 다르게 파일명과 같은 이름의 class 도 없이 오직 패키지명만 써있는 빈 문서일 겁니다. 이 빈 문서안에 코틀린 코드를 소개해 보겠습니다.
자. 이제 실습할 준비가 끝났습니다. 이제 코틀린언어의 특징과 기본문법들을 알아보겠습니다.
※ 안드로이드 스튜디오 IDE 사용이 아닌 코틀린 연습용 온라인 에디터 사이트를 이용하셔서 실습을 진행해도 됩니다.
[ 코틀린 연습 사이트 : https://try.kotlinlang.org ]
★ 폰이나 테블릿 처럼 안드로이드 스튜디오를 설치하기 어려운 환경에서 연습하고 싶을때 유용할 겁니다.
먼저 대략적인 특징을 살펴보고 시작하겠습니다.
kotlin 언어의 문법적 주요 특징!!
A. 문장의 끝을 나타내는 ; 을 사용하지 않는다. 써도 에러는 아니지만 무시된다.
B. 변수를 만들 때 자료형을 먼저 명시하지 않고 var, val 키워드를 사용한다. 단, 자료형은 존재함. 자동 형변환 안됨. 즉, 정적타입 언어임.
C. new 키워드 없이 객체를 생성함. new String() --> String()
D. 안전하게 null 을 다룰수 있는 문법을 제공한다.
E. 코틀린은 함수형 언어다. 즉, 함수를 객체처럼 생각해서 변수에 저장하고 파라미터로 넘겨주는 등의 작업이 가능함. [객체지향프로그래밍 언어가 아님]
0. 프로그램의 시작점 main() 함수
코틀린언어도 다른 언어와 마찬가지로 프로그램이 실행되면 가장 먼저 실행되는 main()함수가 존재합니다. 자바와는 다르게 반드시 class 안에 있을 필요가 없습니다.
자바와 다르게 함수를 정의할 때 리턴타입 위치에 function(함수)의 약자를 나타내는 'fun'키워드를 사용합니다. 추후 함수에 관련된 글을 작성할 때 자세히 설명하고 지금은 대략 '나 이제 함수 function 만들거다!' 라는 것을 표시하는 키워드로 보시면 됩니다.
package com.mrhi2022.ex100kotlinhello2022
// #. 프로그램의 시작함수인 main함수가 반드시 있어야 함.
// #. 함수를 정의할 때 리턴타입위치에 'fun'키워드(function의 약자) 사용
fun main(){
}
1. 화면출력 : print(), println()함수
첫번째 배울 문법은 화면출력입니다. 여러분들이 아무리 기가막힌 프로그램을 만들어도 원하는 모습으로 화면에 보여줄 수 없으면 무의미하겠죠. 그래서 일단, 자바언어를 학습할때와 마찬가지로 화면에 문자열, 숫자 등의 데이터를 출력하는 문법을 알아보겠습니다.
코틀린은 자바와 다르게 객체가 아니더라도 기능(함수, 메소드)을 별도로 호출할 수 있습니다. 그래서 출력기능 함수 print() 만 사용하면 됩니다. print()함수의 파라미터에 원하는 데이터나 데이터를 가진 변수를 전달하면 그대로 화면에 출력됩니다.
문법 | print( 데이터 or 변수 ) |
간단하게 정수형 숫자, 실수형 숫자, 문자열 하나씩 출력해 보겠습니다.
package com.kitesoft.kotlinhello
// #. 프로그램의 시작함수인 main함수가 반드시 있어야 함.
// #. 함수를 정의할 때 리턴타입위치에 'fun'키워드(function의 약자) 사용
fun main() {
// 1. 화면출력 : print()
print(10)
print(3.14)
print("Nice")
}//main function.......
너무 간단하네요. 이제 코드를 작성했으니 출력해 봐야 겠죠.
주의하세요. 우리는 지금 안드로이드 앱을 개발하고 있지 않습니다. 코틀린언어의 문법을 알아보기 위해 Test01Basic.kt 문서만 별도로 만드로 실행해야 합니다. 평소 앱을 실행하기 위해 사용하는 상단메뉴의 [▷] run 아이콘버튼을 클릭하면 안됩니다. 이전 글에서 만들었던 텍스트뷰와 버튼을 보여주 던 MainActivity 화면이 실행됩니다. 우리는 현재 Test01Basic.kt 파일만 실행해야 합니다.
안드로이드 스튜디오에서 .kt 코틀린 파일만 별도로 실행하려면 해당 문서의 빈 공간에서에서 마우스 우클릭하거나 사이드 [project]탭의 파일 트리목록에서 Test01Basic.kt 파일에 마우스를 올리고 우클릭하여 팝업되는 메뉴에서 해당파일에 대한 run 메뉴를 실행해야 합니다. 결과는 하단 [run]탭에서 실행되어 보여집니다. 자동으로 탭이 열리면서 보여집니다.
실행되면 상단메뉴의 [run] 아이콘쪽이 app 모듈에서 Test01BasicKt 로 변경되어 있을 것을 확인할 수 있습니다.
실행되면 아래 그림처럼 하단 run 탭이 열리면서 결과가 출력되는 것을 확인할 수 있습니다.
실행결과 | 103.14Nice Process finished with exit code 0 |
첫번째 줄에 나온 103.14Nice 가 출력되는 것을 볼 수 있습니다. 프로그램을 공부하셨으니 다 아시겠죠. 별도의 줄바꿈 명령을 주지 않았기에 정수 10, 실수 3.14, 문자열 Nice 이 붙어서 출력되는 것을 볼수 있습니다. 알아보기 어렵네요.
두번째 줄의 "Process finished with exit code 0" 는 프로세스의 종료를 나타내는 것이니 신경쓰지 않아도 됩니다.
print()는 자동으로 줄바꿈 되지 않아 보기 어렵습니다. 출력 후 자동 줄바꿈을 하고 싶다면 println() [ print + line] 함수를 사용합니다.
문법 | println( 데이터 or 변수 ) |
다양한 자료형들을 출력해 보겠습니다.
package com.kitesoft.kotlinhello
// #. 프로그램의 시작함수인 main함수가 반드시 있어야 함.
// #. 함수를 정의할 때 리턴타입위치에 'fun'키워드(function의 약자) 사용
fun main() {
// 1. 화면출력 : print(), println()함수 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
print(10)
print(3.14)
print("Nice")
// print()는 자동으로 줄바꿈 되지 않음. 자동 줄바꿈을 하고 싶다면 println() [ print + line]
println() //줄바꿈
println("Hello Kotlin")
println(10)
println(10.5)
println('A')
println(true)
println(5 + 3) //수식을 넣으면 결과값이 출력 : 8
}//main function.......
실행결과 | 103.14Nice Hello Kotlin 10 10.5 A true 8 |
출력이 잘 되고 있네요.
당연하겠지만 ; 이 없으므로 한줄에 2개의 코드를 작성할 수는 없습니다. [ ;을 사이에 넣으면 구분이 되기는 하지만 권장하지 않습니다. ]
rintln(10)println(10) //ERROR
데이터를 가진 변수를 전달하면 변수안에 값이 출력됩니다. 변수 선언문법에 대해서는 저 아래에서 자세히 소개하고 여기서는 대략적인 사용 모습만 보겠습니다. 정수형 변수 a 와 문자열 b 를 만들고 출력해보겠습니다.
// 변수명을 전달하면 변수안에 값이 출력됨 - 변수 선언문법에 대해서는 아래에서 소개
var a:Int=10
println( a )
var b:String="Hello"
println(b)
println()
실행결과 | 10 Hello |