[kotlin java] [코틀린/Kotlin] 기초 문법 정리

안녕하세요, 하루플입니다????

안드로이드에서 자바가 아닌 코틀린으로 공부를 진행하면서 필요한 문법을 정리해보려합니다.

코틀린의 기초 사항을 정리하는 것이고 이후에 코딩테스트를 진행하면서 필요한 부분을 보충하겠습니다.

 

https://www.youtube.com/watch?v=8RIsukgeUVw&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=2 

저는 위 강의를 보면서 개인적으로 공부한 내용을 정리하였습니다.


1. 세미콜론을 붙이지 않아도 된다.

 
 
fun main() {
 
println("Hello, world!!!")
 
}

 

2. 변수 선언시 파스칼, 카멜 표기법을 권장한다.

파스칼 표기법 : ClassName

카멜 표기법 : className

 

3. 변수 선언 방법

var : 일반적으로 통용되는 변수. 언제든지 읽기 쓰기가 가능함.

val : 선언시에만 초기화 가능. 중간에 값을 변경할 수 없음.

ex) runtime시 변경되지 말아야 할 값은 안전하게 val로 선언하는 것이 좋다.

 

변수는 선언 위치에 따라 두가지 이름으로 부른다.

클래스에 선언된 변수 : Property(속성)

이 외의 Scope 내에 선언된 변수 : Local Variable (로컬변수)

 

고전적인 언어들은 변수가 선언된 후 초기화 되지 않으면 기본 값으로 초기화 되거나 값이 할당되지 않았다는 표시로 null 값을 가지게 된다,

코틀린은 기본 변수에서 null을 허용하지 않고, 변수에 값을 할당하지 않은채로 사용하게 되면 문법 에러를 표시하고 컴파일을 막아주므로 의도치 않은 동작이나 null pointer exception 등을 원천적으로 차단해준다는 장점이 있다.

 
 
fun main() {
 
var a: Int = 123 //코틀린은 값 초기화 필수!
 
println(a)
 
}

변수에 값을 할당하는 것은 반드시 선언시에 할 필요는 없으며 변수를 참조하여 사용하기 전까지만 하면 된다.

 
 
fun main() {
 
var a: Int
 
a = 123 //이렇게 초기화해도 된다
 
println(a)
 
}

 

그런데 프로그램에 따라서는 변수에 값이 할당되지 않았다는 것을 하나의 정보로 사용하는 경우도 있을 수 있다.

 
 
fun main() {
 
var a:Int? = null
 
}

그런 경우에는 null을 허용하는 nullable 변수로 선언해줄 수 있다. 하지만 null pointer exception이 발생할 수 있으므로 꼭 필요한 경우에 한해 주의해서 사용해야한다.

 

 

4. 자료형

변수에서 사용할 수 있도록 코틀린이 제공하는 기본 자료형은 자바와의 호환을 위해 자바와 거의 동일하다.

 

정수, 실수형

 
 
fun main() {
 
var intValue:Int = 1234
 
var longValue:Long = 1234L //L을 붙여 더 큰 메모리를 사용하는 정수임을 표시
 
var intValueByHex:Int = 0x1af //16진수
 
var intValueByBin:Int = 0b //2진수 (binary 약자)
 
//코틀린은 8진수 표기는 지원하지 않는다.
 
 
 
var doubleValue:Double = 123.5 //실수는 소수점을 포함해 숫자를 쓰거나
 
var doubleValueWithExp:Double = 123.5e10 //필요시 지수 표기법을 추가한다.
 
var floatValue:Float = 123.5f //Float는 f를 붙인다.
 
}

 

코틀린은 내부적으로 문자열을 UTF-16 BE 방식을 사용한다. 따라서 글자 하나하나가 2byte의 메모리 공간을 사용한다.

 

문자, 문자열

 
 
fun main() {
 
var charValue:Char = 'a'
 
var koreanCharValue:Char = '가'
 
var stringValue = "one line string test"
 
var multiLineStringValue = """multiline
 
string
 
test"""
 
}

 

불리언

 
 
fun main() {
 
var booleanValue:Boolean = true
 
}

 

 

5. 형 변환

코틀린은 형변환시 발생할 수 있는 오류를 막기위해 다른 언어들이 지원하는 '암시적 형변환'은 지원하지 않는다.

명시적 형변환 : 변환될 자료형을 개발자가 직접 지정함.

암시적 형변환 : 변수를 할당할 시 자료형을 지정하지 않아도 자동으로 형변환 된다.

 

형변환 함수

toByte()

toShort()

toInt()

toLong()

toFloat()

toDouble()

toChar()

 
 
fun main() {
 
var a: Int = 54321
 
var b: Long = a.toLong() //int를 long형으로 변환
 
}

 

6. 배열

 
 
