본문 바로가기
학습 log (이론)/kotlin

'변수와 함수' Kotlin기초

by abbear25 2019. 8. 18.

변수

 

; 종결자 사용하지 않음

 

변수 선언시 타입을 지정하지 않았다면 초기값을 지정해주면 해당 타입으로 지정

var name = "illua"

var name : String = "illua"

 

null 허용을 위해선 ? 사용

var name : String? = null 

 

강제 not null 처리 !!

val notNullStr: String = s!!

 

null처리 ?.

:null이 아닐 경우에만 오른쪽 함수 실행, null이면 null 반환

name?.toUpperCase()

 

null처리 ?: (elvis operator)

: null인 경우에 오른쪽 값으로 치환

val name = str ?: "illua"

 

static 변수 (재사용불가능한 변수 선언)

val age = 0

 

vararg 함수에 가변인자(입력값의 개수가 정해지지 않음) 전달

fun print(vararg strings: String, id: Int): Unit{ }

print("str1", "str2" ..., id= 1)

print(*arryList)

배열은 변수 앞에 * 붙임

 

*val과 var의 차이점

val (value): immutable, 변경 불가능한 'final변수'

var (variable): mutable, 변경 가능한 '일반변수'

 

lateinit var 변수명

: variable을 늦은 초기화 할 경우에 사용

 

val 변수명 by lazy{}

: value를 늦은 초기화 할 경우에 사용

 

형변환, to대입형() 메소드

doubleVal = intVal.toDouble()

val sum = "100".toLong() + 10;

 

cast 형변환 as?

: as만 사용하면 type이 맞지않으면 ClassCastException 발생하므로 ?를 붙여 불가능시 null반환

*?: Elvis operator를 이용하여 null 대신에 다른 값 반환가능 

val person = 0 as ? Person ?: return false

 

문자열처리, ${}내에 함수호출

var name = "illua"

var sName = "$name"

var sBash = "${"시간 - "+Date()}"

 

Any형, 타입 동적할당

*java의 object와 동일

var vars : Any

vars = 123

vars = "문자열"

vars = 12.00f

 

Unit,  반환 값이 없음을 의미

*java의 void와 동일하지만 인자로 사용

 

!is, 타입비교 

if(vars !is String){ println("String 형")}

 

@ 주석 소개, 루프 또는 람다 테이블 소개 참조, 외부 범위에서 this 표현식 참조, 외부 슈퍼 클래스 참조

 

:: 멤버 또는 클래스 참조

 

함수

/*기본 함수 표현*/
fun baseFunction(args: String){
		/*한 줄로 표현할 경우*/
        fun innerFunction(n:Int) = 3 * n //유추에 의해 return 타입 생략
        fun innerNullFunction(n1:Int, n2:Int): Int? = a+b
        println(args);
    }
    /*다중 함수, Unit은 Void*/
    fun higherOrderFunc( f : () -> Unit){
        f() //받은 함수를 그대로 호출
    }
    fun getSum(n:Int){
        //클래스 내부의 함수가 우선 호출되므로 
        //확장함수로 동일한 함수명을 사용하기 위해서는 입력변수 개수를 다르게 지정
    }
    /*확장 함수*/
    infix fun Int.getSum(n:Int)=this+5
    1.getSum(5)
    1 getSum 5 //infix로 선언된 확장 함수호출 방법
    /*함수형 변수의 값*/
    val funcVar = { s : String -> println (s)}
    /*함수형 변수의 타입*/
    var funcVarType :  (String) -> Any? = ::funByReturn //:: 함수 주소 값을 넘김

기본 함수

fun 함수명 (변수명:데이터타입, ...): 리턴타입 {

 함수내용

 return 값

}

 

한줄로 표현할 경우

fun 함수명 (변수명:데이터타입, ...): 리턴타입 = 함수내용

 

확장 함수

fun 타입.함수명(변수명:데이터타입, ...): 리턴타입{

 함수내용

 retrun 값

}

*원래있던 함수처럼 접근하여 사용가능. Extension보다 Class의 원래 함수가 우선순위 높음

*입력 변수가 1개인 경우, infix notation 사용가능

 

함수형 변수(함수를 입력받는 변수)의 값

{변수정의 -> 코드구현}

 

함수형 변수의 타입

(입력정의) -> 리턴정의

 

반응형

'학습 log (이론) > kotlin' 카테고리의 다른 글

Kotlin기초 '객체'  (0) 2019.11.03
Kotlin기초 'Exception 처리'  (0) 2019.10.27
Kotlin기초 'Collection'  (0) 2019.10.24
Kotlin기초 'label'  (0) 2019.10.21
Kotlin 기초 '제어문'  (0) 2019.10.20