이 함수를 클래스 내부에서도 호출할 수 있다. 이때는 applyTax1(this, a)처럼 this를 인자로 넘기면 된다. 반면 FunFunctions 객체에 대한 참조가 있다면 이를 사용해 applyTax1FunFuntions 클래스 밖에서 호출할 수 있다. 이렇게 만들고 나면 applyTax1(this, a)에 대한 순수 함수다.

    private var percent2 = 9
    fun applyTax2(a: Int): Int = a / 100 * (100 + percent2)

    applyTax2 함수의 결과는 percent2의 값에 따라 달라진다. percent2는 가변(var로 선언됨) 필드다. 이 필드의 값이 바뀌면 applyTax2의 결과도 달라진다. 하지만 어떤 코드도 이 변수를 변이시키지 않기 때문에 applyTax2는 순수 함수다. 하지만 applyTax2 코드를 변경하지 않더라도 percent2의 값을 변경하는 다른 함수를 추가하면 함수의 결과가 달라질 수 있어 applyTax2는 안전하지 않다. 그래서 실제 변이가 필요하지 않다면 항상 모든 것을 불변으로 유지해야 한다. 기본적으로 항상 val 키워드를 사용하라.

    val percent3 = 13
    fun applyTax3(a: Int): Int = a / 100 * (100 + percent3)

    applyTax3applyTax1과 달리 불변 필드인 percent3를 사용하므로 순수 함수다.

    fun append1(i: Int, list: MutableList<Int>): List<Int> {
        list.add(i)
        return list
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.