fun main() {
 
var intArr = arrayOf(1,2,3,4,5) //int 배열
 
var nullArr = arrayOfNulls<Int>(5) //비어있는 5크기의 배열
 
 
 
int Arr[2] = 8 //index2에 8값 할당
 
}

배열은 처음 선언했을 때의 전체크기를 변경할 수 없다는 단점이 있지만 한번 선언하면 다른 자료구조보다 빠른 입출력이 가능한 장점이 있다.

 

 

7. 타입 추론

타입추론 : 변수나 함수들을 선언할 때나 연산이 이루어 질 때 자료형을 코드에 명시하지 않아도 코틀린이 자동으로 자료형을 추론해주는 기능

 
 
fun main() {
 
var a = 1234 //int
 
var b = 1234L //long
 
 
 
var c = 12.45 //Double
 
var d = 12.45f //float
 
 
 
var e = 0xABCD //16진수
 
var f = 0b0101010 //2진수
 
 
 
var g = true //boolean
 
var h = 'C' //Char
 
}

 

 

8. 함수

함수 : 특정한 동작을 하거나 원하는 결과값을 연산하는데 사용. 

 

a,b,c를 더해서 나오는 값이 Int이므로 fun add(a: Int, b: Int, c:Int): Int 맨 마지막 반환형 Int 선언.

반환값이 없다면 생략해도 된다.

 
 
fun main() {
 
println(add(5, 6, 7))
 
}
 
 
 
fun add(a: Int, b: Int, c:Int): Int {
 
return a + b + c
 
//리턴 발생 시 함수 중간이더라도 함수 종료
 
}

실행결과 : 18

 

단일 표현식 함수 : 위와 같이 여러가지 일을 하는 것이 아니라 a,b,c를 단순히 더해서 반환하는 역할과 같이 간단한 기능의 경우 마치 변수에 결과값을 할당하듯 기술할 수 있도록 함.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 
 
fun main() {
 
println(add(5, 6, 7))
 
}
 
 
 
fun add(a: Int, b: Int, c: Int) = a + b + c

단일 표현식 함수는 반환형의 타입 추론이 가능하므로 반환형을 생략할 수 있다.

 

코틀린에서 함수는 내부적으로 기능을 가진 형태이지만, 외부에서 볼 때는 파라미터를 넣는다는 점 외에는 자료형이 결정된 변수라는 개념으로 접근하는 것이 좋다.

 

 

 

8. 조건문

if문은 java와 동일하다.

 
 
fun main() {
 
var a = 7
 
if(a > 10){
 
println("a는 10보다 크다")
 
} else{
 
println("a는 10보다 작거나 같다")
 
}
 
}

 

다른 언어에서의 switch 문을 when 으로 사용한다.

Any 자료형 : 어떤 자료형이든 상관없이 호환되는 코틀린의 최상위 자료형

 
 
fun main() {
 
doWhen(12L)
 
}
 
 
 
fun doWhen (a :Any){
 
when(a) {
 
1 -> println("정수 1이다")
 
"DiMo" -> println("디모의 코틀린 강좌")
 
is Long -> println("Long 타입이다")
 
!is String -> println("String 타입이 아니다")
 
else -> println("어떤 조건도 만족하지 않는다")
 
}
 
}

실행결과 : Long 타입이다

 

when의 조건이 맞을때 값을 반환하는 표현식으로서의 역할을 하게 하려면 동작대신 값을 써주면 된다.

 
 
fun main() {
 
doWhen(12L)
 
}
 
 
 
fun doWhen (a :Any){
 
var result = when(a) {
 
1 -> "정수 1"
 
"DiMo" -> "디모의 코틀린"
 
is Long -> "Long 타입"
 
!is String -> "String 타입 아니다"
 
else -> "어떤 조건도 만족하지 않는다"
 
}
 
 
 
println(result)
 
}

 

 

9. 반복문

조건형 반복문 : 조건이 참인 경우 반복을 유지 (while, do...while)

범위형 반복문 : 반복 범위를 정해 반복을 수행 (for)

 

while 문

 
 
fun main() {
 
var a = 0
 
 
 
while(a < 5){
 
println(a++)
 
}
 
}

실행결과

0

1

2

3

4

 

 

do...while 문

while에 의해 조건을 체크하여 반복한다는 점은 같지만 최초 한번은 조건없이 do 에서 구문을 실행한 후 while로 조건을 체크하는 선 후 관계에 차이가 있다.

 
 
fun main() {
 
var a = 0
 
 
 
do
 
{
 
println(a++)
 
}while (a < 5)
 
}

 

for문

기본적으로 for문은 값을 1씩 증가시키며 반복한다.

 
 
fun main() {
 
for(i in 0..9){ //0~9까지 반복
 
print(i)
 
}
 
}

실행결과 : 0123456789

 

증가값은 step을 이용하여 변경할 수 있다.

 
 
