study gomi

Kotlin/코틀린 완전 기본, 기초 문법 모음 (입문) 본문

basic/kotlin

Kotlin/코틀린 완전 기본, 기초 문법 모음 (입문)

공부하곰 2024. 1. 17. 12:34
728x90
반응형
더보기

간만에 안드로이드 스튜디오를 켰더니 너무 낯설어서... 코틀린 기초 강의를 다시 틀었다.

쉬운거긴 한데 처음이라고 생각하고 적어보겠다.

사실 kotlin을 기초부터 배운 적이 없긴 해서... (머쓱)

참고 강의 : https://www.youtube.com/watch?v=8RIsukgeUVw&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN

1. 주석 달기 & 출력하기 기본

// 이렇게 주석을 달아도 되고

/*
 * 이렇게 여러 줄
 * 주석을 달 수 있음.
 * */
fun main() {
    print("줄바꿈?")
    print("안 함")
    println("줄바뀜")
}

변수 섞어서 출력하기 등 참고 : https://comain.tistory.com/333


2. 이름 표기법

- 클래스 명 : 파스칼 표시(모든 단어를 대문자로 시작 ex_ClassName)

- 함수나 변수 이름 : 카멜 표기법(첫 단어만 대문자 ex_functionName)


3. 변수 선언

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

- val : 선언시에만 초기화 가능 -> 중간에 값 변경 안 됨.

- 변수는 선언 위치에 따라 클래스에 선언된 변수는 Property(속성) / Local Variable(로컬 변수)로 불림

- 변수 선언 후 사용 전까지 할당 해 줘야 하는데 null 값을 넣을 거면? nullable 변수로 선언 가능

- nullable변수는 값이 null인 상태로 연산할 시 nullPointerException 가능 할 수 있음 -> 주의해서 사용

- 변수 선언을 늦추는 방법은 lateinit, lazy 속성도 있음.

fun main() {
    var a: Int = 7
    println(a)
    
    // 변경 가능
    a = 8
    println(a)    
    
    // 변경 불가
    val b = 9
    println(b)
    // b = 10
    
    // nullable
    var c: Int? = null
    print(c)
}

4. 자료형 -> 7번 타입 추론까지

- Any : 어떤 자료형이든 상관없이 호환되는 최상위 자료형

- 정수형

Byte 8bits
Short 16bits
Int 32bits
Long 64bits
fun main(){
	// 32비트 이내의 10진수 (기본형)
	var intValue:Int = 1234
    
    // 64비트인 Long타입의 10진수
    var longValue:Long = 1234L
    
    // 16진수
    var intValueByHex:Int = 0x1af
    
    // 2진수
    var intValueByBin:Init = 0b10110110
    
    // 코틀린은 8진수 지원 x
}

- 실수형

Float 32bits
Double 64bits
fun main(){
	// 실수 기본 (double형)
	var doubleValue:Double = 123.5
    // 지수 표시법을 추가할 수도 있음(exponential)
    var doubleValueWithExp: Double = 123.5e10
    
    // float 형
    var floatValue:Float = 123.5f
}

- 문자형 : 문자 하나를 넣을 수 있는 char

- 코틀린은 내부적으로 문자열을 유니코드 인코딩 중에 한 방식인 UTF-16BE로 관리

=> 문자 하나하나가 2bytes의 메모리 공간을 사용한다.

fun main() {
    var charValue:Char = 'a'
    var koreanCharValue:Char = '가'
}

 

- 문자열 변수 : 코드에서 "따옴표 안에 써주는데", 여러 줄이면"""따옴표 세 개 사용. 줄바꿈, 특수문자까지 사용 가능"""

fun main() {
	val stringValue = "one line string test"
    val multilineStringValue = """multiline
    string
    test"""
}

- 특수문자 지원

\t
\b 백스페이스
\r 첫 열로 커서 옮김
\n 개행
\' 작은 따옴표
\" 큰 따옴표
\\ 역 슬래시
\$ $
\u~~~ 유니코드 문자

- 논리형

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

5. 형변환

- 하나의 변수에 지정된 자료형을 호환되는 다른 자료형으로 변경하는 기능

- 논리형은 변환할 수 없음.

- toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble(), toChar()

- 코틀린은 암시적 형변환(변수 할당 시 자료형을 지정하지 않아도 자동으로 형변환) 지원 x

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

fun main() {
    var a: Int = 54321
    
    // 명시적 형변환
    var b: Long = a.toLong()
}

