hyeals study
[코틀린] 함수를 호출하기 쉽게 만들기 본문
앞서 컬렉션을 만드는 방법에 대해 살펴봤으니 간단하게 모든 원소를 출력하는 코드를 구현할 수 있음
- 위 코드의 println(list) 부분에서 toString함수가 호출됨 (이는 디폴트로 자바 컬렉션에 들어있음)
출력 결과는 아래와 같음.
하지만 위 디폴트 형식이 원하는 형식이 아닐 경우가 있음.
☞ 코틀린에서는 이런 문제를 처리할 수 있는 함수가 표준 라이브러리에 이미 들어있음.
목표: 출력되는 형식을 [ , , ]가 아니라 ( ; ; )이런식으로 되게끔 하는 함수를 만들 것.
- 코틀린이 지원하는 기능을 사용하지 않고 함수 구현
- 코틀린이 지원하는 기능을 사용해서 함수 구현
[코틀린이 지원하는 기능을 사용하지 않은 함수]
- joinToString 함수: 컬렉션의 원소를 StringBuilder의 뒤에 덧붙임. 이때 원소 사이에 세미콜론(;)을 추가하고, StringBuilder의 양 끝에 괄호를 추가함.
- 위 함수는 제네릭(generic)함. 어떠한 타입의 원소로 이루어진 컬렉션이라도 모두 처리 가능. (제네릭 함수는 자바와 비슷)
- 위 함수에서 인자를 전달할 때 joinToString(list, separator="; ", prefix="(", postfix=")")이런식으로 인자의 이름을 명시할 수 있음.
* StringBuilder: StringBuilder클래스는 String클래스와 유사함. 둘의 차이는 String클래스는 불변이고, StringBuilder클래스는 가변적임.
☞ String클래스는 값을 추가하면 계속해서 새로운 클래스를 만들어내지만 StringBuilder클래스는 값을 추가할 때 새로운 클래스를 만들어내지 않고 그냥 값만 추가함.
위의 코드는 함수를 호출하는 부분이 복잡함.
그래서 이를 개선시킬 수 있는 방법을 알아볼 것.
[디폴트 파라미터]
: 코틀린에서는 함수 선언에서 파라미터의 디폴트 값을 지정할 수 있어서 자바에서 오버로딩의 모호성을 피할 수 있음.
→ 예를 들어 함수의 인자 중 일부가 생략된 오버로드 함수를 호출할 때 어떤 함수를 호출할 지가 모호함.
아래는 디폴트 값을 사용해서 joinToString함수를 개선한 코드임.
위와 같이 파라미터에 디폴트 값을 지정하면
위의 코드와 같이 여러 방법으로 함수를 호출할 수 있음. 모든 인자를 쓸 수 있으며, 일부의 인자를 생략할 수도 있음.
다음 게시물에서 joinToString함수를 좀 더 개선할 수 있는 방법을 알아볼 것.
본 게시물은 "Kotlin IN ACTION"을 참고함.
'코틀린' 카테고리의 다른 글
[코틀린] 컬렉션 처리 (0) | 2020.02.06 |
---|---|
[코틀린] 확장함수 & 확장 프로퍼티 (0) | 2020.02.05 |
[코틀린] 컬렉션(Collection) 만들기 (0) | 2020.02.05 |
코틀린 기초(11) - 예외 처리 (0) | 2020.02.04 |
코틀린 기초(10) - 이터레이션: while & for (0) | 2020.02.04 |