이 포스트는 부스트코스 서포터즈 3기 활동을 기반으로 정리된 글입니다.

함수 : 입력값이 들어오면 함수 안에서 처리 후 값을 반환하는 것. 입력, 반환은 필수 아님

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

 

하나의 함수를 다양하게 표현할 수 있다.

// 일반적인 함수의 모습
fun sum(a: Int, b: Int): Int {
	return a + b
}

// 간략화된 함수
fun sum(a: Int, b: Int): Int = a + b

// 반환 자료형 생략
fun sum(a: Int, b: Int) = a + b

 

함수 실습

최상위 함수 특징 : sum이라는 이름은 main의 위 혹은 아래에 두더라도 해당 이름을 main 안에서 사용할 수 있다.

 

지역 함수는 실행 시키기 전에 정의해야 오류 없이 실행된다.

따라서, sum 함수가 result1보다 아래에 정의되면 오류가 발생한다.

 

max에서 사용하는 매개변수 a와 매개변수 b는 result2에서 보내는 인자 a와 b랑은 다른 것이다.

그래서 같은 이름이어도 한 파일에서 다른 함수에서 변수 값을 동일하게 지정하면 모두 잘 실행된다.

매개변수 a와 b는 인자 a와 b의 값을 복사한다고 생각하면 된다. 그리고 max 함수가 전부 실행되면 max 함수에서 사용하는 매개변수 a와 b는 사라진다.

 

Unit은 아무런 자료형을 지정하지 않았다는 의미이다. 특정 반환 타입을 없는 경우 사용한다. Unit은 생략 가능하다.

 

매개변수에 미리 default 값을 지정해두면 인자를 주지 않을 경우에도 오류없이 함수가 잘 실행된다.

여기서 만약, sum에 default 값을 지정해두지 않았다면 result2에 오류가 생긴다.

a와 b 중 한 개만 default 값을 지정해도 된다.

 

앞에 있는 매개변수 말고 뒤에 있는 매개변수에 값을 할당해주고 싶을 경우에는 "특정 매개변수 = 지정하고 싶은 값" 이런 식으로 해야한다. a에 값을 주고 싶을 경우에는 sum(3) 이렇게 해도 되지만, b에 값을 주고 싶을 경우에는 sum(b = 5) 이렇게 지정해주어야한다는 의미이다.

 

가변 인자 : 원하는 개수만큼 인자를 입력하고 싶을 경우 사용

 

가변 인자 함수 실습

인자가 1개든, 4개든 잘 실행됨을 확인할 수 있다.

이 함수는 생각보다 잘 사용하지 않기도 하고, 생각보다 잘 사용하기도 하는 것 같다.

기본적인 것을 만들 때에는 잘 사용되지 않지만, 가끔 이름을 주로 받고, 연락처는 필수가 아닐 경우 등 이러한 함수를 사용하기도 한다.

 

함수와 스택 프레임 이해하기 : 힙은 낮은 주소부터 높은 주소 순으로 쌓이고, 스택은 높은 주소부터 낮은 주소 순으로 프레임이 쌓임

main 함수의 프레임, 즉 지역 변수들, 항 (Operand) 스택, 상수 풀 등은 스택에 저장되고 동적 개체는 힙에 저장됨

프레임은 사용될 때 쌓였다고 실행이 완료되어 반환되면 사라짐.

 

수업에서 이야기하지 않았던 내용이 포함되었을 수 있습니다. 제가 공부하면서 좀 더 이해하기 쉽다고 느꼈던 내용들을 추가하여 작성하였음을 알려드립니다.

+ Recent posts