01. 형변환
- 하나의 변수에 지정된 자료형을 호환되는 다른 자료형으로 변경 가능. (논리형은 변환 안됨)
- 명시적 형변환 : 변환될 자료형을 개발자가 직접 지정함
- 암시적 형변환 : 변수를 할당할 시 자료형을 지정하지 않아도 자동으로 형변환됨 (코틀린에서는 지원x)
* toByte, toInt, toLong, toDouble ... 등
02. 배열
- 배열을 통해 변수에 순서를 매겨 연속적으로 활용할 수 있다.
* 배열을 사용하기 위해 arrayOf 메소드(키워드)를 제공.
- 변수들을 각각 선언하면 반복적으로 변수에 접근하는 행위를 할 수 없다.
03. 컬렉션
- 코틀린에서는 리스트, 맵, 집합 자료구조를 지원한다.
1. List - 리스트는 읽기 전용과 수정 가능한 종류로 구분 가능.
// 읽기전용 리스트
// 0번, 1번, 2번 인덱스에 접근해서 값을 변경할 수 없습니다
var scores1 = listOf(값1, 값2, 값3)
// 수정가능 리스트
// 0번, 1번, 2번 인덱스에 접근해서 값을 변경할 수 있습니다
var scores2 = mutableListOf(값1, 값2, 값3)
scores2.set(인덱스, 값)
// 수정가능 리스트입니다
// 0번, 1번, 2번 인덱스에 접근해서 값을 변경할 수 있습니다
// array로 데이터들을 저장하는 ArrayList도 mutableListOf와 동일하게 사용할 수 있어요
// 저장할 데이터의 자료형을 < > 안에 지정해야 사용할 수 있어요
var scores3 = ArrayList<자료형>(값1, 값2, 값3)
scores3.set(인덱스, 값)
2. Map - Map은 키와 값의 쌍으로 이루어짐.
// 읽기전용 맵입니다
// 변수명[키]로 데이터에 접근할 수 있습니다
var scoreInfo1 = mapOf("kor" to 94, "math" to 90, "eng" to 92)
println(scoreInfo1["kor"])
// 수정가능 맵입니다
// 변수명[키]로 데이터에 접근할 수 있습니다
var scoreInfo2 = mutableMapOf("kor" to 94, "math" to 90)
scoreInfo2["eng"] = 92
println(scoreInfo2["eng"])
// 맵의 키와 값을 동시에 추출해서 사용할 수 있습니다
for((k,v) in scoreInfo2) {
println("${k}의 값은 ${v}입니다")
}
3. Set - Set은 순서가 존재하지 않고 중복없이 데이터를 관리하는 집합 자료형.
* 다른 컬렉션들은 요소를 찾는데에 집중하지만, Set은 요소가 존재하는 지에 집중.
// 읽기전용 Set입니다.
var birdSet = setOf("닭", "참새", "비둘기")
// 수정가능 Set입니다.
// var mutableBirdSet = mutableSetOf("닭", "참새", "비둘기")
// mutableBirdSet.add("꿩")
// mutableBirdSet.remove("꿩")
println("집합의 크기는 ${birdSet.size} 입니다")
var findBird = readLine()!!
if(birdSet.contains(findBird)) {
println("${findBird} 종류는 존재합니다.")
} else {
println("${findBird}는 존재하지 않습니다.")
}
// 귀여운 새의 집합
var birdSet = setOf("닭", "참새", "비둘기", "물오리")
// 날수있는 새의 집합
var flyBirdSet = setOf("참새", "비둘기", "까치")
// 모든 새의 집합 (합집합)
var unionBirdSet = birdSet.union(flyBirdSet)
// 귀엽고 날수있는 새의 집합 (교집합)
var intersectBirdSet = birdSet.intersect(flyBirdSet)
// 귀여운 새들중에서 날수없는 새의 조합 (차집합)
var subtractBirdSet = birdSet.subtract(flyBirdSet)
println("=====합집합=====")
println("모든 새의 집합 : ${unionBirdSet}")
println("=====교집합=====")
println("귀엽고 날수있는 새의 집합 : ${intersectBirdSet}")
println("=====차집합=====")
println("귀엽고 날수없는 새의 집합 : ${subtractBirdSet}")
04. Single-expression function
- 하나의 메소드를 간결하게 표현할 수 있는 방법
* 구조
{매개변수1, 매개변수2... ->
코드
}
* 메소드를 선언하지 않고 로직을 저장 가능하다.
var add = {num1: Int, num2: Int, num3: Int -> (num1+num2+num3) / 3}
println("평균값은 ${add(10,20,30)}입니다")
싱글턴
- 보통 객체는 자원이 가능한 만큼 생성할 수 있다.
- 각각의 객체는 상이한 위치정보를 가지고 있어서 저장하는 값도 객체마다 고유하다.
- 싱글턴을 활용하면 해당 객체는 메모리 전역에서 유일함을 보장하고 위치 정보가 고정이다.
* 코틀린은 companion, object 키워드로 싱글턴을 구현할 수 있다.
Why
- 싱글턴 객체는 전역적으로 활용할 수 있어서 다른 클래스들에서 쉽게 접근 가능하다.
- 전역에서 공통적으로 사용하는 정보라면 메모리를 더욱 효율적으로 활용할 수 있다.
- 객체 자원간의 충돌을 방지 가능.