변수
; 종결자 사용하지 않음
변수 선언시 타입을 지정하지 않았다면 초기값을 지정해주면 해당 타입으로 지정
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 |