1. 함수 선언 문법
fun max(a:Int, b:Int):Int{
return if(a > b) a
else b
}
# 함수의 결과 값이 하나 일 경우, 이퀄(=)형태로 사용 가능
# 코틀린은 타입을 컴파일러에서 추론하기에, =을 사용할 경우 함수의 리턴 타입 생략 가능
#
fun max(a:Int, b:int) = if(a > b) a else b
2. default Parameter
함수의 인자 값에 기본 값을 지정할 수 있음
자바에서는 default parameter을 제공하지 않아, 오버로딩을 이용해 개발자가 필요한 함수를 생성해야함
public void repeat(String str, int num, boolean useNumLine){
...
}
public void repeat(String str, int num){
repeat(str, num, true);
}
public void repeat(String str){
repeat(str, 3, true);
}
자바와는 다르게 인자에 기본 값을 지정할 수 있음
# 함수에 인자가 없을 경우, 디폴트로 지정한 값으로 설정
fun repeat(String str, int num=3, boolean useNumLine=true){
...
}
fun main(){
repeat("test", 1);
repeat("test");
}
3. named argument
다수의 디폴트 매개변 수 중 하나만 사용하고 싶을 경우에 사용
함수에서 지정된 매개변수의 이름을 입력 후 값 지정
코틀린에서 자바함수를 가져다 쓸 경우 사용 못함
자바 코드가 바이트코드르 변환했을 때 JVM에서 인자의 이름을 보존하지 못해 사용 하지 못한다.
fun repeat(String str, int num=3, boolean useNumLine=true){
...
}
fun main(){
reapeat("test", useNumLine = false)
}
builder의 동일한 장점을 가질 수 있다
builder의 장점은 동일한 타입일 때 헷깔리지 않는다는 장점이 있음
ex) instance.name("abc").gender("female")
fun printNameAndGender(name:String, gender:String){
...
}
fun main(){
printNameAndGender(name = "test", gender="female")
}
4. 같은타입의 여러 파라미터 받기(가변인자)
자바에서 가변인자
# 인자에 개수가 몇개가 들어올지 모를 경우, 즉 n개의 인자를 받을 경우
public void pringString(String... strings){...}
코틀린에서 가변인자
매개변수 이름 앞에 vararg를 붙여주면, 배열형태로 인자로 들어온다
fun printAll(vararg strings:String){
...
}