Kotlin (함수, 함수의 사용, 함수 파라미터의 정의, login, 배열 문제, 점수 프로그램 함수화)
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;
}
공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.
부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.
읽어주셔서 감사합니다 :)