: 같은 스코프 안에서 같은 이름의 함수를 여러개 만들 수 있는 기능
fun test (x: Int)
fun test (x: Int, y: String)
fun test (x: Int, z: Int)
...
이렇게 같은 이름의 함수이지만 파라미터의 자료형이나 개수가 다르다면 서로 다른 함수로 동작할 수 있다.
하지만
fun test (x: Int, y: Int)
fun test (a: Int, b: Int)
이거와 같이 자료형과 개수는 같으나 이름만 다른 함수의 경우는 오버로딩이 될 수 없다.

이렇게 함수 이름은 같더라도 자료형이 다르다면 오버로딩이 되어 다른 동작을 하게 된다.
: 파라미터를 받아야 하는 함수이지만 별다른 파라미터가 없더라도 디폴트 기능으로 동작하기 위한 기능

원래 파라미터를 3개 받아야 하지만 함수 호출시 파라미터를 name만 설정 했더라도 함수 자체에서 count와 destination의 경우 디폴트 값을 주었기에 정상적으로 작동한다.
: 파라미터 순서와 관계없이 파라미터의 이름을 사용하여 직접 파라미터의 값을 할당하는 기능

함수 호출시 직접 파라미터 이름과 값을 지정해주면 순서에 상관없이 해당 파라미터로 적용이 된다.
: 같은 자료형을 개수에 상관없이 파라미터로 받고 싶을 때 사용하는 기능

같은 Int형 자료형을 파라미터로 4개를 넣었지만 vararg로 하나의 파라미터로 통일하여 받게 되어 합계에 대한 기능이 동작하는 것을 알 수 있다.
개수가 지정되지 않은 파라미터라는 특징이 있으므로
fun sample(text: String, vararg x: Int)
다른 파라미터와 같이 사용할 때 반드시 맨 마지막에 위치해야 한다.
: 연산자처럼 사용할 수 있는 기능

이것 처럼 infix 키워드 명시로 연산자처럼 함수를 작성할 수 있다.
자료형.함수이름으로 infix함수가 적용될 자료형 이름을 지정해준다.
그 다음은 파라미터 자료형과 반환될 자료형을 넣어주고, 반환할 수식어 구문을 작성한다.
그렇게되면 6 multiply 4에서 6은 infix가 적용되는 객체이고, 4는 파라미터로 받은 객체이다.
또한 infix 함수 호출 방식은
6 multiply 4
6.multiply(4)
이 2가지 방식으로 둘 다 같다.