- 어떤 클래스에 대한 확장 함수를 정의할 때, 이를 멤버로 추가하는 것은 좋지 않음
- 확장 함수는 첫 번째 아규먼트로 리시버를 받는 단순한 일반 함수로 컴파일 됨
- 확장 함수를 클래스 멤버로 정의할 수도 있고, 인터페이스 내부에 정의할 수도 있음
- 가시성 제한을 위해 확장 함수를 멤버로 정의하는 것은 굉장히 좋지 않음
- 한 가지 큰 이유는 가시성을 제한하지 못한다는 것
- 이는 단순하게 확장 함수를사용하는 형태를어렵게 만들 뿐임
- 확장 함수의 가시성을 제한하고 싶다면, 멤버로 만들지 말고, 가시성 한정자를 붙여주면 됨
- 멤버 확장을 피해야 하는 몇 가지 타당한 이유
- 레퍼런스를 지원하지 않음
- 암묵적 접근을 할 때, 두 리시버 중에 어떤 리시버가 선택될지 혼동
- 확장 함수가 외부에 있는 다른 클래스를 리시버로 받을 때, 해당 함수가 어떤 동작을 하는지 명확하지 않음
- 멤버 확장함수를 사용하는 것이 의미가 있는 경우에는 사용해도 괜찮음
- 하지만 일반적으로는 그 단점을 인지하고, 사용하지 않는 것이 좋음
- 가시성을 제한하려면, 가시성과 관련된 한정자를 사용해야 함
- 클래스 내부에 확장 함수를 배치한다고, 외부에서 해당 함수를 사용하지 못하게 제한되는 것이 아님