[Kotlin] 펑션(Function) 선언 방법

    자바를 하는 사람들에게는 메소드(Method)라는 것이 매우 익숙할지 모르겠으나, 코틀린은 메소드라는 표현보다는 펑션(Function)이란 말을 사용한다. 펑션은 사실 메소드보다 더 상위 개념이고, 메소드는 한 클래스내에서 호출이 가능한 펑션이라는 의미를 담고 있다.

     

    코틀린의 경우 클래스를 생성하지 않아도 펑션을 만들 수 있기 때문에 펑션이란 말을 표현하는 것 같은데 펑션과 메소드라는 것부터 코틀린이 자바에서 분기된 사상이 무엇인지 알 수 있을 것이다.

     

    [Kotlin] 펑션(Function) 선언 방법


    Kotlin의 함수 선언법

    fun 함수명(인자값) 리턴값 {
    	// 코드내용
    }

    코틀린의 경우 자바와 큰 차이는 우선 리턴값이 시작부터 선언하는 자바와 다르게 함수선언 이후에 선언을 한다는 점이다. 그리고 변수처럼 인자값에 들어가는 것도 자바의 int a처럼 타입 변수명이 아니라 a: int 처럼 변수명 타입순으로 다르다.

     

    그러면 혹자는 이렇게 생각할 수 있을 것이다. 변수명과 타입 순서를 바꾼다고 더 좋은 언어인가? 이럴거면 코틀린을 써야 되는 이유가 있어?라고 생각할 수 있는데 코틀린은 자바의 불필요한 것들을 상당히 많이 제거하였고, 라인 수를 상당히 줄일 수 있는 언어이기 때문에 당연히 찬찬히 살펴보면 많이 다르다.

     

    Java와 비교

    Java 의 max 함수

    package com.tistory.needneo;
    
    public class Main {
    
        public static void main(String[] args) {
            Main main = new Main();
            System.out.println(main.max(4,5));
        }
    
        int max(int a, int b) {
            return (a > b) ? a : b;
        }
    }

    위 코드는 자바의 메인 클래스에서 max라는 메소드를 만들었고, 이를 호출한 내용이다. 위 결과값은 당연하게도 5라는 값이 떨어진다. 사실 max의 경우 수학 패키지인 Math 안에 포함이 되어 있기에 위와 같은 메소드를 만들 필요 없지만 예시를 위해서 만들어봤다. 위 코드를 코틀린으로 만들경우 아래와 같다.

     

    Kotlin의 max 펑션

    fun main() {
        println(max(4, 5))
    }
    
    fun max(a: Int, b: Int) : Int {
        return if(a > b) a else b
    }

    위와 아래의 결과만 보면, 사실 누가 더 낫다라고 말을 하기가 힘이 들 것이다. 단지 순서만 다를 뿐 오히려 else가 없고 삼항 연산자로 if를 사용하지 않는 java가 심지어 더 깔끔해보인다. 하지만 이럴 경우 코틀린에게는 비장의 무기가 있다. 바로 본문이 이렇게 심플하게 공식형태로 되어 있을 경우 한줄로 줄일 수 있는 것이다.

     

    변형된 max 펑션

    fun main() {
        println(max(4, 5))
    }
    
    fun max(a: Int, b: Int) : Int = if(a > b) a else b

    3줄짜리의 펑션이 1줄로 탈바꿈해 버렸다. 코틀린은 잘 알면 잘 알수록 위와 같이 소스의 양이 줄어들 수 있다.

     

     

    Void 비교

    Java 소스

    package com.tistory.needneo;
    
    public class Main {
    
        public static void main(String[] args) {
            Main main = new Main();
            main.displayMax(4,5);
        }
    
        void displayMax(int a, int b) {
            System.out.println("max->" + max(a, b));
        }
    
        int max(int a, int b) {
            return (a > b) ? a : b;
        }
    }
    

     

    이번에는 displayMax라는 메소드를 추가했으며 해당 메소드는 max 메소드를 호출하여 최대값을 화면에 호출하는 메소드이다. 이와 같은 자바 코드는 아래와 같이 코틀린 코드로 변경이 될 수 있다.

     

    Kotlin 소스

    fun main() {
        displayMax(4, 5)
    }
    
    fun max(a: Int, b: Int) : Int = if(a > b) a else b
    
    fun displayMax(a: Int, b: Int) {
        println(max(a, b))
    }

    void의 경우 아무런 선언을 하지 않을 경우 void로 인식을 한다.

     

    코틀린은 이처럼 최대한 불필요한 코드는 자제를 하는 언어라고 생각하고 지금도 계속 발전하는 언어이다. 물론 그런식으로 말을 하면 자바 역시 마찬가지겠지만, 최근에 많이 탄생하는 언어들의 스타일과 코를린은 모양새가 유사한 것을 보면, 코틀린이 좀 더 미래지향적인 언어라 할 수 있을 것이다.

     

    소스가 많다는 것은 더 많은 지저분함과 그로 인해서 발생하는 유지보수의 문제 그리고 소스를 이해하기 더 힘들게 만드는 장애물이 될 수 있으니 앞으로 코틀린은 자바의 영역을 조금씩 갉아먹지 않을까 싶다. 최소한 코틀린에 매우 익숙해진 유저라면 자바로 돌아갈 가능성은 매우 낮아질 것 같으니 말이다.

     

    반응형

    댓글

    Designed by JB FACTORY