아래는 박중수님의 [ 자바개발자를 위한 KOTLIN ] 책을 보고 정리한 내용입니다.
※ 함수
- fun 키워드로 함수를 선언함
fun 함수명(변수명:타입, 변수명:타입...) : 반환형{
내용...
return 반환값
}
fun sum(a:Int, b:Int) : Int{
return a + b
}
fun sum(a:Int,b:Int) = a+b
함수 내용이 단일 행일 경우는 리턴타입을 생략 할 수 있다.
▶ void = Unit
반환타입이 없는 함수의 경우 반환형태에 Unit 이라고 쓴다
(자바에서 메소드를 선언할 때 void 로 사용하는 것과 같은 뜻)
fun printSum(a:Int, b:Int) : Unit{
println(a+b)
}
아무것도 적지 않으면 Unit 이 기본적으로 리턴 됨
fun printSum(){
println("hello world")
} // 콘솔에 아무것도 찍히지 않음
코틀린에서는 반환하는 값이 없으면 반환형을 생략할 수 있다.
▶ 가변인자 vararg
가변인자 함수
- 매개변수의 개수가 변할 수 있는 함수
- 가변인자 함수는 매개변수를 선언된 형태와 다르게 사용했을 때, 매개변수를 모두 활용하는 함수를 의미함
함수에서 vararg 키워드를 사용하여 가변인자를 사용할 수 있다.
fun printNumbers(vararg numbers:Int){ //가변인자 사용됨
for(number in numbers){
println(number)
}
//main
printNumbers(1,2,3,4) //매개변수로 여러개 넣음
▶ 내부함수
함수 내부에 또 함수를 정의할 수 있음
fun function1(num1:Int):Int{
fun function2(num2:Int):Int {
fun function3(num3:Int):Int{
return num3+1
}
return function3(num2) +1
}
return function2(num1) + 1
}
function1 내부에 function2 가 선언되어있고, function2 내부에 function3 가 선언되어있다.
각각 인자로 받은 숫자에 1을 더해 리턴해준다.
따라서 function1 에 0을 넘겼을 때 함수가 총 3번 호출되므로 3이 리턴된다
※ 변수
▶ val
읽기 전용 변수
상수를 선언할 때 사용
▷ 즉시할당
val a : Int = 1
▷ 동적타입캐스팅
- 타입을 적지 않으면 알아서 타입을 추론해줌
val b = 2
▶ var
▷ 변수 선언
var num =10
- num 이라는 변수에는 컴파일러가 자동으로 타입을 유추하여 int 자료형 부여
▷ 명시적 변수형 선언
var num:Int = 10
▷ 선언 후 초기화
- 변수의 자료형을 명시해줬을때만 가능하다
var num:Int
num =10
//잘못된 예
var num
num =10
▷ 문자열 템플릿
- $를 이용해 a변수에 접근하여 값을 바로 가져올 수 있다
- 문자열 템플릿 기능을 사용할 경우 반드시 공백으로 변수를 구분해주어야 한다
var a = 1
var s1 = "a is $a"
//JAVA
var a = 1
var s1 = "a is" + a
{ } 안에 코드를 넣으면 코드 안에서 리턴 된 값을 바로 할당할 수 있다.
val myname = "한서현"
val introduce "제 이름은 $myname 입니다"
val nameLength = "제 이름은 ${myname.length}글자 입니다"
a = 2
vas s2 = "${s1.replace("is","was")}", but now is $a" // s2 = a was 1, but now is 2
※ 자료형
- 코틀린의 자료형은 자바와 동일하다
▶ 형변환
▷ 기본 자료형끼리의 형변환은 메소드로 할 수 있다
var intNum:Int = 10
var longNum:Long = intNum.toLong()
var shortNum:Short = intNum.toShort()
▷ 문자열의 숫자변환
var str ="10"
var number:Int = str.toInt()
- 숫자가 아닌 문자열을 형 변환 할 수 없다 => NumberFormatException 발생
▶ 타입검사
▷ is 키워드 사용
if(str is String){
println("str 은 문자열")
}else if (str is Int){
println("str 은 정수")
}else{
println("str은 무슨 타입인지 모르겠습니다")
}
코틀린의 문자열은 기본적으로 Char 의 배열처럼 취급할 수 있다.
즉 배열처럼 인덱스로 한 글자씩 접근할 수 있다.
var str = "abcdefg"
for(c in str){
println(c)
} // 각 요소가 하나씩 출력됨
▶ Null
- 코틀린의 자료형은 기본적으로 Null 값을 가질 수 없다
- NUll 을 갖기 위해선 자료형 이름 뒤에 ? 를 붙여줘야 함 = ? 가 붙지 않은 자료형은 Null 이 아님을 보장함
var str1:String = null // 컴파일 에러
var str2:String? = null // OK
※ 배열
자바 배열 = [] 사용
코틀린 배열 = Array 클래스에 제너릭타입을 넣어 표현
▶ 기본값이 들어있는 배열 생성
- arrayOf 메서드 사용
var arr : Array<Int> = arrayOf(0,1,2,3)
println(Arrays.toString(arr)) // [0,1,2,3]
▶ 팩토리로 배열 생성
- 크기와 값 생성함수를 인자로 받는 팩토리를 사용하여 배열을 생성할 수 있다.
var arr = Array(5,{i->i.toString()})
println(arr is Array<String>) // true
println(Arrays.toString(arr)) // [0,1,2,3,4]
Array 의 첫번째 인자 = 배열의 사이즈
두번째 인자인 함수는 i 를 매개변수로 받고, String 형태인 i.toString() 을 리턴하는 함수
'Kotlin' 카테고리의 다른 글
[Kotlin] 목록에서 랜덤으로 1개만 가져오기 (response : objectDTO) (0) | 2022.11.22 |
---|---|
[Kotlin] 유용한 함수 with / run (0) | 2022.11.15 |
[Kotlin] 데이터클래스 / 컬렉션 (0) | 2022.11.14 |
[Kotlin] 예외처리 / 람다 / 클래스 (0) | 2022.11.14 |
[Kotlin] 조건문 / 반복문 (0) | 2022.11.14 |