ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] 함수 정의와 호출
    Computer Science/Kotlin 2021. 1. 19. 13:19

    코틀린에서 컬렉션 만들기

    )

    • 코틀린에서는 자체 컬렉션을 제공하지 않고 표준 자바 컬렉션을 활용
    • 자바에서 코틀린 함수를 호출하거나 코틀린에서 자바 함수를 호출할 때 자바와 코틀린 컬렉션을 서로 변환할 필요가 없음

    )

    • 코틀린 컬렉션은 자바 컬렉션과 똑같은 컬렉션이지만 자바보다 더 많은 기능을 쓸 수있음
    • 수로 이뤄진 배열에서 최대값을 찾거나 리스트의 마지막 원소를 가져올 수도 있음

    함수를 호출하기 쉽게 만들기

    )

    • list를 출력하면 toString()이 출력된다
    • 하지만 이런 출력을 커스터마이징하려면 어떻게 할까

    • fun를 이용해서 제네릭으로 구현
    • 이 함수를 호출하는 문장을 덜 번잡하게 만들 수 있지 않을까
    • 함수를 호출할 때마다 매번 네 인자를 전달하지 않을 수는 없을까?

    이름 붙인 인자

    • 가독성을 위해서 인자에 이름을 붙일 수 있음
    • 호출 시 인자 중 하나라도 이름을 명시하고 나면 혼동을 막기 위해 그 뒤에 오는 모든 인자는 이름을 명시해야한다

    디폴트 파라미터 값

    • 디폴트 파라미터를 미리 지정해 줌으로써 오버로딩의 과도한 중복 사용을 막을 수 있다

    정적인 유틸리티 클래스 없애기 : 최상위 함수와 프로퍼티

    • 자바에서는 모든 코드를 클래스의 메소드로 작성해야 함
    • 그래서 Collections 클래스 같은 특별한 상태나 인스턴스 메소드가 없는 클래스가 생겨남
    • 코틀린에서는 이런 무의미한 클래스를 만들 필요 없이 함수를 직접 소스 파일의 최상위 수준, 모든 다른 클래스의 밖에 위치시키면 된다
    • 함수와 마찬가지로 프로퍼티도 파일의 최상위 수준에 놓을 수 있음

    메소드를 다른 클래스에 추가 : 확장 함수와 확장 프로퍼티

    확장 함수

    • 확장 함수는 어떤 클래스의 멤버 메소드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수

    • String 클래스에 lastChar라는 메소드를 추가시킴

    • String은 수신 객체 타입, 뒤에 this는 수신 객체

    • String인데 배열처럼 가능하네.. 짱이다

    • this 생략도 가능함
    • 확장 함수가 캡슐화를 깨지는 않는다. 확장 함수에서는 private, protected 메소드를 쓸 수 없음

    최종 버전

    1. Collection 클래스에 대해 확장 함수로 구현
    2. 파라미터 디폴트 값 지정
    3. 이름 있는 인자로 호출

    확장 프로퍼티

    • lastChar 메서드를 프로퍼티로 고쳤음
    • 상태를 저장할 방법이 없어서 어떤 상태를 가지는 것은 아니지만, 더 짧게 코드를 작성 할 수 있어서 편함
    • StringBuilder 같은 프로퍼티에 정의하면 마지막 문자를 변경할 수는 있다

    댓글

Designed by Tistory.