Kotlin

[Kotlin] 함수 / 변수 / 자료형 / 배열

sian han 2022. 10. 24. 11:23

아래는 박중수님의 [ 자바개발자를 위한 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() 을 리턴하는 함수