따배씨++ (2-2. 정리하기)

김동우·2021년 2월 17일
0

안녕하세요. 김동우입니다.

이번 노트에서는 기본 개념인 함수와 라이브러리의 차이에 대해 생각해봅시다.

1. 함수? 라이브러리?

우리가 코딩을 이전에 했든, 하지 않았든 이제는 함수라는 녀석과 조금 밀접한 관계에 놓이게 되었음을 인지하고 있습니다. 함수는 뭘까요? 왜 사용할까요? 뭔데 첫 시간부터 계속 나오는 말일까요?

함수라는 것은 우리가 12년+@ 의 시간을 들여 배우던 수학에서의 개념과는 사뭇 다릅니다. 우리가 흔히 배우던 자연계의 선형대수학 함수와는 좀 달리, 컴퓨터 언어에서는 컴퓨터가 실행할 수 있는 특정 기능을 가지고 있는 코드행의 모음을 의미하고 있습니다. 자. 포인트는 함수 자체가 이미 어떠한 기능을 내포하고 있다는 점입니다.

또한 저는 함수가 그저 단순히 간결한 코드를 작성하기 위해 고안된 개념이라고 생각합니다. 간결한 코드의 작성은 대다수가 갈망하는 결과이고, 다수가 갈망했기에 많은 언어들은 함수를 지원할 수 밖에 없었을겁니다.

이처럼 의도는 단순한 개념이지만, 우리가 함수를 통해 얻을 수 있는 이점은 상당히 많습니다. 아쉽지만 오늘은 그 이점들에 대해 깊게 들어가기보다는 라이브러리와의 차이에 조금 초점을 맞추겠습니다. 차차 많은 것들을 얘기해보겠습니다.

1.1 모듈화

모듈화라는 개념을 들어보신 적 있으신가요? 처음에는 애매한 개념이실겁니다. 하지만, 우린 모듈화를 이미 경험했습니다. 지난 시간에 작성했던 코드의 전처리기에 있는 그것. <iostream> 녀석이 모듈화의 대표적 예시죠. 다른 파일에서 작성된 함수나 변수를 가져올 수 있도록 분할하는 행위를 우린 모듈화라고 합니다.

왜 분할할까요? 대표적으로는

  • 보안
  • 유지보수 및 설계에서의 이점 추구

두 가지를 목표로 하고 있습니다.

자세한 내용은 모듈화에 대한 공부를 하시면 되겠으나, 당장 깊게 들어갈 내용이 아니라고 생각해서 저는 따로 적지는 않겠습니다. 깊게 들어갈수록 계층설계, 의존성 등을 추가로 더 공부해야하는 지독한 녀석이거든요. 그리고 지금 그러한 내용을 초심자가 보기에는 큰 울림이 있지 않을것이라 생각합니다.

그리고 제공되는 iostream이라는 헤더파일을 가져와 내장함수인 cout을 쓰는 것을 우린 라이브러리를 활용한다고 얘기했었습니다.

그렇다면, 라이브러리와 함수는 어떤 관계가 있는걸까요?

1.2 라이브러리

라이브러리는 함수를 가지고 있는 무언가를 지칭하는 용어입니다. 그것도 외부에 존재하는 무언가를요. 내가 작성하지 않았고, 남들이 만들어둔 편리한 기능의 집합체가 바로 라이브러리입니다.

즉, 저는 함수는 라이브러리를 구성하고 있는 하나의 단위개념이 아닐까 생각합니다. 이전 Expression, Statement 글에서처럼 부분집합의 개념과는 조금 다르게 말이죠.

예를 들어 만약, 우리가 제곱근을 구하고 싶은데, 이러한 기능을 직접 구현한다면 생각보다 까다로운 과정이 기다리고 있습니다. 이러한 과정은 귀찮은데다 꽤나 어렵습니다. 그런 우리를 위해 사용 언어의 개발자 혹은 불편함을 미리 경험한 유저가 구현해서 파일로 배포하는 것이죠.

여기서는 1. Math 라는 이름의 라이브러리에서 2. 정수나 실수를 입력받아 제곱근을 구해주는 함수를 가지고 오면 되는 겁니다. 즉, 라이브러리는 함수를 내장하고 있는 파일로 생각하시면 됩니다.

근데 만약,

"뭐야, 지금 당장 필요한데 배포된 라이브러리가 없네, 내가 직접 만들어야겠다. 한 곳에 작성하고 파일은 모듈화로 분할해야지! 배포는 그냥 귀찮으니까 하지 말자."

이렇게 생각하고 계신 경우라면, 이것 또한 라이브러리가 맞을까요?

개발자 본인이 만든 모든 함수는 사용자 정의 함수라고 부릅니다. 또한 본인이 직접 구현한 것이기 때문에 이를 모듈화로 쪼갠 다음 가져온다고 해서 라이브러리라고 부르지는 않습니다. 무조건 함수가 기록된 파일을 불러오는 것이 라이브러리가 아니라는 말이 되겠습니다.

또한 다수의 불편함을 눈감은 채로 배포를 하지 않고 혼자 사용하는 것은 라이브러리들이 추구하는 가치와 애초에 다른 방향을 바라보는 행위겠죠?

개인적으로 저는 뛰어난 개발자란 뛰어난 실력을 바탕으로 공익을 추구해 더 많은 사람들에게 편의를 제공할 수 있는 사람이라고 생각합니다.

지금의 제가 배우고 있고, 여태까지의 제가 많은 도움을 익명의 사람들에게 받아와서 그런걸지도 모르겠습니다.

그럼 이번 글은 짧지만, 여기서 마치도록 하겠습니다.

0개의 댓글

관련 채용 정보