soft IT life

kotlin 기초 1 - 함수, 변수 본문

Kotlin

kotlin 기초 1 - 함수, 변수

softPattern 2023. 8. 30. 13:06

기본 요소 : 함수

  • 함수선언은 'fun'을 사용
  • 함수를 최상위에 정의 가능(반드시 클래스 안에서 함수를 정의해야할 필요가 없음)
  • 타입 명시는 변수명 뒤
  • 식이 본문인 함수가 자주 쓰인다.
    • cf) if는 문장이 아니라 식이다. 본래 자바에서 if문은 값을 만들어내는 식이 아니라 문장이었다. 반면 대입문은 자바에서 식이었으나 코틀린에서는 문이 되었다.
//'블록이 본문인 함수'-block body
fun max(a: Int, b: Int): Int {
	return if(a > b) a else b
}

//'식이 본문인 함수'-expression body
fun max(a: Int, b: Int) Int = if(a>b) a else b

//위는 동일
  • kotlin의 '타입추론'
    • 식이 본문인 함수의 반환 타입생략. but ! 블록이 본문이 함수는 반드시 반환타입을 지정하고 return문을 명시해야 한다.
    • 코틀린은 정적타입 지정 언어로, 컴파일 시점에 모든 식의 타입을 지정해야 한다. 이때 컴파일러가 함수 본문 식을 분석해 식의 결과 타입을 함수 반환 타입으로 정해준다. => '타입추론'
fun max(a: Int, b: Int) = if (a>b) a else b

 

기본 요소 : 변수

  • 초기화 식이라면 변수 타입 명시를 생략해도 된다.
//초기화 식을 기반으로 타입 추론을 통해 자동적으로 타입을 지정해준다.
val a: Int = 10
val b = 10
val c = "good"

//만약 초기화 식이 아니라면 타입 추론이 불가능하다.
val answer: Int
answer = 10
  • 변경 가능한 변수 / 변경 불가능한 변수
    • val
      • value에서 따옴
      • immutable: 변경 불가능한
      • 해당 키워드로 변수를 선언하고 초기화 하면 이후 재대입은 불가능하다.
      • java의 final 변수와 동일
      • 정확히 한번만 초기화 해야한다. 하디만 블록이 실행될 때 오직 한 초기화 문장만 실행됨을 컴파일러가 확인할 수 있다면 조건에 따라 val 값을 다른 여러 값으로 초기화도 가능하다.(#1.1) 
      • 참조 자체는 불면일지라도 그 참조가 가르키는 객체 내부의 값은 변경될 수 있다.(#1.2)
    •  var
      • variable
      • mutable: 변경 가능
      • java의 일반 변수
      • 값의 변경은 가능하지만 변수 타입은 바꿀 수 없다(#1.3)
//1.1
val a: String

if(abc()){
	a = "zzz"
} else {
	a = "xxx"
}

//1.2
val a = arrayListOf("Java")
a.add("Kotlin")

//1.3
var a = 42
a = "abc"