개발을 시작하시는 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
함수란?
코딩을 하게 되면 매일 함수를 사용합니다. 그렇다면 함수란 정확히 뭘 말하는 걸까요?
함수는 기본적으로 프로그램을 만들며 특정한 작업을 수행하는 코드들을 모아놓은 코드들의 집합을 일컫습니다.
예를 들어 1+3을 실행한 뒤 해당 숫자만큼 “안녕하세요”를 반복해서 말하는 작업을 예시로 들어봅시다.
1| 1+3 2| 위에서 나온숫자수 만큼 "안녕하세요" 반복해서 말하기
위와 같은 명령 작업들이 모여서 작업을 구성할 것입니다. 바로 위와 같은 작업들이 모여있는 것을 함수라고 합니다.
매개변수와 파라미터란?
그렇다면 매개변수나 파라미터는 어떤 것을 말하는 걸까요? 이를 알기 위해서는 우선 함수가 어떻게 구성되는지 알아야 합니다. 어떤 언어에서든 함수는 크게 함수 이름, 매개 변수, 반환값, 함수 본문 4가지로 구성됩니다. 함수 이름과 함수 본문은 말 그대로 함수를 호출 해야 할 때 부를 이름과 실행될 내용입니다.
모든 함수는 본문의 내용을 실행하고 난 뒤 값을 반환하게 됩니다. 예를 들어 plusThree라는 어떠한 값을 입력받아 3을 더한 뒤, 해당 값을 반환하는 함수가 있다고 했을 때 만약 4가 입력되었다면 7이 해당 함수의 반환값이 되는 것입니다. 간혹 void나 Unit 타입처럼 반환값이 반환값이 없는 함수도 있지만요.
매개변수에 대해 알아보기에 앞서 인자(argument)에 대해 먼저 알아봅시다. 인자란 함수를 호출할 때 전달되어야 하는 값이 있을 경우 해당 함수에 전달되는 값을 말하는데, 앞서 말한 어떠한 값을 입력받아 3을 더하는 함수가 있다고 할 때, 해당 함수에 전달되는 숫자가 바로 인자입니다. 매개변수는 이렇게 전달된 인자가 함수 내부에서 사용될 수 있도록 함수를 선언하는 선언부에 지정하는 변수를 말하며, 이를 바로 파라미터라고 부르는 것이죠.
fun plus3(num: Int): Int { return num + 3 } val one = 1 plus3(one)
위와 같은 코드에서 함수에 전달되는 1이라는 값을 가진 변수 one은 인자, 그리고 함수 내부에서 사용되는 선언부의 num이 매개변수입니다. 쉽게 말해 함수를 호출할 때 전달되는 값은 인자, 전달받은 값을 함수 안에서 사용할 때는 매개변수입니다.
스택(Stack)과 힙(Heap)
코틀린을 사용하다 보면 때론 함수 내부에서 값이 바뀌어도, 전달된 인자의 값이 변하지 않는 경우가 있습니다. 그리고 함수가 실행되고 나면 전달된 인자의 값이 바뀌는 경우가 생길 때가 있죠. 왜 이런 현상이 발생할까요?
이를 알기 위해서는 값에 의한 호출과 참조에 의한 호출을 알 필요가 있는데, 이를 위해서는 또 원시 타입의 값과 참조 타입의 값에 대해 알아야합니다. 그러려면 스택과 힙에 대한…. 차근차근 하나씩 알아봅시다.
스택 메모리(Stack Memory), 힙 메모리(Heap Memory)
프로그램을 실행하게 되면 프로그램의 코드들이 메모리에 로드됩니다. 이렇게 메모리에 프로그램이 로드되어 실행되는 것을 프로세스라고 하는데, 프로세스는 Code, Data, Stack, Heap 4가지의 영역으로 나뉘어 메모리 내에 위치합니다.
Code영역에는 컴파일러가 번역한 기계어로 이루어진 코드가, Data영역에는 프로그램 전체에서 사용하는 전역 변수나 변하지 않는 정적 변수, 상수 등이 저장됩니다. 이름 그대로 사용 되기 때문에 알기 쉽습니다.
스택(Stack)
스택은 프로그램이 동작하며 함수가 호출되거나, 해당 함수와 관련 있는 지역 변수, 매개변수 등이 저장되는 영역입니다. 즉, 함수를 호출하면 해당 함수와 관련된 것들이 스택 메모리에 차곡차곡 로드됩니다. 그리고 함수의 동작이 끝나면 해당 함수가 사용하던 메모리가 해제됩니다.
이름에서 알 수 있듯 스택은 쌓아가는 식으로 메모리를 관리합니다. 만약 스택에 대해 더 궁금하다면 👉🏼여기를 확인해주세요.
스택은 메모리 크기에 제한이 있습니다. 그래서 해당 크기를 넘어갈 경우(재귀 함수가 무한하게 호출되는 경우처럼 해제 없이 로드만 되는 경우) 스택 오버플로우가 발생할 수 있습니다.
힙(Heap)
힙은 동적인 데이터, 즉 크기가 변할 수 있는 정보들을 저장하는 공간입니다. 앞서 이야기한 것처럼 스택의 경우 메모리의 크기가 제한되어 있습니다. 이 말은 배열이나, 리스트 같은 타입처럼 데이터에 계속해서 값이 추가될 경우 메모리의 크기를 초과할 수 있다는 뜻입니다. 그래서 이러한 동적 데이터는 힙 영역에 저장됩니다.
스택에서는 차지하는 메모리 자체에 값이 저장되기 때문에 해당 변수가 어떤 값을 가지고 있는지 바로 알 수 있습니다. 하지만 힙의 경우 이와 같은 순서가 없습니다. 그래서 힙 영역 내의 데이터를 확인하려면 해당 값이 어디에 있는지 확인해야 합니다. 힙 영역 내의 주소(위치)를 알아야 한다는 말이죠.
스택에서는 가장 마지막에 호출된 함수가 실행되고 나면 알아서 메모리에서 해제되었습니다. 하지만 힙에서는 순서가 따로 없습니다. 사용되지 않는 값의 경우 개발자가 직접 메모리에서 해당 값을 해제해야 한다는 의미입니다.
내일배움캠프는 개발에 필요한 핵심만 배웁니다
지금까지 꼭 필요한 개발 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
CREDIT
글 | 배영수 내일배움캠프 수료생
편집 | 정효재 팀스파르타 에디터
취업 준비, 어디서부터 시작해야 할지 모르겠다면?
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
Share article
Subscribe to our newsletter