6. 배열

- 기본적으로 Array 클래스(Array<T>)로 제공

- 처음 선언했을 때 전체 크기를 변경할 수 없다는 단점이 있음

- 한번 선언해두면 빠른 입출력이 가능

fun main(){
	var intArr = arrayOf(1, 2, 3, 4, 5)
    
    // 빈 배열
    var nullArr = arrayOfNulls<Int>(5)
    
    intArr[2] = 8
    println(intArr[4])
}

7. 타입 추론(type inference)

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

- 선언할 때 자료형 생략 가능(변수가 선언될 때 할당된 값의 형태로 해당 변수가 어떤 자료형을 가지는지 추론이 가능)

fun main() {	
    // Int
    // 일반 정수형 리터럴 할당
    var a = 1234
    // 16진수, 2진수
    var e = 0xABCD
    var f = 0b0101010
    
    // L이 붙은 정수형 리터럴 => Long
    var b = 1234L
    
    // 일반 실수형 => Double
    var c = 12.45
    
    // f가 붙은 실수형 => Float
    var d = 12.45f
    
    // Boolean
    var g = true
    
    // Char
    var h = 'c'
}

8. 함수

- 특정한 동작을 하거나 원하는 결과값을 연산하는데 사용

- 함수의 위치는 어디든 상관 x

- 반환값이 있다면 반환값의 형을 함수 명 뒤에 표시

// 3개의 Int를 더하는 함수
fun main() {
    println(add(5, 6, 7))
}

fun add(a:Int, b:Int, c:Int): Int {
    return a + b + c
}
더보기

- 단일 표현식 함수

fun add(a:Int, b:Int, c:Int) = a + b + c

9. 비교 연산자

- 부등호 : <, <=, >, >= , !=

- 등호 : ==

- is 연산자 : 자료형이 맞는지 체크 (ex_ a is Int)

- !is 연산자 : 자료형이 틀린지를 체크


10. if 조건문

fun main() {
    var a = 7

    if(a>10){
        println("a는 10보다 크다")
    }else{
        println("a는 10보다 작거나 같다")
    }
}

11. 다중 조건문 when

- c++의 switch문 같은 것.

- 여러 개의 조건에 맞아도 먼저 부합하는 조건이 실행됨.

fun main() {
    doWhen(1)
    doWhen(2)
    doWhen(12L)
    doWhen(3.12e10)
    doWhen("kotlin")
}

fun doWhen(a:Any) {
    when(a){
        1 -> println("정수 1")
        "Gomi" -> println("코틀린")
        is Long -> println("Long 타입")
        !is String -> println("String 타입이 아님")
        else -> println("맞는 조건 없음.")
    }
}
더보기

이렇게 사용해도 됨.

fun doWhen(a:Any) {
    var result = when(a){
        1 -> "정수 1"
        "Gomi" -> "코틀린"
        is Long -> "Long 타입"
        !is String -> "String 타입이 아님"
        else -> "맞는 조건 없음."
    }
    
    print (result)
}

12. 반복문

- 조건형 반복문 : 조건이 참인 경우 반복을 유지/while, do-while

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

 

- 범위형 반복문 : 반복 범위를 정해 반복을 수행

fun main() {
    for(i in 0..9){
        println("i is $i")
    }
    
    for(i in 1 until 10 step 3){
        println(i)
    }
    
    for(i in 10 downTo 5){
        println("거꾸로 출력 : $i")
    }
    
    for(i in IntRange(1, 10)){
        print("$i\\")
    }
    
    for(i in LongRange(1L, 10L)){
        print("$i\\")
    }
    
    for(i in CharRange('a', 'z')){
        print("$i\\")
    }
}

13. 흐름 제어

- return : 함수 종료 후 값을 반환

- break : 반복문 내의 구문이 실행되는 중간에 즉시 반복문을 종료하고 다음 구문으로 넘어감

- continue : 다음 반복 조건으로 넘어감

- 다중 반복문에서 break나 continue가 적용되는 반복문을 label을 통해 지정할 수 있음.

더보기

- label이름은 마음대로.

- 외부 반복문에 레이블 이름과 @기호를 달아줌.

- break/continue문에서 @레이블이름을 달아줌

- 레이블이 달린 반복문을 기준으로 즉시 break를 시켜줌 => break 이중으로 안 써도 됨.

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

 

728x90
반응형