[개발일기] 22-06-16

오늘·2022년 6월 16일
0

[개발일기]

목록 보기
54/199

📝 간단하게 쓰는 개발일기

함수형 코틀린

5장의 절반 정도를 끝냈다. 단일 표현 함수, 파라미터, 람다, 명명된 파라미터, 기본 파라미터, 확장 함수, 중위 함수에 대해 공부했다.

정리

  • 단일 표현 함수는 한 줄로 표현할 수 있다.
  • 수정자 vararg를 통해 매개 변수의 개수를 정확히 모를 때 매개 변수를 표현할 수 있다.
  • vararg는 한 함수에서 여러개 사용할 수 없다.
  • vararg로 람다를 받을 수 있는데, 이때는 함수 호출 시 괄호 밖으로 람다를 빼서 작성할 수 없다.
  • 명명된 파라미터는 data class의 생성자처럼 함수의 매개 변수 수가 많아질 때 가독성을 위해 사용하면 좋다.
  • 명명된 파라미터는 순서가 상관 없다.
  • 명명된 파라미터를 사용하지 않으면 순서를 정확히 지켜주어야 한다.
  • vararg뒤에 매개 변수가 더 있다면 그 매개 변수는 명명된 파라미터로 명시해주어야 한다.
  • 고차 함수를 사용할 때 람다의 매개 변수의 이름을 지정해 줄 수 있는데, 람다를 호출할 때 명명된 파라미터를 사용할 수는 없다.
  • 기본 파라미터를 통해 함수 호출 시 인자를 적게 넘겨주어서 호출이 가능하다.
  • 기본 파라미터가 있더라도 기본 파라미터 다음 매개 변수를 호출하려면 명명된 파라미터를 사용해야 한다.
  • 확장 함수는 기존의 타입에 함수를 추가하는 방법이다.
  • 확장 함수에서 '.' 앞의 타입, 즉 확장할 타입을 리시버 타입이라고 한다.
  • 확장 함수는 첫 인자로 리시버 타입을 받는 함수와 구현상 차이가 없다.
  • 상속을 하거나 받는 클래스도 확장 함수를 가질 수 있다.
  • 부모 클래스 타입의 매개변수를 갖는 함수가 자식 클래스 타입의 인스턴스를 받아서 해당 타입의 확장 함수를 호출하더라도 자식 클래스 타입이 가지는 확장 함수가 호출되는 것이 아닌, 부모 클래스 타입의 확장 함수가 그대로 호출된다. 즉, 확장 함수는 오버라이딩 되는 것이 아니다.
  • 확장 함수를 멤버로 가지는 클래스에서 확장 함수가 확장하는 타입은 리시버, 확장 함수를 멤버로 가지고 있는 클래스는 디스패치 리시버라고 한다.
  • 멤버로서의 확장 함수는 리시버가 this에 대한 우선권을 가지며, 디스패쳐의 this를 사용하고 싶을 경우 this@(디스패쳐 타입 이름)형식으로 제한을 해 주어야 한다.
  • 멤버로서의 확장 함수에서 리시버의 멤버와 디스패쳐의 멤버가 이름이 같은 것이 있을 땐 위의 방식으로 this를 제한해서 멤버에 접근해야 한다. 멤버의 이름이 다를 경우는 this의 사용 없이 디스패쳐의 멤버에 접근이 가능하다.
  • 확장 함수가 멤버 함수와 같은 이름을 가질 경우 private 멤버의 경우 확장 함수가 먼저 호출되지만 private 멤버가 아닌 경우 확장 함수가 멤버 함수에 의해 가려진다.(shadowed)
  • object 키워드로 생성한 객체 역시 확장 함수를 가질 수 있지만, 멤버 함수와 동작이 같다.
  • 중위 함수는 infix 키워드를 사용하는 확장 함수이며, 중위 함수를 중위 표현식으로 사용이 가능하다.
profile
Junior Mobile 개발자

0개의 댓글