ToDo
Done
Weekly goal
프로퍼티 vs 메소드
- 프로퍼티는 필드(nullable) + 접근자 메소드(nullable)라고 볼 수 있음
- 프로퍼티의 필드는 backing 필드라고 부르며 이 것이 없는 프로퍼티도 있을 수 있음
- 단순히 매개변수가 없는 메소드 vs 프로퍼티 get 재정의는 가독성 차이만 있음
enum when
- when은 java의 switch 와 비슷함
- 내부에 메소드를 인자로 삼을 수도 인자가 필요없을 수도 있음
함수 선언
디폴트 매개변수
- 디폴트로 매개변수를 넣으므로서 오버로딩 효과를 낸다
java의 유틸 개념 메소드
- 유틸 클래스를 생성하지 않고 최상위에 메소드 선언 가능
상수 선언
- const가 없으면 내부적으로 getter를 사용함. 프로퍼티이기에
- const를 사용하면 public static final이 됨
확장 함수
- 수신 객체 클래스의 밖에서 선언된 함수
- 말그대로 확장해서 사용한다
- 단 해당 class를 임포트해야 사용 가능
- java에서는 static 메소드로 취급
확장 함수를 사용한 리팩토링
- 항상 받아야 하는 collection을 확장 함수로 변경
중위 함수와 구조 분해 선언
- to는 중위 함수임. 1.to("d")와 같은 호출 -> pair라는 순서쌍 클래스를 반환함
- in 도 중위 함수임
프로퍼티 상속
- 프로퍼티도 상속이 가능하다
- 단 인터페이스는 백킹필드가 없으므로 상태를 가질 수 없다
접근자 프로퍼티 숨기기
- 값은 볼 수 있게 var로 간다. val도 볼 수 있지만 내부에서는 값을 변경하지 못하기에 이를 위해 var private set을 함께 쓴다
불변성을 지키자
- 불변성의 장점
- 1. 객체를 키로 가지고 있을 경우 문제를 예방할 수 있음
- 2. 다중 스레드 환경에서 동기화를 하지 않아도 됨
- 3. 쉽게 프로그램 추론이 가능함
- 4. 굳이 프로퍼티 변경을 해야한다면 copy를 하면됨
by 키워드를 통한 데코레이터 패턴
- 데코레이터 패턴을 사용 시 하나하나 재정의를 해줘야 하는 경우가 있었다면 by 키워드를 통해 countingSet이 대신 위임한다
동반 객체 사용
- 코틀린에는 정적 키워드인 static이 없음
- 이를 위해 최상위 함수나 object를 사용할 수 있음
- 하지만 최상위 함수는 private에 접근이 불가능함
- 이때 companion이 유용함 -> private 생성자나 다른 곳에 접근 가능
동반 객체 응용
- 이름을 붙일 수 있다
- 상속과 구현을 할 수 있다
- 파라미터로 넘길 수 있다. 부모를 넘기면 동반 객체가 넘어간다