클래스와 상속에 이어서 이번에는 메소드에 대해서 배워 볼 것이다.
자바를 공부해 본 적이 있다면, 함수라는 말을 들어봤을 것이라 생각한다.
함수 == 메소드로 우리는 간단하게 이해할것이다.
우리는 함수 안에 동작이나 행동들을 정의해줄 수 있다. 또한, 메소드는 멤버라고도 부른다.
코틀린에서 함수를 생성하는 방법은 fun을 사용하면 된다. fun은 function으로 번역하면 기능을 이야기한다.

위 그림을 보면 함수는 fun을 사용하여 정의할 수 있고, 자식클래스에서 Override(재정의) 할 수 있게 하려면 open을 덧붙여줘야 한다.

Benz 클래스는 Car클래스를 상속받은 자식클래스이고, 여기서 사용한 Method Override는 상속받고 있는 클래스로부터 메소드를 자식클래스로 끌고와서 재정의 할 수 있다. 라는 의미이다.
우리는 부모클래스인 Car클래스에서 선언했던 함수인 start()함수를 Benz 클래스에서 Override했다.
위 그림을 보면 println()함수를 이용하여 재정의했다라고 말할 수 있다. 만약, println이 없다면 재정의 한 것이 없기때문에 재정의했다라고 말할 수 없다.
Method Override는 println()뿐만아니라, 다른 여러가지 함수로도 가능한거 다들 알고있을 것이라 생각한다.
위 그림안에 super.start()에 대해 궁금한 사람은 많을 것으로 예상된다. 나도 몰랐기 때문이다.
super은 부모클래스로의 접근을 의미한다. 즉, super.start()는 부모클래스인 Car 클래스에서 start() 메소드를 호출하라 ! 라는 의미이다. 만약, super을 없앤다면 부모클래스에 접근을 하지 않게 되는데 이것을 응용해서 사용할 수 있다.

위 그림은 Benz 클래스 안에 새로운 메소드인 calculateNumber() 함수를 생성해보았다.
다들 함수를 생성하면 ()를 붙이게 될텐데, 그 이유에 대해서 생각해본 사람들이 있을 것이다.
() 가 있는 이유는 argument, 즉 인자를 받아오기 위함이고, 메소드를 호출하는 상황에서 실행에 그치지 않고, 호출하는 호출처에서 특정 데이터를 넘겨줄 수 있고, 받아오는 것도 가능하다.

위 그림과 함께 설명해보면, benz.calculateNumber(21, 93)을 실행하게 되면 Benz클래스에 있던 calculateNumber(a : Int, b : Int) 함수에서 데이터를 처리하게 된다.
a가 21의 값으로 들어가고 b가 93의 값으로 println(a+b)하여 114의 값을 출력하게 된다.
또한, val result : Int = benz.caculateNumber(23, 41)은 a가 23의 값, b가 41의 값으로 64의 값을 result에 저장한다.
여기서 주의할 점은 result에 데이터를 저장하기 위해서는 fun calculaterNumber(a : Int, b : Int) 옆에 : Int 를 붙여서 데이터 값을 return할 수 있게 해주어야한다.
: Int는 데이터의 return type을 지정하는 것으로 Int뿐만아니라 String, float 등의 데이터 타입을 지정할 수 있다.
마지막으로, return 타입이 없을경우 Unit이라는 type이 있는데 Unit은 실행하고 그만 둘 type이다.
Unit [ 빈 타입 ], 자바로 생각하면 Void하고 같은 의미로 Kotlin에서 Unit은 생략 가능하다.