용어 정리
함수 vs 메서드
•
코틀린의 기본적인 함수(function) 은 fun 키워드를 사용한다
◦
톱레벨 함수
◦
클래스의 멤버 함수
◦
함수 내부의 지역 함수
예시 코드
•
메서드(method) 는 클래스와 연결된 함수이다
◦
멤버 함수는 해당 클래스와 연결되어 있으므로, 메서드이다
◦
메서드를 호출하려면 클래스 인스턴스가 있어야 하며, 이를 활용해서 참조해야 한다
◦
모든 메서드는 함수이다
예시 코드
•
확장 함수를 메서드로 불러도 되는지에 대해서는 논란의 여지가 있지만, 확장 함수도 호출을 할 때 인스턴스가 필요하므로 이 책에서는 메서드로 본다.
예시 코드
멤버 vs 확장
•
멤버(member) 는 클래스 내부에 정의된 요소를 의미한다
예시 코드
•
확장 (extension) 은 이미 존재하는 클래스에 추가하는 가짜 멤버 같은것이다
◦
확장은 클래스 외부에서 정의하지만, 일반적인 멤버처럼 사용할 수 있다
예시 코드
파라미터와 와규먼트
•
파라미터 (parameter) 는 함수 선언에 정의되어 있는 변수를 의미한다
•
아규먼트(argument) 는 함수로 전달되는 실질적인 값을 의미한다
•
제네릭으로 선언된 변할 수 있는 부분이 타입 파라미터 이다
◦
그리고 실질적인 타입이 타입 아규먼트 이다
예시 코드
기본 생성자와 추가적인 생성자
•
생성자는 객체를 만들 때 호출되는 특별한 타입의 함수이다.
◦
코틀린이 생성자를 함수처럼 다루고, 생성자 레퍼런스도 함수 타입이지만, 공식적으로는 서브루틴이다
•
생성자는 일반적으로 객체를 설정할 때 사용되는데, 이러한 생성자를 기본 생성자 (primary constructor) 라고 한다
예시 코드
•
추가로 다른 생성자를 만들어야 하는 경우가 있는데, 이를 추가적인 생성자 (secondary constructor) 라고 한다
◦
추가적인 생성자는 일반적으로 this 키워드를 활용해서 기본 생성자를 호출한다\
예시 코드
•
일반적으로 코틀린에서는 추가적인 생성자를 사욯알 일이 거의 없다
◦
기본 생성자 아규먼트의 다른 서브셋을 만들 때는 디폴트 아규먼트를 활용할 수 있다
◦
다른 종류의 객체를 만들어야 할 때는 팩토리 메서드를 사용한다
•
자바에서 사용하기 위해서 기본 생성자 아규먼트의 여러 서브셋을 만들어야 한다면, @JvmOverloads 와 같은 어노테이션을 활용해서 함수에 대한 오버로드를 간단하게 만들 수 있다
예시 코드