ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.