본문 바로가기

핵꿀팁

Kotlin의 split은 Java의 split이 아니다.

실수는 저의몫 여러분은 꽃길만 걸으세요ㅠㅠ

예제부터 한번 볼까요?

아래와 같은  URL이 있습니다.

http://www.example.com/dog/profile?name=Shapperd

여기서 "?" 앞부분만 가져오려고 split을 자바에서 구현하면?

String url = "http://example.com/dog/profile?name=jindo";

String[] urlParts = uri.split("\\?")

urlParts에는 ["www.example.com/dog/profile", "name="jindo"] 가 들어있습니다.

인텔리제이에는 자바코드를 붙여넣기 하면, 코틀린으로 자동으로 바꿔주는 로직이 있지요. 위코드를 붙여넣기 하면 아래와 같이 들어갑니다.

val parts = uri.split("\\?").toTypedArray()

parts에는 urlParts와 같이 들어갔을까요?

정답은?

.

.

.

삐빅! ?를 인식하지 못합니다.

parts에는 ["www.example.com/dog/profile?name=jindo"] 이렇게 들어갈 뿐이예요.

그럼 어떻게 하면 될까요?

val parts = uri.split("?").toTypedArray()

읭?

물음표만 들어갑니다.

왜 그럴까요?

자바와 코틀린에서 String에서 split의 메서드 시그네이처가 다르기 때문입니다. 자바의 첫번째 인자는 정규표현식이라 이스케이프 문자 "\"가 필요하지만, 코틀린은 그냥 delimeter로 인식하기 때문인데요. 오히려 자바에서의 어색함을 해결했다고 볼 수 있습니다. 정규 표현식은  필요할때 쓰는게 자연스럽죠.

코틀린이 좀더 직관적으로 느껴지네요.

split 메서드 오늘 하나 제대로 아셨죠? ^^