코틀린 기본 사항 더보기
제네릭
클래스를 구성하는 속성 중 일부 속성만 다른 클래스를 만들 때 중복을 줄이기 위해 사용함
데이터 타입을 일반화 하는 것
클래스를 만들 때 데이터 유형을 지정하는 것이 아니라 객체를 생성할 때 데이터 유형을 지정할 수 있도록 함



자리표시자
데이터 타입을 넣기 전 임의로 넣는 데이터 타입

확장 속성/확장 함수
개발에 필요한 모든 함수가 프로그램 안에 내장되어 있지 않기 때문에 기존의 데이터 유형이나 함수를 전 문법으로 확장하여 필요한 속성과 메소드를 만드는 것
확장 속성


확장 함수


범위 함수.let()
변수 이름에 반복적으로 접근하지 않고도 클래스의 속성과 메소드에 간결하게 접근할 수 있는 방법

식별자 it
변수의 실제명 대신에 let 함수의 범위 내에서 사용하는 람다 표현식의 객체 참조 방법
let 함수에서 사용되는 식별자 it는 모두 같은 변수를 가리키게 된다.
범위함수.apply()
변수 선언 없이도 객체의 메서드를 호출할 수 있도록 도와주는 역할을 함

컬렉션

List, Set, Map 3가지로 구성됨
리스트
배열과 비슷하지만 순서가 지정되고 크기 조절이 가능한 컬렉션이다.
값을 추가하면 리스트의 빈 곳에 값이 들어가고 값이 꽉 찼을 경우에 새 element가 주어지면 더 큰 리스트에 현재 값이 복사됨



배열은 초기화하면 값을 추가하거나 삭제할 수 없이 크기가 고정되지만 리스트는 크기가 고정되지 않아 값을 삭제할 수 있음 -> 리스트에서 이런 수정은 MutableList일 때만 가능함
MutableList
수정할 수 있는 리스트

세트
배열이나 리스트와는 다르게 특정한 순서가 없으며 중복을 허용하지 않는 컬렉션
특정 순서 없이 해시코드로 세트에 들어있는 값을 찾음

해시코드
해시 알고리즘을 사용하여 도출된 객체를 식별하는 하나의 정수 값
고정된 알고리즘을 쓰기 때문에 같은 값을 넣으면 같은 해시 코드가 도출됨
세트는 해시코드를 인덱스로 사용함
세트의 인덱스는 연속된 수가 아니기 때문에 리스트의 배열이라고 볼 수 있음


맵
한 칸에 하나의 값만 가지는 리스트나 세트와 다르게 key와 value으로 구성된 컬렉션
고유한 key가 value에 매핑되기 때문에 맵이라고 부름
key는 유일하지만 value은 동일한 값일 수 있음
value를 검색할 때는 인덱스 대신 key 값으로 검색할 수 있음


스크롤 가능한 리스트 빌드
Card


LazyColumn
스크롤 가능한 리스트를 만들기 위해 Jetpack에서는 LazyColumn Composable을 제공
리스트의 길이를 알 수 없어도 사용 가능
기본적으로 스크롤 기능을 제공


*Card의 Vertical/Horizontal 배열은 LazyVerticalGrid나 LazyHorizontalGrid가 존재
Material 디자인을 이용한 멋진 앱 빌드
더 펼치기 아이콘

onClick은 버튼을 클릭했는지 판단하는 속성
활동적 이벤트이기 때문에 () -> Unit과 같이 function 타입으로 선언해 줌

가중치(weight)란 비율을 나타내는 속성으로 같은 계층에 존재하고 가중치가 적용된 모든 요소들을 기준으로 높이 및 넓이를 요소에 부여한 가중치에 비례하여 설정함
