코틀린스러운 코드

JooHeon·2024년 12월 15일
0

코틀린은 jvm 위에서 동작하며, 빌드했을 때 생성하는 것은 자바 클래스 파일입니다. 코틀린은 자바와 100% 호완성이 있기 때문에 자바의 강점을 유지하면서 코틀린만의 간결함으로 코드를 작성하면 좋습니다.

코틀린은 함수형과 객체지향을 모두 포함하는 다중 패러다임 언어입니다. 자바에서 일급 객체는 객체이며 코틀린에서 일급 객체는 함수입니다. 자바에서 제공하는 람다 표현식과 메소드 참조(::) 등의 함수적 프로그래밍은 익명 클래스의 인스턴스로 반환되기 때문에 함수는 여전히 객체로 취급되며 객체지향을 유지하고 있습니다. 반면 코틀린에서는 일급 객체는 함수입니다 이러한 차이는 언어 문법의 표현력 차이로 드러난다고 생각합니다.

kotlin

fun main() {
    // 1. 변수에 함수 할당 가능
    val myFunction: (Int) -> Int = { x -> x * 2 }

    // 2. 함수를 다른 함수의 매개변수로 전달
    val numbers = listOf(1, 2, 3, 4, 5)
    val doubledNumbers = numbers.map(myFunction)

    // 3. 함수를 반환값으로 사용
    val multiplier = createMultiplier(3)
    println(multiplier(4))  // 출력: 12
}

// 함수를 반환하는 함수
fun createMultiplier(factor: Int): (Int) -> Int {
    return { x -> x * factor }
}
java

public class FunctionalExample {
    public static void main(String[] args) {
        // 1. 함수형 인터페이스 사용 (Java 8+)
        // 코틀린의 람다와 유사한 방식
        Function<Integer, Integer> myFunction = x -> x * 2;

        // 2. 함수를 매개변수로 전달 (Stream API 사용)
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> doubledNumbers = numbers.stream()
            .map(myFunction)
            .collect(Collectors.toList());

        // 3. 함수를 반환하는 메서드
        Function<Integer, Integer> multiplier = createMultiplier(3);
        System.out.println(multiplier.apply(4));  // 출력: 12
    }

    // 함수를 반환하는 메서드
    static Function<Integer, Integer> createMultiplier(int factor) {
        return x -> x * factor;
    }
}

코틀린은 함수형 프로그래밍 원칙을 언어 차원에서 적극적으로 지원하기 위해 불변성을 강조합니다.

1. 변수를 선언할 때 읽기 전용 프로퍼티로 val이 있습니다
2. 컬렉션의 내부 값을 변경할 수 있는 Mutable 컬렉션이 따로 존재합니다

이 외에 함수형 프로그래밍과 관련해선 https://tech.kakaopay.com/post/way-to-functional-programming/ 링크를 참조하면 좋습니다

0개의 댓글