-
2022.05.03 기록장TIL 2022. 5. 3. 13:21
ToDo
- 코틀린 공부
- 리액트 튜토리얼
Done
- 코틀린 공부
Weekly goal
- 코틀린 공부
- 리액트 공부
- 피드백 정리
let 함수- 널이 될 수있는 값을 널이 아닌 값만 인자로 받는 함수에 넘길때 사용 - 원하는 식을 평가해서 결과가 널인지 검사한 다음 사용 - let을 통과하면 수신 객체는 널이 될 수 없는 타입의 값으로 바뀐다 - 여러번 검사를 할 경우가 있는데 그때는 if를 사용해 한번에 검사하는 것이 더 가독성이 좋다
nullable type에 대한 확장 함수- null이 될 수 있는 타입에 확장 함수는 ?.나 !!를 사용하지 않는다
let도 nuable에 쓸 수 있다
- nullable한 곳에 쓸 수 있지만 괄호안에서 그것의 type도 nuable하게 관리된다 - ?.일 경우는 if로 null 검사와 같다
타입 파라미터는 nullable이다
- 타입 추론을 통한 파라미터는 nullble이다 - t?.toString()등인데 이를 막기위해서는 타입 상한을 지정해야한다 <T : Any> 와 같이
코틀린은 오토 박싱 지원 x
- 오토 박싱이 지원되지 않기 때문에 에러 발생 - 코틀리은 자바와 달리 직접 변환해 줘야함 - 단 숫자 리터럴을 사용할 때는 변환하지 않아도 됨. 이미 산술연산자는 적당한 타입의 값을 받아들일 수 있게 오버로드되어 있음
any,unit, nothing 타입
- any는 자바의 Object와 동일. object와 달리 wait,notify 사용 불가능 - unit은 void와 동일. void와 달리 모든 기능을 갖는 일반적인 타입이며 타입 인자로 쓸 수 있음 - unit은 제네릭 파라미터를 반환하는 함수를 오버라이드 할 때 유용함 - nothing 타입은 정상적으로 함수가 끝나지 않을 경우 사용 가능
mutableCollection과 Collection
- 수정 전용과 읽기 전용이다 - 이 둘을 나눈 이유는 봤을 때 파악이 쉬워서 이며 - 변경 가능한 컬렉션을 넘길 때 원본의 피해를 줄일려면 복사본을 넘겨야 할 수도 있다 - 읽기 전용도 항상 스레드 세잎하진 않다. 그 이유는 다른 곳에서 뮤터블 컬렉션으로 참조하고 있을 수 있기 때문이다 - setOf,mapOf들은 자바 라이브러리에 속한 클래스 인스턴스를 반환하기에 변경이 가능하지만 뮤터블MapOf,뮤터블SetOf등이 존재한다. 자바의 인스턴스를 사용해 변경이 가능하지만 추후에 불변으로 변경될 수 있기에 여기에 의존하면 안된다
배열
- array를 통해 배열 생성 가능 - typeToArray를 통해 컬렉션을 배열로 변환 가능. 스프레드 연산자를 통해 다 꺼내기 가능 - 배열 타입이 항상 객체로 들어가게된다. 박싱을 원하지 않는다면 팩토리 메소드인 IntArray등을 쓸 수 있다
관례
- 어떤 기능과 미리 정해진 이름의 함수를 연결하는 것을 관례(convention)이라고 함 - 예시는 관례를 사용한 산술 연산자 이때는 operator를 붙여야한다 - operator를 붙임으로서 어느 함수가 관례를 따르는지 알 수 있다 - point의 plus를 오버라이딩 하지 않았다면 컴파일 오류가 날 것이다. 곱하기, 나누기 등에 각각의 이름이 따로 존재한다
단항 연산자
- 단항 연산자도 제공한다
compareTo도 관례로 처리가능
- Comparable를 구현하면 >등 부등호로 처리가 가능하다 - equals나 compareTo에 operator가 없는 이유는 최상위에 붙어있기 때문이다
get, in 도 관례에 사용 가능하다, 구조 분해 선언
- get과 in은 관례에 따라 오버라이딩으로 표현한다 - val (x,y) = point은 구조 분해로 component 함수를 만들어 사용하는데 지금은 data class라 자동 생성되었다
위임프로퍼티
- p는 일반 프로퍼티 처럼 보이지만 get이나 set 요청은 delegate가 위임한다 - 이는 컴파일 시에 코드들이 만들어진다 - 이런 행위는 lazy 로딩 시에 효과가 있다 - by lazy 시 이런 행위를 Foo class에서 띄어서 캡슐화 할 수 있다
고차함수
- custom filter 고차함수
시퀀스와 람다 인라인
- 람다 인라인은 람다가 실행되는 바이트 코드를 실제 코드 사이에 넣는 것이다. 함수 호출로 다른 곳을 가는 것이 아닌. - 이로 인해 인라인은 성능이 향상된다 - 이전에 봤던 시퀀스는 리스트를 중간에 만들지 않아 성능이 향상된다고 했었는데 이는 인라인을 사용하지 않는다. - 그래서 매번 시퀀스를 붙이는 것은 성능이 나빠질 수 있다 - 크기가 작은 컬렉션은 오히려 일반 컬렉션 연산이 성능이 나을 수 있다
넌로컬 리턴과 로컬 리턴
- 넌로컬 리턴은 인라인 함수에서만 가능한 것으로 람다 내부에서 return시 함수 자체를 끝내는 것이다 - 로컬 리턴은 함수가 끝나는 것이 아닌 람다가 끝나는 것이다. label을 사용해야한다
GitHub - ChoiGiSung/KotlinInAction
Contribute to ChoiGiSung/KotlinInAction development by creating an account on GitHub.
github.com
'TIL' 카테고리의 다른 글
2022.05.10 기록장 (0) 2022.05.10 2022.05.05 기록장 (0) 2022.05.05 2022.05.02 기록장 (0) 2022.05.02 2022.05.01 기록장 (0) 2022.05.01 2022.04.30 기록장 (0) 2022.04.29