1. 함수 function
🐰 함수는 fun으로 정의하고 반환값이 있는 함수는 내부에서 return으로 값을 반환
🐰 함수를 정의할 때 입력값을 기술한 것을 '파라미터'
fun 함수이름 (파라미터 이름 : 타입) : 반환타입 {
return 값
}
🥕 함수의 괄호 안에 입력되는 '파라미터 이름 : 타입'에 따라, 함수를 호출할 때 괄호 안에 값을 넣어서 전달하는데
이 때 입력되는 값의 타입은 함수에 정의된 파라미터 타입과 동일하게 입력해야 함
1) 함수의 정의
반환값과 입력값이 있는 함수의 정의
✏️ Int 타입의 x라는 입력 파라미터를 갖는 함수 square()를 정의
fun square(x: Int): Int {
return x * x
}
// square() 함수가 호출되면 입력값을 제곱해서 호출한 측으로 반환하고 실행이 종류.
반환값이 없는 함수의 정의
✏️ 반환값 없이 입력값을 받아서 출력하는 함수 printSum() 함수를 정의. 함수가 호출되면 결과값을 출력하고 실행이 종료
fun printSum(x: Int, y: Int) {
println("x + y = ${x + y}")
}
입력값 없이 반환값만 있는 함수의 정의
fun getPi(): Double {
return 3.14
}
2) 함수의 사용(호출)
🐰 함수의 사용은 이름 뒤에 괄호를 붙여서 명령어를 실행하는 형태
함수명(값)
🥕 괄호를 붙이지 않으면 함수의 코드가 실행되지 않고 마치 값처럼 인식
반환값과 입력값이 있는 함수의 호출
✏️ 파라미터에 전달할 값을 입력하고 반환값은 대입 연산자(=)로 변수에 담은 후 사용
fun main() {
var squareResult = square(30)
println("30의 제곱은 ${squareResult}입니다.") // 30의 제곱은 900입니다.
println("40의 제곱은 ${square(40)}입니다.") // 40의 제곱은 1600입니다.
}
반환값이 없는 함수의 호출
✏️ 반환값이 없으면 대입 연산자(=)를 사용하지 않고 바로 호출해서 실행
fun main() {
printSum(3, 5) // x + y = 8
}
입력값이 없는 함수의 호출
✏️ 입력값이 없다면 괄호만으로 실행하고 결과값을 받을 수 있음
fun main() {
val PI = getPi()
println("지름이 10인 원의 둘레는 ${PI}입니다.") // 지름이 10인 원의 둘레는 3.14입니다.
}
2. 함수 파라미터의 정의
🐰 함수에 입력되는 파라미터는 마치 변수를 정의하듯이 '이름 : 타입'의 형태로 정의
➡️ 여러 개의 파라미터가 정의될 경우는 콤마로 구분
🐰 코틀린에서 함수 파라미터를 통해 입력되는 모든 값은 변하지 않는 immutable
🐰 코틀린에서의 함수 파라미터는 모두 읽기 전용 키워드 val이 생략된 형태
fun 함수이름((val 생략) name1: String, name2: Int, name3: Double) {실행코드}
1) 파라미터의 기본값 정의와 호출
🥕 파라미터는 정의할 때 등호(=)를 사용해서 기본값을 설정할 수 있음
fun 함수이름 (name1: String, name2: Int = 157, name3: Double = 34.5) {실행코드}
fun newFun(name: String, age: Int = 29, weight: Double = 65.5) {
// name = "tom"; // Val cannot be reassigned
println("name의 값은 ${name}입니다.")
println("age의 값은 ${age}입니다.")
println("weight의 값은 ${weight}입니다.")
}
// 정의된 newFun() 함수를 호출할 때 기본값이 없는 첫 번째 파라미터에만 값을 입력하면
// 두 번째와 세 번째 파라미터에는 설정한 기본값이 자동으로 입력.
newFun("Hello")
/*
name의 값은 Hello입니다.
age의 값은 29입니다.
weight의 값은 65.5입니다.
*/
2) 파라미터 이름으로 값을 입력하기
🥕 함수에 정의된 파라미터가 많을 경우 입력하는 값의 의미가 명확하지 않을 때가 있음
🥕 이럴 경우 순서와 상관 없이 정의된 파라미터 이름을 지정해서 직접 값을 입력할 수 있음
fun main() {
newFun("Michael", weight=67.5)
/*
name의 값은 Michael입니다.
age의 값은 29입니다.
weight의 값은 67.5입니다.
*/
}
응용 예제
📍 login() 메서드와 logout() 메서드를 선언
login() 메서드를 호출할 때는 매개값으로 id와 passwd를 제공하고, logout() 메서드는 id만 매개값으로 제공
1) login() 메서드는 매개값 id가 "admin", 매개값 password가 "1234"일 경우에만 true 로 리턴하고
그외의 값일 경우에는 false를 리턴
2) logout() 메서드는 "admin 아이디가 로그아웃 되었습니다"가 출력
fun main() {
print("아이디를 입력해주세요. >> ")
val id = readln()
print("비밀번호를 입력해주세요. >> ")
val password = readln()
val result = login(id = id, password = password)
if (result) {
println("로그인 되었습니다.")
logout(id)
} else {
println("id 또는 password가 올바르지 않습니다.")
}
}
fun login(id:String, password: String): Boolean {
return id == "admin" && password == "1234"
}
fun logout(id: String) {
println("$id 아이디가 로그아웃 되었습니다.")
}
📍 배열을 전달 받아 짝수만 출력하는 메서드 작업
fun main() {
val numbers = IntArray(10)
for (i in numbers.indices) {
numbers[i] = i + 1
}
print("main() : ")
for (i in numbers.indices) {
print(numbers[i])
if (i < numbers.size - 1) {
print(", ")
}
} // main() : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
println()
printOdd(numbers) // printOdd() : 2, 4, 6, 8, 10
}
fun printOdd(numbers: IntArray) {
print("printOdd() : ")
for (i in numbers.indices) {
if (numbers[i] % 2 == 0) {
print(numbers[i])
if ( i < numbers.size - 1) {
print(", ")
}
}
}
val odds = numbers.filter {result -> result % 2 == 0}
println(odds)
}
📍 키보드로 부터 학생 수와 각 학생들의 점수를 입력받아서, 최고 점수 및 평균 점수를 구하는 프로그램
fun main() {
var run = true // 반복문의 조건으로 사용 -> 값이 false가 된다면 반복문이 종료
var scoreList: IntArray = IntArray(0)
while (run) {
println("-----------------------------------------------------")
println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료")
println("-----------------------------------------------------")
print("선택> ")
val selectNo: Int = readln().trim().toInt()
when (selectNo) {
1 -> scoreList = inputStudentNum() // 학생수를 입력 받아서 배열 생성
2 -> inputScores(scoreList) // 생성된 배열의 갯수 만큼 점수 입력
3 -> printScores(scoreList) // 입력받은 배열의 값을 출력
4 -> printAnalysis(scoreList) // 최고 점수, 평균 점수 출력
5 -> run = setRun() // run 값 변경
}
}
println("프로그램 종료")
}
fun inputStudentNum():IntArray {
print("학생수> ")
var studentNum = readln().toInt()
return IntArray(studentNum)
}
fun inputScores(scores:IntArray) {
for (i in scores.indices) {
print("scores[$i] > ")
scores[i] = readln().toInt()
}
}
fun printScores(scores:IntArray) {
for (i in scores.indices) {
println("scores[$i] : " + scores[i])
}
}
fun printAnalysis(scores: IntArray) {
var max = scores[0]
var sum = scores[0]
var avg: Double
for (i in 1 until scores.size) {
if (scores[i] > max) {
max = scores[i]
}
sum += scores[i]
}
avg = (sum / scores.size).toDouble()
println("최고 점수: " + max)
println("평균 점수: " + avg)
}
fun setRun(): Boolean {
return false
}
[ 내용 참고 : IT 학원 강의 ]
'Programming Language > Kotlin' 카테고리의 다른 글
[Kotlin] 컬렉션 - 셋 Set & 맵 Map (0) | 2024.04.13 |
---|---|
[Kotlin] 컬렉션 - 리스트 List (0) | 2024.04.13 |
[Kotlin] 배열 Array (0) | 2024.04.08 |
[Kotlin] while 문과 반복문 제어 (break, continue) (0) | 2024.04.08 |
[Kotlin] for 반복문 (0) | 2024.04.05 |