서론 실체화한 타입 파라미터를 사용하면, 런타임 시점에 이를 활용할 수 있다. - 일반 클래스 혹은 함수는 런타임 시점에 타입 정보가 사라진다. 선언 지점 변성을 사용하는경우 기저 타입은 동일하지만, 타입 인자가 다른 두 제네릭 타입의 상위/하위 타입 관계에 따라 상위/하위 타입 관계가 어떻게 되는지 지정이 가능해진다. 기저 타입이란 ? List 와 List 이 기반 - 파생 타입 관계로 보기 어렵기 때문에, 제네릭에서는 타입 파라미터를 제외한 부분을 기저 타입이라는 용어로 사용한다. List 에서 기저 타입은 List 이다. 제네릭 타입 파라미터 제네릭을 사용하면 타입 파라미터 (type parameter) 를 받는 타입을 정의할 수 있다. 제네릭 타입의 인스턴스를 생성하려면 , 타입 파라미터를 구체적..
고차함수 란 ? 고참함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수이다. 코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다. 함수 타입 코틀린에서 함수 타입을 정의하려면, 함수 파라미터의 타입을 괄호 안에 넣고, 그 뒤에 화살표를 추가 한 뒤 함수 반환 타입을 지정하면 된다. - (Int, String) -> Unit 반환 타입이 널이거나, 함수 타입 전체가 널일 수 있는 변수를 선언할 때는 주의해야 한다. - (Int, Int) -> Int? : 반환 타입이 널 - ((Int, Int) -> Int?)? : 함수 타입 전체가 널 파라미터 이름과 함수 타입 함수 타입에서 파라미터 명을 지정할 수 있다. 강제적인 것은 아니며, 호출하는 쪽에서 원하는 파라미터 명으로 변경하여 사용..
서론 자바에서는 for..in 루프에 java.lang.Iterable 구현체를 사용하거나, try-with resource 구문에 java.lang.AutoCloseable 구현체를 사용할 수 있다. 이와 비슷하게 코틀린에서도 언어의 기능이 사용자가 작성한 함수와 연결되는 몇가지가 있으며 이를 살펴본다. 산술연산자 오버로딩 코틀린에서 관례를 사용하는 가장 단순한 예는 산술연산자 이다. BigInteger 클래스를 다룬다면 add 함수 호출보단 + 연산하는것이, 컬렉션에 원소를 추가하는 경우 += 이 가능하다면 더 직관적이다. 코틀린에서는 이러한 것들이 가능하다. 이항 산술연산 오버로딩 코틀린에서는 plus 라는 이름의 메소드를 정의하면, 해당 인스턴스에 대해 + 연산자를 사용할 수 있다. 이때 plus..
널 가능성 널 가능성 (Nullablility) 은 NPE를 피하기 위한 코틀린 타입 시스템의 특성이다. 코틀린을 비롯한 최신 언어에서는 null을 컴파일 타임에 미리 감지해 런타임 예외 가능성을 줄인다. 널이 될 수 있는 타입 코틀린 타입 시스템은 널이 될수 있는 타입을 명시적으로 지원한다. 널이 될 수 있는 변수에 대해 메소드 호출을 하지 못하게 함으로써 많은 오류를 방지한다. /** * null 이 올수 있는 타입을 넣을 경우 컴파일 에러를 발생시켜 NPE를 방지한다. */ fun strLen(s: String) = s.length fun strLenNullable(s: String?) = s.length fun main(args: Array) { // null 이 올 수 있는 타입을 넣을 경우 컴..