코린이 탈출기

chapter 7.1 - 코틀린 문법 - 함수 본문

인터넷 강의/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기

chapter 7.1 - 코틀린 문법 - 함수

50HEE 2021. 5. 13. 18:29

이번에는 지난 chapter 6에 대해 이론을 예시로 들면서 설명하겠습니다. 객체지향에 대해 다룰 예정입니다.

 

 

함수 - function

클래스가 수행할 수 있는 기능을 명시하고, 실제로 수행할 내용을 적어주는 코드 블록{ }입니다.

자바를 배운 분이라면 메서드 개념과 동일하다고 생각하시면 됩니다.

아직 클래스라는 개념도 다루지 않았지만 우선 함수에 대해 먼저 설명하겠습니다.

클래스는 차후에 다루도록 하겠습니다.

 

함수라는 단어 자체는 아마 초등학교 수학 시간에 들어보셨을 것입니다. 

 

위와 같이 숫자1과 숫자2를 함수에 넣어서 결과를 얻습니다.

위 예시를 보면 함수1의 대한 내용은 +라는 것을 유추할 수 있습니다. 

2개의 재료를 받아서 그 합을 구해 결과를 얻는 방식입니다.

즉, 위의 경우에는 2개의 input을 넣어 어떠한 logic을 돌려 결과가 나오는 구조를 함수라고 합니다.

위와 같은 함수의 경우에는 유추하기 쉽습니다.

 

반면 위와 같은 함수2의 경우에는 함수1에 비해 바로 유추하기가 힘들 것입니다.

함수2는 '숫자1의 제곱 - 숫자2의 제곱'이라는 logic으로 구성해보았습니다.

 

정리해보자면 함수라는 것은 여러 개의 input이 logic을 실행하여 결과가 나오는 구조입니다.

함수 안의 logic을 유추하고 코드로 작성하는 능력을 기르는 것이 프로그래밍을 하는 것입니다.

 

 

 

이번에는 코틀린으로 작성하여 보여드리겠습니다. chapter 6에서 작성한 코드를 참고하겠습니다.

아래의 플러그인은 만들었던 위치를 알려주기 위해 넣은 것입니다.

이번 챕터를 따라 하시려면 'chapter 6.2 ~ 6.5 - 리스트뷰 만들기'를 완성하셔야 합니다.

 

2021.05.08 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 6.2 - 리스트뷰 만들기 (1) - 기초 재료 만들기

 

코드를 작성하는 곳은 Student.kt입니다.

 

함수 설정

 

함수를 처음 설명할 때 '클래스가 수행할 수 있는 기능을 명시'라고 소개하였습니다. 그래서 함수를 작성할 때에는 클래스 내부에 작성하겠습니다. 클래스 내부란 'class 클래스 명 { }'에서 중괄호{ } 내부에 적는 것을 의미합니다. 10 ~ 20번 줄 사이를 의미합니다.

 

코틀린에서 코드로 함수를 작성할 때에는 function의 약자로 fun이라고 작성합니다.

함수의 이름의 경우에는 이전에 다루었던 카멜 표기법에 맞춰서 사용합니다.

단, 함수의 경우에는 첫 글자는 소문자로 시작하고 명령문으로 해석되도록 작문하면 좋습니다. 14번 줄과 같습니다.

 

2021.04.22 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 4.4 - 코드 깔끔하게 작성하기 - 카멜 표기법

 

함수의 명을 정하고 ( )안에는 원하는 재료를 입력해야 합니다.

위의 함수 그림(코틀린 코드X)과 비교하자면 숫자1, 숫자2를 의미합니다.

하지만 이번의 예시는 2021년의 나의 나이를 결과로 보기 위해 작성하였습니다.

그래서 이번에는 기존에 출생 연도를 작성한 것을 이용할 것입니다.

그러므로 이미 클래스 생성자 안에 재료를 만들어 두었기 때문에 가져다가 사용할 것이어서 따로 작성하지 않아도 됩니다. 그래서 함수의 명 뒤에 ( ) 안에는 아무것도 작성하지 않았습니다.

 