fun main() {
 
for(i in 0..9 step 3){ //0~9까지 3 단위로 반복
 
print(i)
 
}
 
}

실행결과 : 0369

 

 

for문 감소 방법

 
 
fun main() {
 
for(i in 9 downTo 0){ //1씩 감소하며 반복
 
print(i)
 
}
 
}

실행결과 : 9876543210

 

 

 

 

 

 

10. 흐름제어

 
 
fun main() {
 
for(i in 1..10){
 
if(i==3) break
 
print(i)
 
}
 
}

break : 실행 시 반복문 종료

실행결과 : 12

 

 
 
fun main() {
 
for(i in 1..10){
 
if(i==3) continue
 
print(i)
 
}
 
}

continue : 3인 경우 다음 숫자로 넘어가서 for문 계속 실행

실행결과 : 1245678910

 

여기까지는 기존의 언어랑 비슷한데 코틀린은 하나의 기능이 더 추가되었다.

다중 반복문에서 break나 continue가 적용되는 반복문을 lable을 통해 지정할 수 있는 기능이다.

 

i가 1이고 j가 2면 모든 반복문을 종료해야 한다고 가정해본다.

 
 
fun main() {
 
for(i in 1..10){
 
for(j in 1..10){
 
if(i == 1 && j == 2) break
 
}
 
//또 체크?
 
}
 
}

고전적인 언어에서는 내부 반복문에서 조건을 체크하여 break를 하더라도 외부 반복문에서 또 다시 조건을 체크하여 모든 반복문을 수동으로 종료해야만 했다.

 

코틀린에서는 외부 반복문에 레이블 이름과 @ 기호를 달고, break문에서 @와 레이블 이름을 달아주면 레이블이 달린 반복문을 기준으로 즉시 break를 시켜준다.

 
 
fun main() {
 
loop@for(i in 1..10){
 
for(j in 1..10){
 
if(i == 1 && j == 2) break@loop
 
}
 
}
 
}

이는 continue의 경우에도 마찬가지이다.

 

다음 코드는 출력 예시이다. 변수명 앞에 $를 적으면 변수 값이 출력된다.

 
 
fun main() {
 
loop@for(i in 1..10){
 
for(j in 1..10){
 
if(i == 1 && j == 2) break@loop
 
println("i : $i, j : $j")
 
}
 
}
 
}

출력결과 : i : 1, j : 1

 

[출처] https://haruple.tistory.com/206

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
24 [rust] Rust 언어 튜토리얼 졸리운_곰 2024.01.16 130
23 [rust] Learn X in Y minutes : Y분 안에 X를 배우세요 졸리운_곰 2023.11.27 175
22 [Kotlin]함수형 프로그래밍 초간단 이해하기 file 졸리운_곰 2023.09.04 118
21 [Kotlin] Eclipse를 이용한 Kotlin 작업환경 구성 file 졸리운_곰 2023.09.02 116
20 [kotlin] 이클립스에 코틀린 세팅하기 file 졸리운_곰 2023.09.02 136
19 [kotlin] [Kotlin] 기본 - Null 처리 '? / ?. / !! / ?: / lateinit / lazy' file 졸리운_곰 2023.09.02 117
18 [flutter/dart] [flutter] flutter_localizations 다국어 적용하는 방법 졸리운_곰 2023.07.02 151
17 [flutter/dart] 플러터(Flutter) 다국어 대응하기 (Localization) file 졸리운_곰 2023.07.02 132
16 [flutter/dart] mac os x : fvm(Flutter Version Management) 설치 및 사용법 file 졸리운_곰 2023.07.01 162
15 [rust] Learn Rust in under 10 mins 졸리운_곰 2023.06.28 224
14 [flutter/dart] flutter - fvm 적용하기 (Futter Version Management) file 졸리운_곰 2023.06.24 186
13 [flutter/dart] Flutter fvm(Flutter Version Management) 사용하기 file 졸리운_곰 2023.06.23 275
» [kotlin java] [코틀린/Kotlin] 기초 문법 정리 졸리운_곰 2023.06.08 126
11 [kotlin java] 이펙티브 코틀린 간단 정리 (Effective Kotlin) 졸리운_곰 2023.06.08 139
10 [kotlin java] 코틀린 기본 문법 요약 정리 강좌 - [kotlin/cheat sheet] file 졸리운_곰 2023.06.08 146
9 [rust] Rust 요약(메모리 관리) 졸리운_곰 2023.05.10 158
8 [rust] Rust 요약(기초) 졸리운_곰 2023.05.10 160
7 [rust programming] Rust 언어 튜토리얼 졸리운_곰 2023.05.04 181
6 [rust programming] Rust WebAssembly Front End Frameworks 프런트 엔드 프레임워크 졸리운_곰 2023.05.02 130
5 [go golang] Gin 소개 & 설치 (Introduction & Installation) file 졸리운_곰 2023.01.03 182
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED