-
[Kotlin] 함수 정의와 호출Computer Science/Kotlin 2021. 1. 19. 13:19
코틀린에서 컬렉션 만들기
)
- 코틀린에서는 자체 컬렉션을 제공하지 않고 표준 자바 컬렉션을 활용
- 자바에서 코틀린 함수를 호출하거나 코틀린에서 자바 함수를 호출할 때 자바와 코틀린 컬렉션을 서로 변환할 필요가 없음
)
- 코틀린 컬렉션은 자바 컬렉션과 똑같은 컬렉션이지만 자바보다 더 많은 기능을 쓸 수있음
- 수로 이뤄진 배열에서 최대값을 찾거나 리스트의 마지막 원소를 가져올 수도 있음
함수를 호출하기 쉽게 만들기
)
- list를 출력하면 toString()이 출력된다
- 하지만 이런 출력을 커스터마이징하려면 어떻게 할까
- fun를 이용해서 제네릭으로 구현
- 이 함수를 호출하는 문장을 덜 번잡하게 만들 수 있지 않을까
- 함수를 호출할 때마다 매번 네 인자를 전달하지 않을 수는 없을까?
이름 붙인 인자
- 가독성을 위해서 인자에 이름을 붙일 수 있음
- 호출 시 인자 중 하나라도 이름을 명시하고 나면 혼동을 막기 위해 그 뒤에 오는 모든 인자는 이름을 명시해야한다
디폴트 파라미터 값
- 디폴트 파라미터를 미리 지정해 줌으로써 오버로딩의 과도한 중복 사용을 막을 수 있다
정적인 유틸리티 클래스 없애기 : 최상위 함수와 프로퍼티
- 자바에서는 모든 코드를 클래스의 메소드로 작성해야 함
- 그래서 Collections 클래스 같은 특별한 상태나 인스턴스 메소드가 없는 클래스가 생겨남
- 코틀린에서는 이런 무의미한 클래스를 만들 필요 없이 함수를 직접 소스 파일의 최상위 수준, 모든 다른 클래스의 밖에 위치시키면 된다
- 함수와 마찬가지로 프로퍼티도 파일의 최상위 수준에 놓을 수 있음
메소드를 다른 클래스에 추가 : 확장 함수와 확장 프로퍼티
확장 함수
-
확장 함수는 어떤 클래스의 멤버 메소드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수
-
String 클래스에 lastChar라는 메소드를 추가시킴
-
String은 수신 객체 타입, 뒤에 this는 수신 객체
-
String인데 배열처럼 가능하네.. 짱이다
- this 생략도 가능함
- 확장 함수가 캡슐화를 깨지는 않는다. 확장 함수에서는 private, protected 메소드를 쓸 수 없음
최종 버전
- Collection 클래스에 대해 확장 함수로 구현
- 파라미터 디폴트 값 지정
- 이름 있는 인자로 호출
확장 프로퍼티
- lastChar 메서드를 프로퍼티로 고쳤음
- 상태를 저장할 방법이 없어서 어떤 상태를 가지는 것은 아니지만, 더 짧게 코드를 작성 할 수 있어서 편함
- StringBuilder 같은 프로퍼티에 정의하면 마지막 문자를 변경할 수는 있다
'Computer Science > Kotlin' 카테고리의 다른 글
[Kotlin] 인터페이스, 변경자 (0) 2021.01.20 [Kotlin] 컬렉션 처리, 로컬 함수 (0) 2021.01.20 [Kotlin] 코틀린 기초 - 반복문 (0) 2021.01.17 [Kotlin] 코틀린 기초 - 제어문 (0) 2021.01.17 [Kotlin] 코틀린 기초 - 클래스, 프로퍼티 (0) 2021.01.17