초보 개발자의 성장기

[부스트코스][코틀린 프로그래밍 기본 1/2] 한아아지와 함께하는 kotlin - 함수형 프로그래밍 (1) 함수 선언 본문

IT 강의 리뷰/코틀린

[부스트코스][코틀린 프로그래밍 기본 1/2] 한아아지와 함께하는 kotlin - 함수형 프로그래밍 (1) 함수 선언

개발자 김케빈 2021. 1. 15. 13:16

이번 챕터에서는 함수형 프로그래밍에 대해서

공부해보겠습니다.

 

www.boostcourse.org/mo132/lecture/59973

 

코틀린 프로그래밍 기본 1

부스트코스 무료 강의

www.boostcourse.org

www.boostcourse.org/mo132/lecture/61917

 

코틀린 프로그래밍 기본 1

부스트코스 무료 강의

www.boostcourse.org


1. 함수란?

※ 함수의 선언 

모든 함수는 fun 이라는 키워드로 시작합니다.

함수 이름은 함수 역할에 맞게 자유롭게 지으시면 됩니다. 반드시 함수 역할이 떠오르는 이름을 사용해야 합니다.

// 일반적인 함수 모습
fun 함수 이름 ([변수 이름: 자료형, 변수 이름: 자료형]): [반환값의 자료형] {
	표현식 ...
    [return 반환값]
}

// 간략화된 함수
fun 함수 이름 ([변수 이름: 자료형, 변수 이름: 자료형]): [반환값의 자료형] = 표현식 ...

// 반환 자료형 생략
fun 함수 이름 ([변수 이름: 자료형, 변수 이름: 자료형]) = 표현식 ...

※ 매개변수의 기본값

매개변수의 기본 값을 지정하면 인자를 전달하지 않아도 함수 실행이 가능합니다.

또한, 매개변수의 이름과 함께 인자를 전달하는 방법도 가능합니다.

// 함수 예시
fun sum(a: Int, b: Int): Int {
	return a+b
} 

fun max(a: Int. b:Int): if (a > b) else b 

// 반환값 없는 함수
fun outfunc(name: String): Unit {
	println("Name: $name")
}

fun main() {
	val result1 = sum(2, 3)
    
    val a = 3
    val b = 5
    val result2 = max(a, b)
    
    outfunc("Kildong!")
    
    println(result1)
    println(result2)
}

/* 결과
Kildong!
5
5
*/
    
// 매개변수 이름과 함께 함수 호출
fun namedParam(x: Int = 100, y: Int = 200, z: Int) {
    println(x + y + z)
}

namedParam(x = 200, z = 100) // x, z의 이름과 함께 함수 호출(y는 기본값 사용)

※ 가변형 인자 사용 함수

가변 인자를 사용하면 함수는 하나만 정의해놓고 여러 개의 인자를 받을 수 있습니다.

// 가변형 함수 만들기
fun normalVarArgs(vararg a: Int) {
	for (num in a) {
    	println(num)
    }
}

fun normalVarArgs2(vararg a: Int) {
	for (num in a) {
    	println("$num ")
    }
}

fun main() {
	normalVarArgs(1)    
    normalVarArgs(1, 2, 3, 4)
	normalVarArgs2(1)    
    normalVarArgs2(1, 2, 3, 4)

 }   
 
/* 결과
1
1
2
3
4
1
1 2 3 4
*/

2. 함수와 스택 프레임

함수의 각 정보는 프레임(Frame)이라는 이름으로 스택 메모리의 높은주소에서부터 낮은주소로 거꾸로 채워져 갑니다.

가장 아래쪽에는 main함수가 있으며 특정 함수를 호출하면 새로운 스택 프레임이 만들어 집니다.

호출된 순서대로 스택 프레임에 쌓이게 되고 사라질 때는 스택의 특성상 선입-후출로 처음 들어온 main()이 가장 늦게 소멸됩니다.

이 때, 낮은 주소에서 높은주소로 내려오는 힙 영역과 반대로 올라오는 스택 영역이 만나면서 겹치는 것을
스택 오버 플로우 오류 라고 합니다.

 

Comments