나이라는 값을 원하기 때문에 정수라는 타입을 얻고 싶습니다. 

그래서 ': Int'라고 작성하였습니다. 즉, 원하는 결과의 타입을 작성하는 뜻으로 ': 결과 타입'을 작성합니다.

 

이제 재료를 구했으면 logic을 작성할 차례입니다.

즉, 실제로 수행할 내용을 적어주는 코드 블록{ }을 작성해야 합니다. 여기까지 14번 줄의 내용입니다.

 

 

함수를 작성하였으니 이제 logic을 변수로 작성해야 할 차례입니다.

2021년 기준으로 한국식 나이를 구하는 방법은 '2021 - 출생 연도 +1'입니다.

변수로 작성하여 재료를 사용한 것으로 16번 줄에 해당합니다.

 

여기까지 작성하였다면 함수를 다 구현한 것입니다. 하지만 에러가 발생합니다.

그 이유는 결과를 주지 않았기 때문입니다.

원하는 결과 타입에 맞는 최종 결과를 지정해주는 return 구문을 작성해주어야 합니다.

14번 줄의 ( ) 뒤에 원하는 결과로 Int 타입을 작성하였기 때문에 18번 줄과 같이 return 구문을 작성해주어야합니다.

반대로 14번 줄에 ( ) 뒤에 원하는 결과 타입을 작성하지 않았다면 return 구문 또한 필요가 없습니다.

즉, 이 함수는 재료도 필요 없고, 결과도 따로 필요 없다는 뜻입니다.

리턴 타입 즉, 결과 타입이 없이 작성된 함수의 경우에는 뭔가 계산 결과를 해주는 것이 아니라 안에 있는 단순 기능을 실행하는 것 자체에 의미를 둡니다.

굳이 결과가 없다는 것을 표현하는 방법으로는 결과 타입에 Unit이라고 작성할 수도 있습니다.

실행 결과가 없다는 것을 인지하기 위해 사용할 수 있습니다.

 

이렇게 작성한 코드를 활용해보겠습니다.

 

 

 

2021.05.10 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 6.3 - 리스트뷰 만들기 (2) - Adapter 클래스 뼈대 작업

 

코드를 작성한 곳은 StudentAdapter.kt입니다.

 

기존의 코드
변경된 코드

기존의 코드인 49번 줄에 해당하는 내용을 위의 함수 getMyAgeIn2021로 작성한 것과 같습니다. 어떻게 보면 더 복잡해진 것처럼 보이지만 매번 필요할 때마다 변수를 만들어 작성하는 것보다 한 번 함수를 작성하면 가져다가 사용할 수 있어 코드가 더 간결해집니다. 이를 함수 모듈화라고 표현합니다.

 

 

 

<코드 정리>

fun 함수 명 (재료1: 타입1, 재료2: 타입2 ...) : 결과 타입 {

//실제 실행할 내용

return 원하는 결과

}

다르게 표현하면

fun 함수 명 (변수 이름1: 타입1, 변수 이름2: 타입2 ...) : 결과 타입 {

//실제 실행할 내용

return 원하는 결과

}

 

재료도 필요 없고 결과도 필요 없는 경우 (void)

fun 함수 명 () {

//실제 실행할 내용

}

 

 

 

마지막으로 자바와 비교 설명을 하겠습니다.

자바와 다르게 이름을 먼저 지어주고 형태가 뒤에 나옵니다.

코틀린의 모든 문법의 기본적인  구조로 '이름: 타입' 형식입니다.

함수의 경우에는 무조건 fun으로 시작합니다.

자바의 경우 void를 적어 리턴 타입이 없다는 것을 별도로 명시하여야 하지만 코틀린의 경우에는 리턴 타입을 마지막으로 작성하기 때문에 없는 경우에는 스킵하여도 됩니다.

Comments