코틀린은 Java와 100% 호환하는 것을 목표로 하고 있다.
기존 Java 코드 위에 자연스럽게 코틀린 코드를 추가할 수는 없을까?
Java로 만들어진 라이브러리를 유지보수, 확장할 때 Kotlin 코드를 덧붙이고 싶을 때 사용한다.
아래는 마치 String 클래스 안에 있는 것 같은 확장함수 코드이다.
원래 String에 있는 멤버함수 처럼 사용할 수 있다.
이런 의문이 생길 수 있다.
확장함수가 public이고, 확장함수에서 수신객체클래스의 private 함수를 가져오면 캡슐화가 깨지는거 아닌가?
해답은
확장함수는 클래스에 있는 private 또는 protected 멤버를 가져올 수 없다!
또한 멤버함수와 확장함수의 시그니처가 같다면?
멤버함수가 우선적으로 호출된다
(확장함수를 만들었지만, 다른 기능의 똑같은 멤버함수가 생기면? 오류가 발생할 수 있다)
확장함수가 오버라이드 된다면?
해당 변수의 현재 타입
즉, 정적인 타입에 의해 어떤 확장함수가 호출될지 결정된다
Java에서 Kotlin 확장함수를 가져다 사용할 수 있나?
(정적 메소드를 부르는 것처럼 사용 가능하다)
중위함수, 함수를 호출하는 새로운 방법
위의 확장함수는 아래처럼 사용 가능
infix 키워드가 들어가면 아래처럼 사용가능
함수가 호출되는 대신, 함수를 호출한 지점에 함수 본문을 그대로 복붙하고 싶은 경우.
사용하는이유
함수 안에 함수를 선언할 수 있다.
위의 중복되는 if 문을 아래처럼 수정할 수 있다.
다음은 코틀린에서 람다를 다루는 방법을 공부해보겠습니다.