Scala def 괄호 여부의 차이
- 스칼라에서 argument가 하나도 없는 메소드를 정의할 때엔 괄호를 붙일 수도 있고 안 붙일 수도 있음
괄호를 붙일 때
예제 코드
class TestClass {
def testFunction() = { println("Hello world!") }
def main(args: Array[String]): Unit = {
testFunction()
testFunction
}
}
괄호를 안 붙일 때
예제 코드
class TestClass {
def testFunction = { println("Hello world!") }
def main(args: Array[String]): Unit = {
testFunction()
testFunction
}
}
차이점
코드 실행 결과
- 괄호를 붙인 경우엔 두개 다 정상 작동
- 괄호를 안 붙인 경우에는 testFunction()에서 에러가 나온다
이유
- 괄호 없이 정의한 함수를 호출하면 사실 괄호까지 가기 전에 이미 호출된 상황임
- 그리고 돌아온 Unit에다가 () argument를 대입하려고 하니 에러가 나는 것
- 반대로 괄호를 붙여 정의한 함수를 괄호 없이 호출하면 문제없이 동작하지만 괄호를 들어갔다 빠져나오는 동작이 하나 더 추가됨
- 그렇기 때문에 함수에 사이드 이펙트가 없고 상태를 변경하지 않는다면 괄호 없이 정의하는 것이 나음
- 괄호 없이 함수를 정의하면 Field처럼 쓰일 수도 있기 때문에 요주의