일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- L293D
- 자료구조
- 아두이노 모터 드라이버
- 카이캐드
- 업캐스팅
- KiCad
- 개발 보드
- 코틀린
- GCD
- Arduoin
- string함수
- 카이캐드 다운로드
- 안드로이드스튜디오
- 약수 구하기
- 우송대 라즈베리파이 피코
- 아두이노
- 추상화함수
- 7세그먼트
- 우송대
- ATmega328p
- ESP32_S2_WROVER
- 유클리드 호제법
- 라즈베리파이 피코
- 우송대학교
- 재정의함수
- PICO4
- ESP32_S2
- kotlin
- androidstudio
- 카이캐드 설치
- Today
- Total
개발자의 생활
제네릭 본문
제네릭은 코드를 작성하면서 다양한 데이터타입의 안정성을 높여주기 위해 만들어진 개념 입니다.
간단하게 어떤 데이터 타입이 들어오더라고 해당 타입으로 지정이 되는 익명 타입 이라고 보면 될거 같습니다.
사실 저의는 배열을 사용하면서 이미 제네릭을 사용하였습니다.
Array<Int>
Array<Float>
Array<String>
Array<Boolean>
이렇게 Array<> 꺾쇠 내부에 생성하고자 하는 배열의 데이터 타입을 넣어서 해당 타입의 배열을 만들어 사용하였습니다.
이번에는 직접 제네릭을 사용하는 방법을 알아보고 제네릭 클래스를 만들어 보겠습니다.
class GenericClass<T> (val dataA: T)
제네릭 클래스는 클래스 명 뒤에 <>를 열고 안에 타입 명을 넣어주시면 됩니다. 이 부분에는 데이터 타입명이 들어가는 자리이지만 코드를 작성하는 시점에서는 타입이 정해져 있지 안습니다. 정확히 말하면 컴파일 과정에서 사용될 타입에 맞게 변환이 되는것 입니다. 그러면 정수타입은 Int, 실수는 Flost, 문자열은 String 로 타입명이 지정되어 있지만 타입명이 정해져 있지 안은 제네릭은 어떻게 작성을 해야 할까요
정답은 여러분 마음대로 입니다. 실제로 코틀린에서 사용하는 키워드를 제외하고 무엇을 작성하는 상관은 없습니다.
하지만 관례적으로 Type 의 약자인 T 로 작성을 합니다. 만약 여러개의 타입 파라미터가 필요할 경우 T이후에 나오는 알파벳 U, V 를 사용하기도 하고 T1, T2 로 작성하기도 합니다.
fun main() {
val integerType = GenericClass(0)
println(integerType.typeCheck())
val stringType = GenericClass("text")
println(stringType.typeCheck())
val floatType = GenericClass(3.14)
println(floatType.typeCheck())
}
class GenericClass<T> (val dataA: T){
fun typeCheck(): String{
print("$dataA: ")
val str = when(dataA){
is Int -> "정수 타입"
is String -> "문자열 타입"
else -> "그외"
}
return str
}
}
위 클래스는 제네릭 클래스를 이용해서 타입을 확인하는 코드입니다.
제네릭은 함수와도 사용이 가능합니다.
fun main() {
genericClass(1)
genericClass("문자")
genericClass(9.8f)
genericClass(3.14)
}
fun <T>genericClass(dataA: T){
val str = when(dataA){
is Int -> "정수"
is Float -> "실수"
is String -> "문지열"
else -> "그외"
}
println(str)
}
제네릭 사용법은 다양하기 때문에 저도 추가적으로 공부하면서 업데이트 하겠습니다.
감사합니다.
'kotlin(코틀린) 강좌' 카테고리의 다른 글
유용한 String 함수 (0) | 2024.10.30 |
---|---|
고차함수, 람다함수 (0) | 2024.10.24 |
업, 다운 캐스팅 (다형성) (0) | 2024.10.22 |
스코프, 접근제한자 + 프로젝트 구조 (0) | 2024.10.04 |
class 사용 (4) | 2024.09.16 |