코틀린 기초 문법

imssu·2023년 3월 17일
0

Kotlin

목록 보기
1/3
post-thumbnail

Kotiln이란?

JVM(Java Virtual Machine)에 기반을 둔 언어로 젯브레인스에서 오픈소스 그룹을 만들어 개발한 프로그래밍 언어이다.

JVM이란 자바 가상 머신으로 Java 프로그램 실행환경을 만들어주는 소프트웨어이다. 즉, 컴파일을 하면 kotiln이 java 클래스파일로 바뀌고 자바 가상 머신을 거쳐 OS에 특화된 코드로 변환되는 것이다.

장점

  • null safety를 지원한다
  • 자바와 100% 호환한다.
  • 코루틴(coroutines)기법을 이용하면 비동기 프로그래밍을 간소화할 수 있다.

변수

  • val : value의 줄임말, 초깃값이 할당되면 바꿀 수 없음(상수)
    -> 초기화 필수
  • var : variable의 줄임말, 초깃값이 할당되도 바꿀 수 있음

변수의 자료형은 할당된 값을 통해 추론된다.

val data1 = 10 //10을 통해 type 추론
var data2 = 10

fun main() {
	data1 = 20 //data1은 val로 선언되었기 때문에 오류
    data2 = 30 //data2는 var로 선언되어 값을 바꿀 수 있음
}

타입 지정

변수의 type을 지정하고 싶을 때는 변수명 뒤에 :을 추가해 명시해준다.

val data3: Int = 10

초깃값 할당

  • 최상위(클래스 바깥쪽)나 클래스의 멤버 변수는 초깃값을 할당 해주어야 한다.
  • 함수 내부에 선언한 변수는 초깃값을 할당해주지 않아도 된다.
##최상위
val data1: Int = 10 
val data2: Int //error

## 함수 내부
fun testFun() {
	val data3: Int
}

##클래스 멤버 변수
class User {
	val data4: Int //error
    val data5: Int = 40
}
  • 초기화를 미루고 싶을 때는 lateinit 키워드를 사용할 수 있다.
lateinit val data1: Int // 오류
lateinit var data2: String

단, Int, Long, Short, Double, Float, Boolean, Byte 처럼 코틀린에서 기본으로 제공하는 primitive type에는 적용할 수 없다.

  • by lazy : 변수가 최초로 이용되는 순간 중괄호 내용의 결괏값이 변수의 초깃값으로 할당된다.
val data: Int by lazy {
	10 // 이 값이 data에 할당
}

fun main() {
	println(data+10) // 10 + 10 -> 20 출력
    println(data+20) // 10  + 20 -> 30 출력
}

데이터 타입

변수에 타입을 지정해 줄때 Int처럼 첫글자에 대문자를 쓴 이유를 생각해 보았는가?
코틀린의 모든 변수는 객체라는 것을 생각하면 이해하기 수월해진다.

  • Int, Short, Long, Double, Float, Byte, Boolean : 기초 타입 객체

  • Char, String : 문자와 문자열
    String 타입의 데이터는 "" or """로 감싸서 표현한다.

    
    val d0: Any =  모든 타입 // 최상위 데이터 타입
    
    val d1: Byte = 0b00001011
    
    val d2: Int = 10
    val d3: Short = 20
    val d4: Long = 30L
    val d5: Double = 10.0
    val d6: Float = 20.0f
    
    val d7: Boolean = true
    
    val d8: Char = 'a'
    val d9: String = """Hello"""

문자열 템플릿

  • 문자열에 변숫값이나 결괏값을 포함할 때는 $ 기호를 이용한다.
println("name : $name, sum : $sum, result : ${10+sum}")

반환문이 없는 함수와 예외를 반환하는 함수

  • Unit: 반환문이 없는 함수(생략 가능)
    Java의 void와 비슷하지만 Unit은 타입으로 출력이 가능하다.
fun some(): Unit {
	print("Hello")
}
  • Nothing: 예외를 던지는 함수(리턴자체를 하지 않음을 의미)
  • ? : null 대입을 가능하게 한다.
# null 반환

val data: Int? = null

fun some1(): Nothing? {
	return null
}

#예외 반환
fun some2(): Nothing {
	throw Exception()
}

함수

함수 선언의 기본 구조

fun 함수명(매개변수명:타입): 반환타입{ 

}
  • fun 키워드 사용
  • 반환 타입을 생략하면 Unit 타입이 자동 적용
  • 매개변수에는 val, var을 사용할 수 없으며 val이 자동 적용
fun some(data: Int) (Unit생략){ 
	data = 30 // data는 함수의 매개변수로 val이기 때문에 값을 변경할 수 없음. error
}
  • 매개변수에 기본값을 선언할 수 있다.
fun main() {
  fun some(data1: Int, data2: Int = 10) Int{ //10이 기본값
      return data1 + data2
  }
  println(some(10)) // 10(data1에 전달) + 10(기본값) -> 20 출력
  println(some(10, 20)) // 10 + 20 -> 30 출력
}
profile
안녕하세요!

0개의 댓글