Function
기본 함수호출
자바에서는 메서드를 사용하지만, 코틀린에서는 다른 프로그래밍 언어에서 처럼 함수
개념이 존재합니다.
일반적인 함수 사용법은 fun 함수명(파라미터){내용}
이며, 자바 코드로 변환될때는 클래스 내의 메서드로 바뀌게 됩니다.
fun main() {
printHello()
}
fun printHello() {
println("Hello Kotlin")
}
실행 결과
Parameter
함수에 파라미터를 넣을때는 자바와는 반대로 변수명:자료형
으로 작성 합니다. 재밌게도 자바에서 int a
라고 썼지만, 코틀린에서는 a: Int
라고 작성 해야 합니다.
fun main() {
var a = 1
var b = 2
print("a + b = ${plus(a,b)}")
}
fun plus(a: Int, b: Int): Int {
return a + b
}
실행 결과
변수 이름에 할당
그런데 재밌게도, 자바에서는 파라미터의 순서만으로 각 파라미터를 구분해 할당 하지만, 코틀린에서는 파라미터 이름에 변수를 직접 할당 할 수 있습니다.
fun main() {
var a = 1
var b = 2
println("a / b = ${divide(a, b)}")
println("b / a = ${divide(num2 = a, num1 = b)}")
}
fun divide(num1: Int, num2: Int): Double {
return num1.toDouble() / num2
}
실행 결과
여전히 a, b 의 순서로 파라미터를 넣어 줬지만, num2와 num1 이라고 파라미터를 직접 지정해주면, 각각 원하는 자리에 파라미터가 배정 됩니다.
이렇게 할 바엔 그냥 평소처럼 순서를 지키며 작성하는 것과 뭐가 다른가 싶기도 하겠지만, 파라미터에 default value를 지정 할 경우에는 얘기가 달라집니다.
fun main() {
println(sum(b = 2))
}
fun sum(a:Int=0, b:Int=1, c:Int=2):Int {
return a + b + c
}
실행 결과
이렇게 a, b, c에 기본값을 주고 특정 파라미터만 값을 변경 하고 싶은 경우에는 직접 파라미터를 할당 하면 편리합니다.
Unit
Unit은 자바에서의 void 처럼 반환값이 없을 때 사용합니다.
return 타입을 따로 명시해주지 않으면 자동으로 반환타입이 Unit 이 되며
:Unit
은 굳이 명시 해 주지 않아도 됩니다.
Function Overloading
자바에서의 Method Overloading과 마찬가지로, 함수 오버로딩이 가능 합니다.
fun main() {
overloading();
overloading(1);
overloading("Hello");
}
fun overloading(s: String) {
println("one String Parameter: $s")
}
fun overloading(i: Int) {
println("one int Parameter: $i")
}
fun overloading() {
println("No parameter")
}
실행 결과
Local function
코틀린은 펑션 내부에 펑션을 선언하는 지역 함수의 사용이 가능합니다.
fun main() {
func1()
}
fun func1() {
println("func1")
fun func2(){
println("func2")
fun func3(){
println("func3")
}
func3()
}
func2()
}
당연하게도, 지역 함수들은 그 외부에서는 호출이 불가능 합니다.
Operator
UnaryOperator
- java 에서 처럼 변수 앞에
+
나-
를 붙일 수 있습니다. + 연산자는 아무 변화가 없지만, - 연산자는 부호를 반대로 만듭니다. .UnaryMinus()
메서드를 사용해 부호를 반대로 할 수도 있습니다.
var a = 1;
var b = -1;
println("+ 연산자는 아무런 변화를 주지 않는다.")
var a1 = +a;
var b1 = +b;
println("a: $a, +a: $a1")
println("b: $b, -b: $b1")
println("\n- 연산자는 부호를 반대로 바꾼다.")
var minusA = -a;
var minusB = -b;
println("a: $a, -a: $minusA")
println("b: $b, -b: $minusB")
println(".unanryMinus() 메서드와 동일한 기능을 한다.")
println("a.unaryMinus() = ${a.unaryMinus()}")
println("b.unaryMinus() = ${b.unaryMinus()}")
실행 결과
- not 연산자는 논리 값을 반대로 변경 해 줍니다.
var trueValue = true;
var falseValue = false;
println("\n! 연산자는 불리언 값을 반대로 바꾼다.")
println("!trueValue: ${!trueValue}")
println("!falseValue: ${!falseValue}")
println(".not() 메서드와 동일한 기능을 한다.")
println("trueValue.not() = ${trueValue.not()}")
println("falseValue.not() = ${falseValue.not()}")
실행 결과
- java에서와 마찬가지로 증감 연산자도 활용 할 수 있습니다.
.inc()
메서드를 대신 호출 할 수도 있습니다.
println("\n증감 연산자는 java에서와 활용 방법이 동일하다. .inc() 메서드를 호출한다.")
println("a: $a")
println("a++: ${a++}")
println("a: $a")
println("++a: ${++a}")
실행 결과
ArithmeticOperator
- 기본적인 사칙 연산은 java와 동일합니다.
val a = 123
val b = 4
println("기본적인 사칙 연산은 java와 동일")
println("a + b = ${a+b}")
println("a - b = ${a-b}")
println("a * b = ${a*b}")
println("a / b = ${a/b}")
println("a % b = ${a%b}")
실행 결과
- java에서는 없는 IntRange가 존재합니다. 반복문을 돌리거나 할 때 유용하게 사용됩니다.
val range:IntRange = 10..20
println("\nIntRange")
println("10..20: $range")
println("range.first = ${range.first}")
println("range.last = ${range.last}")
실행 결과
- 비교 연산도 다른 프로그래밍 언어들과 같은 방법으로 사용합니다.
println("\na:$a, b:$b 일때 비교 연산")
println("a==b = ${a==b}")
println("a!=b = ${a!=b}")
println("a>=b = ${a>=b}")
println("a<=b = ${a<=b}")
실행 결과
다음 글에서는 제어문에 대해 알아보겠습니다.
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린에서 queryDSL 설정하기 (0) | 2022.09.19 |
---|---|
[Kotlin] 코틀린에서 Validation 이 안될때 해결방법 (0) | 2022.09.07 |
Kotlin) Data class 에 기본 생성자 만들기 (0) | 2022.05.25 |
가볍게 읽어보는 Kotlin) 3. 제어문 (0) | 2022.04.10 |
가볍게 읽어보는 Kotlin) 1.기본 문법 및 변수와 자료형 (0) | 2022.04.07 |