신규 블로그를 만들었습니다!
코틀린에서 메소드를 만드는 방법을 알아보고, 반환값이 있는 메소드 생성하는 법과 반환값이 없는 메소드 생성하는 법을 살펴본다. 그리고, 자바와 달리 코틀린에서만 사용가능한 메소드 정의 법(식이 문장인 메소드)을 살펴본다.
코틀린 메인 메소드 생성
코틀린에서는 기본적으로 메소드를 선언할때 fun이라는 키워드를 사용한다. 그리고 아래와 같이 메인 메소드를 선언 할 수 있다.
fun main(args:Array<String>){
println("Hello, World!")
}
자바와 차이점이 있다면, 코틀린에서는 최상위에서 메인함수, 일반 함수를 선언 할 수 있다. 자바에서는 class안에 메소드를 사용할 수 있지만, 코틀린에서는 클래스 밖의 최상위 레벨에서 선언이 가능하다는 뜻이다.
그리고, 파라미터 이름 뒤에 타입을 쓴다.
참고. println()
자바에서는 System.out.println()을 사용하여 콘솔 출력을 하지만, 코틀린에서는 println()을 이용하여 콘솔 출력이 가능하다. 물론 코틀린은 자바 기반 언어이기 때문에, System.out.println()으로도 할 수 있지만, 굳이 사용할 필요는 없는 것 같다....
참고. 세미콜론
코틀린에서는 파이썬과 같이 세미콜론(;)을 사용하지 않는다. 자바에서는 하나의 코드가 완성되면 끝에 세미콜론을 붙여야하지만, 코틀린은 그럴 필요 없다. 사용한다고 해서 에러가 발생하는 것은 아니지만, 코틀린에서 원하는 방식의 프로그래밍 방법은 아닌듯하다.
위에서는 return값이 없는 메소드에 대해 살펴봤고, 아래에서는 return값이 있는 메소드를 본다.
return값이 있는 메소드
fun 메소드이름(변수: 타입 ...): return타입{ ... }과 같은 형태로 작성한다. 메소드 이름 뒤에 ": [return 타입]"을 붙여 return 메소드를 만들 수 있다. 아래 예제를 통해 이해 할 수 있을 것이다.
// return 값이 있는 함수
fun max(a: Int, b: Int): Int{
return if(a > b) a else b
}
위 메소드를 더욱 간결하게 작성하는 방법이 있다. 식이 본문인 함수인데, 아래에서 살펴본다.
식이 본문인 함수
식 본문으로 변환(Convert to expression body)한 함수를 쉽게 설명하면, 메소드를 한줄의 식으로 생성이 가능하다.
fun max2(a: Int, b: Int): Int = if(a > b) a else b
등호(=)를 사용하여 중괄호({})없이 하나의 문장으로 메소드를 만들 수 있다.
식이 본문인 함수에서는 결과값에 대한 변수 타입을 생략이 가능하다.
fun max3(a: Int, b: Int) = if(a > b) a else b
코틀린 컴파일러의 타입추론(Type inference)를 통해 알아서 타입을 추론하여 타입을 정해준다.
코드를 통해 한눈에 살펴보기
// return 값이 없는 함수
fun main(args: Array<String>){
println(max(1,3))
println(max2(4,100))
println(max3(30, 20))
}
// return 값이 있는 함수
fun max(a: Int, b: Int): Int{
return if(a > b) a else b
}
// 위 함수를 좀 더 간결하게 작성 가능
// 등호(=)를 사용하여 표현이 가능하다.
fun max2(a: Int, b: Int): Int = if(a > b) a else b
// 식이 본문인 함수의 경우는 반환 타입을 생략이 가능하다.
// 타입 추론(type inference)를 통해 컴파일러가 알아서 타입을 정해준다.
fun max3(a: Int, b: Int) = if(a > b) a else b
1~6번째 줄 : return값이 없는 함수(aka. 메인함수)
8~11번째 줄 : return 값이 있는 함수
13~15번째 줄 : return값이 있고, 식이 본문인 함수
17~19번째 줄 : return 값이 있고, 식이 본문이면서 결과타입을 생략한 함수
본 글은 Dmitry Jemerov, Svetlana Isakova의 "Kotlin in action" 책을 참고하여 작성한 글입니다.
다른 글
2019/02/03 - [Language/Kotlin] - 코틀린(Kotlin)이란 무엇인가? 정적 타입 지정 언어
2019/01/28 - [Algorithm/백준 온라인 저지] - 백준 1000번 코틀린(Kotlin)으로 풀어보기
2019/02/04 - [Language/Kotlin] - 코틀린의 변수 사용법 및 val과 var의 차이점
'Language > Kotlin' 카테고리의 다른 글
코틀린의 enum class 사용방법 (0) | 2019.02.10 |
---|---|
코틀린의 필드와 접근자(getter, setter) 사용방법 (0) | 2019.02.07 |
코틀린의 문자열 템플릿(Kotlin String Templates) (0) | 2019.02.06 |
코틀린의 변수 사용법 및 val과 var의 차이점 (0) | 2019.02.04 |
코틀린(Kotlin)이란 무엇인가? 정적 타입 지정 언어 (0) | 2019.02.03 |
최근댓글