Dev/Kotlin

Kotlin (함수, 함수의 사용, 함수 파라미터의 정의, login, 배열 문제, 점수 프로그램 함수화)

Walker_ 2024. 4. 9. 17:22

1. 함수

 - 함수는 fun으로 정의하고 반환값이 있는 함수는 내부에서 return으로 값을 반환

 - 함수를 정의할 때 입력값을 기술한 것을 '파라미터'

 

 - 함수의 정의

 - 함수는 fun 키워드로 정의하며 값을 입력받아 사용할 수 있는데, 이때 입력될 값을 기술하는 것을 파라미터라고함

fun 함수이름 (파라미터 이름 : 타입) : 반환타입 {
    return 값
}

 

 - 함수의 괄호 안에 입력되는 '파라미터 이름 : 타입'에 따라, 함수를 호출할 때 괄호 안에 값을 넣어서 전달하는데 

 - 이 때 입력되는 값의 타입은 함수에 정의된 파라미터 타입과 동일하게 입력해야 함

 

 - 1) 반환값과 입력값이 있는 함수의 정의

 - Int 타입의 x라는 입력 파라미터를 갖는 함수 square()를 정의

fun square(x:Int) : Int {
    return x * x
}
// square() 함수가 호출되면 입력값을 제곱해서 호출한 축으로 반환하고 실행이 종료

 

 - 2) 반환값이 없는 함수의 정의

 - 반환값 없이 입력값을 받아서 출력하는 함수 printSum() 함수를 정의

 - printSum() 함수가 호출되면 결과값을 출력하고 실행이 종료

fun printSum(x: Int, y: Int) {
    println("x + y = ${x+y}")
}

 

  - 3) 입력값 없이 반환값만 있는 함수의 정의

fun getPi() : Double {
    return 3.14
}

  

2. 함수의 사용(호출)

 - 함수의 사용은 이름 뒤에 괄호를 붙여서 명령어를 실행하는 형태

 

 - 함수명(값)

 - 함수는 이름만 호출해서는 실행되지 않고 반드시 괄호를 붙여야 실행

 - 함수의 사용은 이름 뒤에 괄호를 붙여서 명령어를 실행하는 형태

  - 괄호를 움직이지 않으면 함수의 코드가 실행되지 않고 마치 값처럼 인식

 

 - 1) 반환값과 입력값이있는 함수의 호출

 - 파라미터에 전달할 값을 입력하고 반환값은 대입 연산자(=)로 변수에 담은 후 사용

 

  - 2) 반환값이 없는 함수의 호출

 - 변환값이 없으면 대입 연산자(=)를 사용하지 않고 호출해서 바로 실행

printSum(3,5)

 

 - 3) 입력값이 없는 함수의 호출

 - 입력값이 없다면 괄호만으로 실행하고 결과값을 받을 수 있음

val PI = getPi()
println("지름이 10인 원의 둘레는 ${PI}입니다.")

 

 

3. 함수 파라미터의 정의

 - 함수에 입력되는 파라미터는 마치 변수를 정의하듯이 '이름 : 타입'의 형태로 정의되며,

 - 여러 개의 파라미터가 정의될 경우는 콤마로 구분.

 

 - 코틀린에서 함수 파라미터를 통해 입력되는 모든 값은 변하지 않는 이뮤터블

 - 따라서 코틀린에서의 함수 파라미터는 모두 읽기 전용 키워드 val이 생략된 형태라고 생각할 수 있음

fun 함수 이름 ( (val 생략) name1: String,
name2 : Int, name3: Double) {
실행코드
}

 

 - 1) 파라미터의 기본값 정의와 호출

 - 파라미터는 정의 할 때 등호(=)를 사용해서 기본값을 설정할 수 있음

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")
}

 

 - 2) 파라미터 이름으로 값을 입력하기

 - 함수에 정의된 파라미터가 많을 경우 입력하는 값의 의미가 명확하지 않을 때가 있음

 - 이럴 경우 순서와 상관없이 정의된 파라미터 이름을 지정해서 직접 값을 입력할 수 있음

newFun("Michael", weight = 67.5)

 

4. login

package `20240409`


fun login(id:String, password:String) : Boolean {
    return id == "admin" && password == "1234"
}
fun logout(id:String) {
    println("$id 아이디가 로그아웃 되었습니다.")
}

fun main() {
    print("아이디를 입력해 주세요. >> ")
    val id = readln()
    print("비밀번호를 입력해주세요. >> ")
    val password = readln()

    val result = login(id, password) // true대신 login() 호출;
    if (result) {
        println("로그인 되었습니다.")
        logout(id)
        // logout() 호출;
    } else {
        println("id 또는 password가 올바르지 않습니다.")
    }
}

 

5. 배열 문제

package `20240409`

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(", ")
        }
    }

    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(", ")
            }
        }
    }
}

 

6. 점수 프로그램 함수화

package `20240409`

import java.util.*

fun main() {
    /* 키보드로 부터 학생 수와 각 학생들의 점수를 입력받아서, 최고 점수 및 평균 점수를 구하는 프로그램입니다.
실행결과를 보고 알맞게 작성해 보세요. */
    var run = true // 반복문의 조건으로 사용 -> 값이 false가 된다면 반복문이 종료
    var studentNum = 0 // 학생수
    var scores: IntArray = IntArray(0) // 점수를 입력 받을 빈 배열 생성. 사용자에게 입력받은 학생수를 기준으로 배열 생성.

    while (run) {
        println("-----------------------------------------------------")
        println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료")
        println("-----------------------------------------------------")
        print("선택> ")
        val selectNo: Int = readln().trim().toInt()
        when (selectNo) {
            1 -> scores = inputStudentNum() // 학생수를 입력 받아서 배열 생성
            2 -> scores = inputScores(scores) // 생성된 배열의 갯수 만큼 점수 입력
            3 -> printScores(scores) // 입력받은 배열의 값을 출력
            4 -> printAnalysis(scores) // 최고 점수, 평균 점수 출력
            5 -> run = setRun() // run 값 변경
        }
    }
    println("프로그램 종료")
}
fun inputStudentNum():IntArray {
    print("학생 수 > ")
    var studentNum = readln().toInt()
    var scores = IntArray(studentNum)
    println(Arrays.toString(scores))
    return scores
}
fun inputScores(scores:IntArray): IntArray {
    for (i in 0 until scores.size) {
        print("scores[${i}] > ")
        scores[i] = readln().toInt()
    }
    return scores
}
fun printScores(scores:IntArray) {
    for (i in 0 until scores.size) {
        println("scores[${i}]: ${scores[i]}")
    }
}
fun printAnalysis(scores: IntArray) {
    var sum = 0
    for (i in 0 until scores.size) {
        sum += scores[i]
    }
    println("최고 점수: ${scores.max()}")
    println("평균 점수: ${(sum/scores.size).toFloat()}")
}
fun setRun():Boolean {
    return false;
}

 

 


공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.

부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.

읽어주셔서 감사합니다 :)