컬렉션 - 제네릭

황승현·2023년 12월 7일
0

코틀린 강의 정리

목록 보기
28/36

제네릭(generic)

  • 다양한 타입에 동일한 로직을 적용할 때가 많다.
    • 매번 Any 타입으로 받는 건 안정성이 저하될 수 있다.
  • 클래스 내부에서 사용할 자료형을 인스턴스를 생성할 때 고정시켜, 컴파일 시간에 자료형을 검색해 적당한 자료형을 선택할 수 있게 함
  • 객체 자료형의 안정성을 높이고, 형 변환의 번거로움을 감소

제네릭을 사용하지 않는 함수

  • 아무 타입이나 입력 받기 위해 Any로 작성
    • 코드 안정성이 떨어짐
fun test(arr: Array<Any>, data: Any): Int{
 for(i in arr.indices){
   if(arr[i] == data) return i
  }
  return -1
}

제네릭을 사용한 함수


// 리스트와 데이터를 파라미터로 받는 함수
// 리스트 안에 데이터가 있을 경우 인덱스 번호를 반환
// 리스트 안에 데이터가 없을 경우 -1을 반환
fun <T> test(arr: Array<T>, data: T): Int {

// indices는 Collection, Array 클래스에 선언되어 있는 프로퍼티로 컬렉션 타입의 인덱스 범위를 반환.
// 예를 들어 list 객체에 데이터가 3개 들어있다면, list.indices는 0..2를 반환
    for(i in arr.indices) {
        if(arr[i] == data) return i // 리스트 안에 data가 들어있다면 해당 인덱스를 반환
    }
    return -1 // 리스트 안에 data가 없다면 -1 반환
}

fun main() {

	// String 타입의 배열을 생성
    val obj1: Array<String> = arrayOf("c", "java", "kotlin") 

	// test 함수를 실행해서 결과를 반환
    val index = test<String>(obj1, "kotlin")
    println(index)
}

참고자료

https://kotlinlang.org/docs/generics.html

0개의 댓글