관리 메뉴

hyeals study

[코틀린] 함수를 호출하기 쉽게 만들기 본문

코틀린

[코틀린] 함수를 호출하기 쉽게 만들기

hyeals 2020. 2. 5. 11:36

앞서 컬렉션을 만드는 방법에 대해 살펴봤으니 간단하게 모든 원소를 출력하는 코드를 구현할 수 있음

 

리스트의 모든 원소 호출 예시

  • 위 코드의 println(list) 부분에서 toString함수가 호출됨 (이는 디폴트로 자바 컬렉션에 들어있음)

출력 결과는 아래와 같음.

출력 결과

하지만 위 디폴트 형식이 원하는 형식이 아닐 경우가 있음. 

코틀린에서는 이런 문제를 처리할 수 있는 함수가 표준 라이브러리에 이미 들어있음.


목표: 출력되는 형식을 [ , , ]가 아니라 ( ; ; )이런식으로 되게끔 하는 함수를 만들 것.

  1. 코틀린이 지원하는 기능을 사용하지 않고 함수 구현
  2. 코틀린이 지원하는 기능을 사용해서 함수 구현

[코틀린이 지원하는 기능을 사용하지 않은 함수]

 

joinToString 함수 구현 예시

  • joinToString 함수: 컬렉션의 원소를 StringBuilder의 뒤에 덧붙임. 이때 원소 사이에 세미콜론(;)을 추가하고, StringBuilder의 양 끝에 괄호를 추가함. 
  • 위 함수는 제네릭(generic)함. 어떠한 타입의 원소로 이루어진 컬렉션이라도 모두 처리 가능. (제네릭 함수는 자바와 비슷)
  • 위 함수에서 인자를 전달할 때 joinToString(list, separator="; ", prefix="(", postfix=")")이런식으로 인자의 이름을 명시할 수 있음.

* StringBuilder: StringBuilder클래스는 String클래스와 유사함. 둘의 차이는 String클래스불변이고, StringBuilder클래스가변적임.

☞ String클래스는 값을 추가하면 계속해서 새로운 클래스를 만들어내지만 StringBuilder클래스는 값을 추가할 때 새로운 클래스를 만들어내지 않고 그냥 값만 추가함.

 

출력 결과

위의 코드는 함수를 호출하는 부분이 복잡함. 

 

그래서 이를 개선시킬 수 있는 방법을 알아볼 것.


[디폴트 파라미터]

 

: 코틀린에서는 함수 선언에서 파라미터의 디폴트 값을 지정할 수 있어서 자바에서 오버로딩의 모호성을 피할 수 있음.

→ 예를 들어 함수의 인자 중 일부가 생략된 오버로드 함수를 호출할 때 어떤 함수를 호출할 지가 모호함.

 

아래는 디폴트 값을 사용해서 joinToString함수를 개선한 코드임.

 

파라미터에 디폴트 값 지정 예시

위와 같이 파라미터에 디폴트 값을 지정하면

 

여러 함수 호출 방법 예시

위의 코드와 같이 여러 방법으로 함수를 호출할 수 있음. 모든 인자를 쓸 수 있으며, 일부의 인자를 생략할 수도 있음.

 

다음 게시물에서 joinToString함수를 좀 더 개선할 수 있는 방법을 알아볼 것.

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments