if (study)/Java & Kotlin

Variable number of arguments 자바와 마찬가지로 코틀린은 가변 인자를 지원한다. 가변 인자를 사용하면 함수를 호출할 때 인자 개수를 유동적으로 지정할 수 있다. 사용하려면 인자 앞에 vararg를 붙이면 된다. fun sum(vararg num: Int) = num.sum() fun main(args: Array) { val n1 = sum(1) val n2 = sum(1, 2, 3, 4, 5) println(n1) // 1 println(n2) // 15 } 배열을 가변인자로 넘기기 이미 존재하는 배열을 vararg 함수의 인자로 넘겨야할 때가 있다. 이 경우 배열 이름 앞에 *를 붙여주면 된다. 이 *은 spread operator라고 부른다. 기호가 별모양이라 C/C++의 포인..

코틀린을 다루는 기술 6장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 참조 타입의 데이터가 없음을 표현하는 가장 일반적인 방법으로 아무것도 가리키지 않는 포인터를 사용한다. 이런 포인터를 널 포인터(Null pointer)라고 부른다. Null reference는 아무것도 가리키지 않는 참조로, 나중에 이 참조가 어떤 데이터를 가리키도록 대입할 수 있다. 이번 장에서는 오류가 발생하지 않았는데 데이터가 존재하지 않는 경우인 선택적 데이터를 처리하는 방법을 배운다. 6.1 Null pointer의 문제점 Java를 사용하는 개발자들을 환장하게 만드는 마법의 단어가 하나 있다. NullPointerException이다. 이 예외는 데이터가 필요한 부..


코틀린을 다루는 기술 5장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 데이터 구조는 특정한 타입의 객체가 여럿 모인 것을 가리키며, 이런 모임 전체를 컬렉션(collection)이라고 부른다. List를 비롯하여 코틀린에서 제공하는 immutable list는 사실 immutable하지 않다. 물론 List 인터페이스는 읽기 전용 자료구조로 데이터를 변경할수 있는 메서드를 제공하지 않지만, List를 MutableList로 캐스팅하는 방법을 사용하면 데이터는 프로그램 실행 도중에 변경될 가능성이 있다. fun main(args: Array) { val list: List = listOf("This", "Is", "Totally", "Immutab..

코틀린을 다루는 기술 4장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 4장까지 읽고 나서야 이 책의 정수는 연습문제 라는 것을 알게 되었다. 하나씩 직접 풀어보면서 코틀린 코드 작성의 다양한 기법을 훈련하는게 좋겠지만, 정리글에서는 연습문제까지 다루지는 않을 생각이다. 개요 재귀, 공재귀, 꼬리 재귀 함수의 구현 방법을 알아본다. TCE를 사용해 꼬리 재귀 호출을 최적화한다. 람다를 재귀적으로 만든다. memorization을 적용해 계산 속도를 높인다. 4.1 공재귀와 재귀 둘다 자기 자신을 호출하는 함수지만, 계산이 처음 시작되는 시점에서 차이가 있다. 재귀(recursive) : 마지막 단계부터 계산을 시작한다. 공재귀(corecursive..


코틀린을 다루는 기술 3장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 개요 함수의 출력이 결정적이고, 외부 상태에 의존하지 않는다면 더 쉽게 테스트하고 함수의 성질을 잘 추론할 수 있다. 외부 세계와 상호작용 하는 것을 '부수 효과'라고 하는데, 순수 함수는 이러한 부수 효과 없이 오로지 인자에 의해서만 반환 값이 결정되는 함수를 의미한다. 즉 순수 함수는 좀더 고급스런 용어로는 참조 투명성을 지키는 함수다. 부수효과, 참조 투명성 등 읽는 입장에서 왠지 거부감이 드는 한문 단어들은 사실 번역된 문장 대신 원문인 영어로 보면 더 이해하기 쉽다. 부수효과 = side effect (부작용) 참조 투명성 = Referential Tra..