🔧 함수 기초
📖 함수란?
**함수(Function)**는 특정 작업을 수행하는 코드 블록입니다. 코드를 재사용하고 구조화하는 기본 단위입니다.
💡 함수 정의
기본 함수
fun sayHello() {
println("안녕하세요!")
}
fun main() {
sayHello() // 함수 호출
sayHello() // 여러 번 호출 가능
}
// 출력:
// 안녕하세요!
// 안녕하세요!
반환값이 있는 함수
fun getGreeting(): String {
return "안녕하세요!"
}
fun main() {
val message = getGreeting()
println(message) // 안녕하세요!
}
단일 표현식 함수
// 중괄호와 return 생략 가능
fun double(x: Int): Int = x * 2
fun main() {
println(double(5)) // 10
}
📋 매개변수
기본 매개변수
fun greet(name: String) {
println("안녕하세요, ${name}님!")
}
fun main() {
greet("홍길동") // 안녕하세요, 홍길동님!
greet("김철수") // 안녕하세요, 김철수님!
}
여러 매개변수
fun introduce(name: String, age: Int) {
println("저는 ${name}이고, ${age}살입니다.")
}
fun main() {
introduce("홍길동", 25)
// 저는 홍길동이고, 25살입니다.
}
기본값
fun greet(name: String = "손님") {
println("안녕하세요, ${name}님!")
}
fun main() {
greet("홍길동") // 안녕하세요, 홍길동님!
greet() // 안녕하세요, 손님님!
}
이름 있는 인자
fun createUser(name: String, age: Int, email: String) {
println("이름: $name, 나이: $age, 이메일: $email")
}
fun main() {
// 순서 상관없이 호출
createUser(
email = "hong@example.com",
name = "홍길동",
age = 25
)
}
🔄 반환값
값 반환
fun add(a: Int, b: Int): Int {
return a + b
}
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
fun main() {
val sum = add(10, 20)
println(sum) // 30
val maximum = max(15, 25)
println(maximum) // 25
}
Unit (반환 없음)
// Unit은 생략 가능
fun printMessage(msg: String): Unit {
println(msg)
}
// 이렇게 써도 같음
fun printMessage2(msg: String) {
println(msg)
}
🎯 실전 예제
계산기 함수
fun add(a: Int, b: Int): Int = a + b
fun subtract(a: Int, b: Int): Int = a - b
fun multiply(a: Int, b: Int): Int = a * b
fun divide(a: Int, b: Int): Int = a / b
fun main() {
val a = 10
val b = 3
println("$a + $b = ${add(a, b)}")
println("$a - $b = ${subtract(a, b)}")
println("$a * $b = ${multiply(a, b)}")
println("$a / $b = ${divide(a, b)}")
}
짝수 판별
fun isEven(number: Int): Boolean {
return number % 2 == 0
}
fun main() {
println(isEven(4)) // true
println(isEven(7)) // false
val number = 10
if (isEven(number)) {
println("$number는 짝수입니다")
}
}
학점 계산
fun getGrade(score: Int): String {
return when {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
score >= 60 -> "D"
else -> "F"
}
}
fun main() {
val score = 85
val grade = getGrade(score)
println("점수 $score점 → 학점 $grade")
// 점수 85점 → 학점 B
}
피보나치 수
fun fibonacci(n: Int): Int {
return when (n) {
0 -> 0
1 -> 1
else -> fibonacci(n - 1) + fibonacci(n - 2)
}
}
fun main() {
for (i in 0..10) {
print("${fibonacci(i)} ")
}
// 0 1 1 2 3 5 8 13 21 34 55
}
문자열 유틸
fun repeat(text: String, count: Int): String {
var result = ""
repeat(count) {
result += text
}
return result
}
fun reverse(text: String): String {
return text.reversed()
}
fun main() {
println(repeat("하", 3)) // 하하하
println(reverse("Hello")) // olleH
}
🔢 가변 인자
vararg
fun sum(vararg numbers: Int): Int {
var total = 0
for (num in numbers) {
total += num
}
return total
}
fun main() {
println(sum(1, 2, 3)) // 6
println(sum(1, 2, 3, 4, 5)) // 15
println(sum(10, 20, 30, 40)) // 100
}
🤔 자주 묻는 질문
Q1. 함수명은 어떻게 짓나요?
A: 동사로 시작하는 camelCase!
// ✅ 좋은 함수명
fun calculateTotal() { }
fun getUserName() { }
fun isValid() { }
fun showMessage() { }
// ❌ 나쁜 함수명
fun data() { }
fun x() { }
fun function1() { }
Q2. return을 꼭 써야 하나요?
A: 단일 표현식은 생략 가능!
// return 사용
fun double(x: Int): Int {
return x * 2
}
// return 생략 (같은 의미)
fun double2(x: Int): Int = x * 2
// 타입 추론도 가능
fun double3(x: Int) = x * 2