코틀린 간단 컬렉션 및 함수 호출

siwan·2021년 11월 3일
0

코틀린 컬렉션 간단하게 훑어보기

  • 코틀린에서는 자바와 같이 여러가지 컬렉션을 만들 수 있다.
val set = hashSetOf(1,7,53) //set 컬렉션
val list = arrayList(1,7,53) //arrayList 컬렉션
val map = hashMapOf(1 to "one",7 to "seven", 53 to "fifty-three") //map 컬렉션

코틀린의 collection 함수는 자바의 상호작용을 위해 자바의 컬렉션을 통해 제공된다. 코틀린 자체에서 컬렉션을 제공하지 않는다.

  • 코틀린은 자바보다 컬렉션에 제공되는 함수가 많다.
val strings = listOf("first","second","fourteeth")
println(strings.last())
>>fourteeth
val numbers = setOf(1,14,2)
println(numbers.max())
>>14

추후에 자바에 없는 메소드를 코틀린에서는 어떻게 동작하는지 알아보자.

함수를 호출하기 쉽게 만들기

  • 간단히 list를 출력하는 함수를 만들어보자
val list = listOf(1,2,3)
println(list)     //toString()
>> [1,2,3]

여기서 내가 원하는 출력값은 단순히 1,2,3이 나오길 원하는데 출력은 [1,2,3]이 나온다.
그럼 우리가 원하는 list의 형태가 나오게 구현하는 예시를 짜보자


-- 원하는 출력 형태 : (1,2,3)

fun <T> joinToString(
    collection:Collection<T>,
    separator:String,
    prefix:String,
    postfix :String
):String{
    val result = StringBuilder(prefix)
    for((index,element) in collection.withIndex()){
        if (index >0) result.append(separator)
        result.append(element)
    }
    result.append(postfix)
    return result.toString()
    
    val list = listOf(1,2,3)
    println(joinToString(list,",","(",")"))
    
    >>(1,2,3)
}

결과값이 잘 나온다. 하지만 가독성에 있어서 아쉬운 부분이 많다. 좀 더 깔끔하게 표현을 해보자.

  • 코틀린에서는 인자를 딴 이름을 명시 할 수 있다.
println(joinToString(collection = list ,
separator =","  ,
prefix = "(" ,
postfix = ")" )
)

다음과 같이 이름을 명시하면 좀 더 가독성이 좋아보인다.
하지만 이름을 명시하면 모든 인자 값에 이름을 명시 해야하는 문제점이 있다.
default parameter(디폴트 파라미터) 통해 좀 더 가독성이 좋게 보일 수 있다.
warning : 자바로 작성한 코드를 호출 할때는 이름 붙인 인자를 사용할 수가 없다

  • 디폴트 파라미터 값

자바의 일부 클래스에서 오버로딩한 메소드가 너무 많아진다는 문제가 있다.
오버로딩 메소드들은 하위 호환성을 유지하거나 API 사용자에게 편의를 더하는 등의 여러가지 이유로 만들어 진다.
어느 경우든 중복이 되는 경우가 많은데 코틀린에서는 함수 선언에 파라미터의 디폴트 값을 지정할 수 있어 이러한 문제점을 피해 갈 수 있다.


fun <T> joinToString(
    collection:Collection<T>,
    separator:String=",", //디폴트 값 ","이 지정되었다.
    prefix:String="", //디폴트 값 ""이 지정되었다.
    postfix :String="" //디폴트 값 ""이 지정되었다.
):String{
    // *** //
}

println(joinToString(list)) // separator,prefix,postfix 생략
>> 1,2,3
println(joinToString(list,postfix=";",prefix="#")) prefix,postfix 지정
>> #1,2,3;

위와 같이 디폴트 값을 정해놓으면 필요한 인자만 값을 넣으면 되는 장점이 있다.

profile
station3 다방 안드로이드 개발자

0개의 댓글