본문 바로가기

Programming/Kotlin

4. 변수와 함수

4.1 변수 선언 및 초기화

 4.1.1 변수 선언법

   - var(val) 변수명 : type = 값

   - var(variable) : Mutable 변수로써, 값을 언제든지 변경할 수 있다.

   - val(Assign-once) : Read-only변수로써 변수를 한 번 초기화하면 더는 변경할 수 없다.

   - 코틀린에서는 타입을 명시하지 않아도 Type Inference(타입 추론)을 적용하여 적절한 타입을 매칭한다.

 

 4.1.2 변수 초기화

   - 변수 선언은 최상위(클래스 외부), 클래스 내부(멤버 변수), 함수 내부에 할 수 있다.

   - 코틀린의 변수는 자동으로 초기화 되지 않으므로 코드에서 직접 초깃값을 대입해 주어야 한다.

   - 최상위 레벨이나 클래스의 멤버 변수는 "반드시" 선언과 동시에 초기화해주어야 한다.

   - 지역 변수는 선언과 동시에 초기화하지 않더라도 이후에 따로 초기화해야지만 사용할 수 있다.

 

 4.1.3 null이 될 수 있는 변수와 null

   - 코틀린에서는 null을 대입할 수 없는 변수와 있는 변수로 구분하여 사용한다. 이 부분을 null 안전성이라고 한다.

   - null 안전성(safety)란 null에 안전한 프로그램을 작성하기 위한 기법이다.

   - 어떤 변수에 null 값을 대입하려면 타입에 물음표(?) 기호를 이용하여 명시적으로 선언한다.

   ex) val nullableData : String? = null

 

 4.1.4 상수변수 선언(const)

   - 처음에 대입한 초기값을 변경하지 않고 그대로 사용하는 변수

   - val 변수와 비슷하지만 차이가 있다. --> 코틀린에서 변수는 property이다.

   - val의 초기값을 직접적으로 변경할 수는 없지만, 해당 변수의 함수에서 어떻게 처리하느냐에 따라 다른 값이 나올 수 있다.

   - 상수 변수는 초기값을 변경할 수 없고, 항상 초기값만 반환하도록 보장한다.

   - const 변수는 var로 선언될 수 없고 클래스, 함수 내부에서도 선언할 수 없다. --> 최상위 레벨에서 선언한다.

 

4.2 함수

 4.2.1 함수 선언(fun)

   - fun 함수명(매개변수 : 타입) : 반환타입{ } 으로 선언

   - 매개변수 부분에는 var, val을 선언할 수 없고, 무조건 val로 적용된다.

   - 반환값이 없을 때는 Unit으로 명시하거나 생략한다.

   - 함수 내에 함수 선언이 가능하다

   - 단일 표현 함수는 '='을 이용해 쉽게 정의 가능

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

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

 4.2.2 함수 오버로딩

   - 같은 이름의 함수를 매개변수 부분을 다르게 하여 여러 개 정의하는 기법이다.

   - 변수나 클래스는 같은 이름으로 여러 개 정의하면 선언 중복 에러가 발생한다.

 

 4.2.3 기본 인수와 명명된 인수

   - caller가 callee에게 전달하는 값 = 인자(인수)

   - caller가 전달할 값을 대입할 매개변수명을 명시하는 방법이 명명된 인수이다.

   ex) sayHello(name = "Kim", num = 10)

 

 4.2.4 중위 표현식(infix)

   - 객체명 함수명 매개변수 --> 함수의 중위 표현식

   - 함수를 중위 표현식으로 표현하려면 infix라는 예약어로 선언애야 한다.

   - 클래스의 멤버 함수로 선언하거나 클래스의 확장 함수일 때

   - 매개변수가 하나인 함수일 때

 

 4.2.5 가변인수(vararg)

   - 함수 오버로딩에 의해 너무 많은 함수가 선언되어 불편한 경우가 발생

   - 가변 인자(variable argument)를 포함하는 함수로 선언하면 쉽게 작성할 수 있다.

   - 가변 인수를 포함하는 함수는 vararg라는 예약어를 이용하여 선언한다.

 

 4.2.6 재귀함수(tailrec)

   - 함수 내에서 자신의 함수를 다시 호출하는 것.

   - 꼬리 재귀함수 : 소스코드가 자바로 변경될 때 재귀함수가 아닌 일반적인 반복문으로 변형된다.

   - 이는 재귀 호출로 발생할 수 있는 StackOverFlowError의 부담감에서 벗어날 수 있다.

   - tailrec 재귀 함수에서 자신을 다시 호출하는 구문은 맨 마지막 작업으로 작성해야한다(꼬리 재귀함수)

'Programming > Kotlin' 카테고리의 다른 글

6. 흐름 제어 구문과 연산자  (0) 2020.01.13
5. 데이터 타입  (0) 2020.01.13
3. 코틀린 기본 작성법  (0) 2020.01.08
2. Kotlin 개발환경  (0) 2020.01.08
1. Kotlin 이해하기  (0) 2020.01.08