https://product.kyobobook.co.kr/detail/S000201206714
아토믹 코틀린 | 브루스 에켈 - 교보문고
아토믹 코틀린 | 코틀린을 익히고 레벨업하는 가장 확실한 방법! 한 번에 하나씩 + 명확한 예제를 실행하면서 + 훌륭한 멘토의 설명으로 배워라!코틀린의 기본 개념을 명확히 이해하고, 더 나은
product.kyobobook.co.kr
2부 객체 소개 - 2
25. 가변 인자 목록(variable argument list)
- vararg : 길이가 변할 수 있는 인자 목록 생성
- 함수 정의에서 vararg 로 선언된 인자는 최대 1개만 존재
- 일반적으로 마지막에 선언하는게 간편
- 임의의 개수만큼 인자 전달 가능
- 파라미터는 Array 로 취급
- 일상적인 프로그래밍에서 간단한 시퀀스가 필요할 경우 → List 사용
- 서드파티 API 가 Array 를 요구하거나 vararg 를 다뤄야 하는 경우 → Array 사용
- Array 를 인자 목록으로 변환하고 싶은 경우, 스프레드 연산자(*) 사용
- ex) 명령줄 인자
package varargs
fun v(s: String, vararg d: Double) {}
fun sum(vararg numbers: Int): Int {
var total = 0
for (n in numbers) {
total += n
}
return total
}
fun main(args: Array<String>) {
v("abc", 1.0, 2.0, 3.0)
val array = intArrayOf(4, 5)
sum(1, 2, 3, *array, 6) eq 21
}
26. 집합
- Set : 각각의 값이 오직 하나만 존재할 수 있는 컬렉션
- 차집합은 뺄셈 연산자(-) 로 표현 가능
- List 와 마찬가지로 += 과 -= 연산자는 Set 에서 원소 추가 삭제 가능
import atomictest.eq
fun main() {
val intSet = setOf(1, 1, 2, 3, 9, 9, 4)
// 중복이 없다
intSet eq setOf(1, 2, 3, 4, 9)
// 원소 순서는 중요하지 않다
setOf(1, 2) eq setOf(2, 1)
// 원소인지 검사
(9 in intSet) eq true
// 이 집합이 다른 집합을 포함하는가?
intSet.containsAll(setOf(1, 9, 2)) eq true
// 합집합
intSet.union(setOf(3, 4, 5, 6)) eq setOf(1, 2, 3, 4, 5, 6, 9)
// 교집합
intSet intersect setOf(0, 1, 2, 7, 8) eq setOf(1, 2)
// 차집합
intSet substract setOf(0, 1, 9, 10) eq setOf(2, 3, 4)
intSet - setOf(0, 1, 9, 10) eq setOf(2, 3, 4)
val mutableSet = mutableSetOf<int>()
mutableSet += 42
mutableSet -= 42
}
27. 맵
- Map : 키와 값을 연결, 키로 연결된 값 찾기
- 키와 값을 분리하려면 to 사용
import atomictest.eq
fun main() {
val constants = mapOf(
"Pi" to 3.141,
"e" to 2.718,
"phi" to 1.618
)
constants eq
"{Pi=3.141, e=2.718, phi=1.618}"
// 키에 해당하는 값을 찾는다
constants["e"] eq 2.718 // [1]
constants.keys eq setOf("Pi", "e", "phi")
constants.values eq "[3.141, 2.718, 1.618]"
var s = ""
// 키-값 쌍을 이터레이션한다
for (entry in constants) { // [2]
s += "${entry.key}=${entry.value}, "
}
s eq "Pi=3.141, e=2.718, phi=1.618,"
s = ""
// 이터레이션을 하면서 키와 값을 분리한다
for ((key, value) in constants) // [3]
s += "$key=$value, "
s eq "Pi=3.141, e=2.718, phi=1.618,"
// 가변적인 Map 타입 : mutableMapOf 로 가능
val m =
mutableMapOf(5 to "five", 6 to "six")
m[5] eq "five"
m[5] = "5ive"
m[5] eq "5ive"
m += 4 to "four"
m eq mapOf(5 to "5ive",
4 to "four", 6 to "six")
}
28. 프로퍼티 접근자
- 프로퍼티 : 프로퍼티 명으로 프로퍼티를 읽는다. 대입 연산자 = 을 사용해서 가변 프로퍼티에 값을 대입한다.
- 코틀린 스타일 가이드에서는 계산 비용이 많이 들지 않고 객체 상태가 바뀌지 않는 한 같은 결과를 내놓은 함수의 경우, 프로퍼티를 사용하는 편이 낫다고 안내한다. https://developer.android.com/kotlin/style-guide?hl=ko#specific_constructs
- 접근자 사용 가능(private, public, internal, protected)
package propertyaccessors
import atomictest.eq
class Data(var i: Int)
fun main() {
val data = Data(10)
data.i eq 10 // 'i' 프로퍼티를 읽음
data.i = 20 // 'i' 프로퍼티에 값을 씀
}
'Study' 카테고리의 다른 글
[Book] 아토믹 코틀린 - 5부 객체 지향 프로그래밍 - 2 (0) | 2024.09.05 |
---|---|
[Book] 아토믹 코틀린 - 4부 함수형 프로그래밍 (0) | 2024.09.05 |
[Book] 테스트 주도 개발 시작하기 - Chapter11. 마치며 (0) | 2024.09.05 |
[Book] 테스트 주도 개발 시작하기 - Chapter10. 테스트 코드와 유지보수 (0) | 2024.09.05 |
[Book] 테스트 주도 개발 시작하기 - Chapter07. 대역 (0) | 2024.09.05 |