티스토리 뷰

본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!

 

1. 변수 선언 및 초기화

// 형식
val(혹은 var) 변수명 : 타입 = 값

// 예시
val data1: Int = 10

val

  • value(값)의 줄임말.
  • 한 번 초기화되면 더는 변경할 수 없다.
  • 읽기 전용 변수를 선언하는 데 사용된다.

var

  • variable(변수)의 줄임말.
  • Mutable 변수로 선언한다. 

변수 선언에 대해 알게 된 것

  • 읽기 전용 변수라는 뜻으로 val을 선언하고 Mutable 변수라는 뜻으로 var을 입력한다.
  • 변수를 선언할 때 데이터 타입을 명시하지 않으면 대입하는 초깃값에 따라 적절한 타입이 자동 적용된다.(타입 추론)
  • 코틀린의 변수는 자동으로 초기화되지 않는다. 코드에서 직접 초깃값을 대입해줘야 한다.
  • 최상위 레벨이나 클래스의 멤버 변수는 선언과 동시에 초기화해줘야 한다.
  • 지역변수는 선언과 동시에 초기화하지 않아도 되지만 사용하려면 이후에 따로 초기화해야 한다.

 

null이 될 수 있는 변수와 null

코틀린에서 null 값을 대입하려면 명시적으로 null이 될 수 있는 변수로 선언해야 한다. 이런 기법은 null 안정성을 보장하는 코틀린만의 특징이다.

null을 허용하고 싶다면 타입 오른쪽에 '?'을 적어준다.

var nullableData1: String? = null

 

상수변수 선언 (const)

처음에 대입한 초깃값을 변경하지 않고 그대로 사용하는 변수를 '상수변수'라고 하는데 코틀린은 이런 기능을 위해서 'const'라는 예약어를 제공한다.

그런데 얼핏 의문이 든다. val이라고 입력하면 읽기 전용 변수가 되어서 변경이 불가능한데 왜 따로 const를 제공하는 것일까? 

코틀린에는 프로퍼티라는 기능을 통해서 값이 변경되지 않더라도 반환을 다르게 할 수 있는 기능이 있다. (추후에 다른 글을 통해서 정리할 예정)

 

그래서 처음에 대입한 값을 변경할 수 없고 항상 초깃값만 반환하도록 보장하기 위해 const라는 예약어를 제공한다.

 

const val myConst1: Int = 10
const var myConst2: Int = 10 // 바꾸지 않을 변수에 var을 입력하면 컴파일 에러가 발생

주의할 점은 const 예약어는 최상위 레벨로 선언할 때만 사용되도록 강제된다. 이유는 어찌보면 간단하다. const로 작성되는 변수는 변경할 수 없고 클래스의 객체별로 다르게 표현되지도 않는데 클래스의 멤버 변수로 선언할 필요가 없기 때문이다. 클래스의 다른 멤버 변수와 구분 지어주기 위해서 그렇게 강제하지 않았나 싶다.

 

2. 함수 사용법

함수 선언

fun이라는 예약어를 사용

// 형식
fun 함수명(매개변수명 : 타입) : 반환타입 { }

// 예시
fun sum(a: Int, b: Int): Int {
	return a + b
}

함수 선언에서 의미있는 반환값이 없을 때(자바의 void)는 Unit으로 명시하는데 생략이 가능하다.

함수 선언 시에 단일 구문으로 값을 반환하는 함수라면 단일 표현 함수(single expression function)으로 작성할 수 있다. 예시는 다음과 같다.

fun sum(a: Int, b: Int): Int = a + b

 

함수 선언에 대해 알게 된 것

  • 자바와 마찬가지로 오버로딩을 지원한다.
  • 매개변수가 들어오지 않았을 경우 사용할 기본인수(default argument)도 지원한다.
  • 함수 호출 구문에서 인수를 대입할 매개변수의 이름을 지정하는 기법인 명명된 인수(named argument)도 지원한다.
fun sayHello(firstName: String = "Jun", lastName: String) {
	println("Hello! " + firstName + lastName)
}

sayHello(lastName = Jeong)

// 출력 : Hello! JunJeong

infix를 통해서 중위 표현식을 함수 호출에 사용할 수도 있다.

vararg를 통해서 인수의 개수나 타입에 상관 없이 아무렇게나 지정해도 함수가 호출된다.

tailrec을 통해서 재귀함수를 사용하면 컴파일될 때 반복문을 활용하여 만든것으로 변환된다. 즉, 재귀함수로 편리하게 작성하지만 StackOverflowError에 자유로운 코드가 된다.

 

참고 자료

[깡샘의 코틀린 프로그래밍] 강성윤 지음 <루비페이퍼>

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함