brunch

You can make anything
by writing

C.S.Lewis

by Jenny Jang Mar 17. 2023

코딩 공부전 알면 좋은 | 프로그래밍 기초


공학 계열 전공자가 아닌 비전공자들이(저는 참고로 자연계였습니다.) 프로그래밍을 시작하기 전에 갖춰야 할 컴퓨터 과학의 기초에 대해서 요약하여 설명하고자 합니다.

일반적으로 "프로그래밍을 배운다" 라고 할 때, 바로 문법(Syntax)을 시작하는 경우가 많습니다. python 코스를 듣거나, 바로 html/css 코스를 듣는게 일반적인 것 같습니다.

하지만 컴퓨터에 대한 컨셉에 대해서 이해를 하지 못하는 상태에서는 다른 과목에 비해서 개념에 대한 이해 및 구체화가 잘 되지 않아 언젠간  분명 막히게 되고 쉽게 포기하게 되는 것 같습니다.



우리가 고등수학에서 기하와 벡터를 배운다고 생각해봅시다. 기하학은 공간과 도형의 성질을 다루는 수학의 한 분야이기에 기하와 벡터를 배우기 위해서는 기본적인 대수학 기초 개념(방정식, 함수, 지수 및 로그 등)을  바탕으로 삼각함수, 미적분학, 행렬 등에 대한 중학~고등학교 저학년 수학에 대한 기본 개념이 필수입니다. 다행히도 우리가 기하와 벡터 진도를 나갈때에는 대부분 이러한 기본 지식은 중학생~ 고1에 배우고 진행되기 때문에 이를 바탕으로 우리가 새로운 지식인 기하학을 배울 때 조금 더 이해하기 쉽고 추상화가 가능해지는 것입니다.


하지만 코딩을 배우는데 컴퓨터 과학에 대한 아무런 지식이 없이 언어를 바로 배우게 된다면 마치 최소한 대수학 기초에 대해서 이해하지 못한 상태에서 기하학을 배우는 것과 비슷한 느낌이라고 생각합니다.



비전공자가 컴퓨터 과학 기초를 쌓기 위해서는 어떠한 지식이 필요한지에 대해 간결하게 작성하고, 모든 내용이 매우 잘 정리된 강의도 추천해보고자 합니다. (그리고 컴퓨터 과학 학문에 아에 처음이라면, 컴퓨터가 무엇이고, 컴퓨터가 어떤 일을 하는지, 원초적인 개념부터 유투브에서 확인해 보시는 것을 추천합니다. 또한 Coding Concepts for Kids 와 같이 아이들도 이해하기 쉽게 설명된 프로그래밍 컨셉 컨텐츠를 보고 최대한 몸에 체화하는 것을 강추합니다. )



프로그래밍 개념: 변수, 데이터 유형, 제어 구조, 함수 및 객체 지향 프로그래밍과 같은 프로그래밍 개념을 이해하는 것이 매우 유용합니다. (필수)            

알고리즘 및 데이터 구조: 효율적이고 효과적인 코드 작성을 위해 알고리즘 및 데이터 구조에 대한 이해가 필수적입니다. (필수)            

수학: 수학 지식은 종류에 따라서는 대수학, 기하학, 통계학 등의 수학 지식이 필요할 수 있습니다. (선택- 머신러닝, 빅데이터 분석 쪽으로 갈 때 필요)            

논리 및 문제 해결: 프로그래밍에는 많은 문제 해결이 필요하므로 논리적 사고와 문제 해결 능력이 좋아야 합니다.            

운영 체제: 파일 시스템, 메모리 관리 및 네트워킹과 같은 운영 체제의 작동 방식을 이해하는 것이 도움이 될 수 있습니다.            

데이터베이스: 데이터베이스를 사용하려는 경우, SQL 및 데이터베이스 디자인에 대해 배워야 합니다.            

 버전 관리: Git과 같은 버전 관리 시스템을 사용하는 방법을 알고 있는 것은 코드 변경을 관리하고 다른 사람들과 협업하는 데 중요합니다.            

소프트웨어 개발 라이프 사이클: 계획, 개발, 테스트 및 배포와 같은 소프트웨어 개발 라이프 사이클의 다양한 단계를 이해하는 것은 더 나은 코드 작성 및 팀과의 효과적인 협업에 도움이 됩니다.





일단 당장 언어를 배우기 전에 익혀야 할 지식은 프로그래밍의 개념과 알고리즘에 대한 기초적인 이해라고 생각합니다.




프로그래밍이란 무엇인가요?


☞ 참고로 컴퓨터를 매우 매우 멍청하면서도 자신만의 외계어(기계어)를 하는 친구라고 생각하면 조금 더 이해하기 편합니다.



컴퓨터 = 아주 멍청하면서 자기만의 외계어를 구사하는 많이 모자란 친구지만, 체력은 무지 좋아서 지치지 않고 일을 수행함

우리는 이런 멍청한 친구한테 '프로그래밍'을 통해 명령을 하여 일을 시켜야함.




프로그래밍은 컴퓨터에게 일을 시키기 위해 명령어를 만들어 내는 것입니다. 예를 들어, 우리가 컴퓨터에게 "안녕하세요"라고 말하면 이를 이해할 수 없지만, "print('안녕하세요')"라는 명령어를 프로그래밍하여 컴퓨터에게 이를 전달하면, 컴퓨터는 화면에 "안녕하세요"라는 글씨를 출력합니다.


프로그래밍은 일종의 언어로서, 우리가 일상적으로 사용하는 언어와는 다소 차이가 있습니다. 프로그래밍을 배우면, 우리는 컴퓨터와 소통할 수 있는 능력을 갖게 되고, 이를 통해 다양한 프로그램을 만들어 내거나 문제를 해결할 수 있습니다.


예를 들어, 우리가 컴퓨터에게 '물을 끓여주세요'라고 말한다면, 이를 프로그래밍의 언어로 번역하면 'boilWater()'라는 명령어가 될 수 있습니다. 이렇게 명령어를 만들고 실행함으로써, 우리는 컴퓨터에게 다양한 일을 시킬 수 있습니다.





자신만의 외계어를 쓰는 아주 멍청한 친구에게 '빵 한장을 굽는 일'을 시킨다고 생각합시다.




              단순히 "빵을 후라이팬에 맛있게 구워줘~" 라고 명령하면 전혀 이해하지 못하고 오류가 납니다. 일단 빵을 몇개를 구워야하는지, 어떤 후라이팬을 써야하는지, 얼마나 구워야하는지와 같은 명령을 하나하나 정해주지도 않았고, 그 멍청한 친구가 쓰는 외계어로 번역하지도 않았으니까요.            


              대신, 명령 : 식빵 하나를 꺼낸다 > A브랜드 후라이팬을 찬장에서 꺼낸다 > 후라이팬 위에 식빵의 오른쪽 단면을 올린다 > 가스 불을 켠다 > 불을 "3으로 올린다" > 2분간 구워준다 > 접시에 올린다. 라고 정확히 명령을 정의하고 인간어를 외계어로 번역해주는 번역프로그램을 써서 전달해 주어야 합니다.            





자, 이제 우리는 어떻게 명령을 쉽게 할 지 생각하고 (알고리즘) (빵이 먼전지, 후라이팬이 먼전지.. 등), 이를 어떤 올바른 번역 프로그램을 써서 (파이썬, 자바스크립트, C등..프로그래밍 언어) 올바른 언어 문법에 맞춰 전달해야 하는 방법을 익혀야 합니다.


어떤 언어던지간에 시작하기 전 익혀야 할 중요한 개념이 있는데요, (마치 영어 문법에서 주어/동사/목적어, 형식 등을 큰 개념으로 배우는 것 처럼)

그것은 변수, 루프, 함수, 조건문 등 아래에서 소개해 드릴 내용입니다.

어떤 언어를 배우든 반드시 체화해야 할 개념입니다.






프로그래밍에서의 중요한 개념



변수(Variables)


컴퓨터 과학에서 변수는 값을 저장하는 장소라고 생각할 수 있어요. 변수는 일종의 상자와도 비슷합니다. 예를 들어, 당신이 수학 문제를 풀고 있을 때, "x"라는 변수를 사용할 수 있어요. 그리고 "x"에는 어떤 값이 들어갈 수 있습니다.


예를 들어, "x"가 3이라는 값을 가지고 있다면, "x+2"는 5가 되겠죠. 하지만 "x"가 5라는 값을 가지고 있다면, "x+2"는 7이 됩니다. 그래서 변수는 값이 얼마든지 바뀔 수 있는, 유동적인 개념이에요.


컴퓨터에서도 마찬가지입니다. 변수를 사용하여 값을 저장하고, 그 값을 나중에 다시 사용할 수 있어요. 이것은 프로그래밍에서 매우 중요한 개념이며, 변수는 프로그램에서 다양한 용도로 사용됩니다.



변수를 선언하는 방법은 언어마다 다르지만, 자바스크립트에서는 var, let, const로 선언하고 변수를 지정합니다.



var this = "노트";



프로그래밍에서 변수의 종류


변수의 종류는 여러 가지가 있습니다. 그 중에서도 일반적으로 사용되는 변수의 종류는 다음과 같습니다. 일단은 정수형,실수형,문자열,부울형,배열 변수 정도만 익히고 넘어가시면 됩니다.



              정수형 변수 (integer): 정수를 저장하는 변수로, 예를 들어 1, 2, 3과 같은 값이 저장됩니다.            

              실수형 변수 (float 또는 double): 실수를 저장하는 변수로, 예를 들어 3.14나 2.718과 같은 값이 저장됩니다.            

              문자열 변수 (string): 문자열을 저장하는 변수로, 예를 들어 "Hello, world!"와 같은 문자열이 저장됩니다.            

              부울형 변수 (boolean): 참(True)과 거짓(False)을 저장하는 변수로, 조건문에서 자주 사용됩니다.            

              문자 변수 (char): 문자를 저장하는 변수로, 예를 들어 'A'나 'B'와 같은 문자가 저장됩니다.            

              배열 변수 (array): 동일한 데이터 타입의 여러 값을 저장하는 변수로, 예를 들어 정수형 배열은 여러 개의 정수를 저장합니다.            

              구조체 변수 (struct): 여러 개의 변수를 하나의 변수로 묶어서 저장하는 변수로, C와 C++ 등의 언어에서 사용됩니다.            

              열거형 변수 (enum): 몇 가지 상수 값을 정의하고, 이를 변수로 사용하는 변수로, C와 C++ 등의 언어에서 사용됩니다.            

              포인터 변수 (pointer): 메모리 주소를 저장하는 변수로, C와 C++ 등의 언어에서 사용됩니다.            




위와 같은 변수의 종류는 프로그래밍에서 매우 중요한 개념이며, 각 변수의 특성에 맞게 적절하게 사용함으로써 효율적인 프로그램을 작성할 수 있습니다.




조건문(Conditional Statement)











'Conditional statement'은 조건문이라고도 불리며, 프로그래밍에서 조건에 따라 실행할 코드를 선택하는 제어 구조입니다. 조건문은 일상생활에서도 자주 사용되는 것으로 예를 들어, "만약 비가 오면 우산을 가지고 나가라"와 같은 상황이 조건문을 사용한 것입니다.


프로그래밍에서도 조건문을 사용하여 프로그램이 특정 조건에 따라 실행할 코드를 선택하게 할 수 있습니다. 예를 들어, 만약 게임에서 사용자의 점수가 80점 이상이라면 "축하합니다! 다음 레벨로 넘어가세요!"와 같은 메시지를 출력하도록 할 수 있습니다.


조건문은 일반적으로 if-else 구문을 사용합니다. if 구문은 주어진 조건이 참(true)일 때 실행되는 코드를 지정하고, else 구문은 조건이 거짓(false)일 때 실행되는 코드를 지정합니다. 예를 들어, 만약 학생의 점수가 90점 이상이라면 "A학점입니다!"를 출력하고, 그렇지 않으면 "B학점 입니다!"를 출력합니다.



조건문을 사용하는 이유는 다음과 같습니다.


              프로그램의 유연성 : 조건문을 사용하면 프로그램이 다양한 상황에 대응할 수 있습니다. 예를 들어, 프로그램에서 사용자 입력에 따라 다른 동작을 수행해야 하는 경우 조건문을 사용하여 사용자 입력에 따라 프로그램의 동작을 변경할 수 있습니다.            


              코드의 간결성 : 조건문을 사용하면 프로그램의 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다. 예를 들어, 조건문을 사용하면 반복적인 코드를 줄일 수 있습니다.            







배열(Array)



배열(Array)은 프로그래밍에서 여러 개의 값을 하나의 변수에 저장하는 데이터 구조입니다. 예를 들어, 여러 개의 숫자를 프로그램에서 다루어야 할 때 배열을 사용할 수 있습니다.


쉬운 예로, 5개의 숫자를 계산하고 싶다고 가정해봅시다. 이때 변수를 5개 만들어서 각각의 숫자를 저장할 수도 있지만, 배열을 사용하면 하나의 변수에 5개의 숫자를 저장할 수 있습니다.



아래는 배열을 사용한 예시입니다. (자바스크립트)



// 숫자 배열 

const numbers = [1, 2, 3, 4, 5]; 

// 문자열 배열 

const fruits = ['apple', 'banana', 'orange']; 

// 혼합된 타입의 배열 

const mixed = [1, 'apple', true, undefined, null]; 

// 빈 배열 

const emptyArray = []; 





배열에는 인덱스(index)라는 개념이 있습니다. 인덱스는 배열 내부의 요소(element)를 가리키는 번호로, 0부터 시작합니다. 예를 들어, 위의 numbers 배열에서 첫 번째 요소는 numbers[0]이며, 두 번째 요소는 numbers[1]입니다. 이렇게 인덱스를 사용하여 배열의 요소에 접근할 수 있습니다.




(추가 : 자바스크립트에서 객체 object 란?)

자바스크립트에서 Object(객체)는 이름과 값을 쌍으로 가지고 있는 데이터 구조입니다. 예를 들어, 학생에 대한 정보를 담을 수 있는 객체를 생각해보면, 객체의 이름은 학생의 이름이고, 값은 학생의 성적, 출석 일수, 생년월일 등의 정보를 가질 수 있습니다. 객체는 다른 자료형과 달리 순서가 없고, 이름과 값을 쌍으로 가지고 있기 때문에 이름을 사용해서 원하는 데이터를 찾아낼 수 있습니다. 객체는 여러 개의 속성(property)을 가지고 있을 수 있으며, 각 속성은 이름과 값으로 이루어져 있습니다.



객체를 좀 더 쉽게 이해하기 쉽게 설명하겠습니다.


객체는 집과 비슷합니다. 집에는 여러 가지 물건이 있을 수 있고, 각각의 물건은 이름이 있습니다. 예를 들어, 부엌에는 식기류와 조리도구가 있고, 각각은 이름이 있습니다. 마찬가지로, 객체에서는 속성들이 물건들과 비슷하게 이름을 가지고 있고, 객체에서 속성을 찾을 수 (집이라는 객체 안에 냄비, 냉장고와 같은 속성이 있는 것 처럼)



자바스크립트에서 객체는 다양한 형태로 사용됩니다. 예를 들어, 함수도 객체로 간주됩니다. 함수는 이름을 가지고 있고, 함수 내에서는 다양한 작업을 수행할 수 있는 속성들을 가지고 있습니다. 또한, 객체는 다른 객체의 속성으로 포함될 수도 있습니다. 이러한 객체들은 서로 연관되어 있기 때문에, 객체지향 프로그래밍에서 자주 사용됩니다.


요약하자면, 자바스크립트에서 객체는 이름과 값을 쌍으로 가지고 있는 데이터 구조이며, 객체는 다양한 형태로 사용됩니다. 객체는 이름과 값을 쌍으로 가지고 있기 때문에, 이름을 사용하여 데이터를 찾아낼 수 있습니다.


// 객체 배열 

const people = [

   { name: 'Alice', age: 20 },

   { name: 'Bob', age: 25 },

   { name: 'Charlie', age: 30 },

 ];








Loops (루프)


루프(loop)란, 컴퓨터 프로그램에서 반복적인 작업을 할 수 있도록 하는 구문입니다. 예를 들어, "1부터 10까지의 숫자를 출력하라"라는 프로그램을 작성할 때, 루프를 사용하여 1부터 10까지의 숫자를 한 번에 출력할 수 있습니다.

루프의 가장 기본적인 종류는 for 루프와 while 루프입니다. 이 중에서 for 루프는 주로 정해진 횟수만큼 반복할 때 사용하고, while 루프는 조건이 참인 동안 반복할 때 사용합니다.


예시로, "구구단 2단을 출력하라"는 프로그램을 파이썬으로 작성한다고 가정해봅시다. 이 때, for 루프를 사용하여 2단을 1부터 9까지 출력할 수 있습니다. 코드는 다음과 같습니다.


for i in range(1, 10):     

print("2 x", i, "=", 2*i) 


이 코드는 i가 1부터 9까지 변화하면서 "2 x i = 2*i"를 출력합니다. 결과적으로 2단의 구구단을 출력하게 됩니다.



자바스크립트에서 가장 기본적인 루프 구문은 for와 while입니다.

for 루프는 일정한 횟수만큼 반복할 때 사용합니다. 일반적으로 배열이나 리스트와 같은 자료구조의 요소들에 대해 반복 작업을 수행할 때 많이 사용됩니다. for 루프의 공식은 다음과 같습니다.


for (초기화식; 조건식; 증감식) {   

// 실행할 코드 } 


              초기화식: 루프 시작 전에 한 번만 실행되며, 반복에 사용할 변수를 초기화합니다.            

              조건식: 매 반복마다 검사되며, 조건식이 참일 경우 루프가 계속 실행됩니다.            

              증감식: 매 반복이 끝난 후 실행되며, 반복에 사용하는 변수를 증가 또는 감소시킵니다.            


for (let i = 1; i <= 10; i++) {   

console.log(i);

 } 

예시로 1부터 10까지의 숫자를 출력하는 코드를 작성해보겠습니다. 위 코드에서 let i = 1은 반복에 사용할 변수를 초기화 (변수를 초기화한다는 것은 그 변수에 처음으로 값을 넣는 것을 의미합니다. 변수란 값이 저장될 수 있는 장소이며, 초기화는 이 변수에 값을 할당하는 것입니다. 따라서, 변수를 초기화한다는 것은 해당 변수에 처음으로 값을 할당하는 것이라고 생각하시면 됩니다.) 하는 부분입니다. i <= 10은 반복을 계속할 조건을 나타내며, 조건이 참일 경우 루프가 계속 실행됩니다. i++는 반복이 한 번 실행된 후에 변수 i를 1씩 증가시키는 부분입니다.


console.log(i)는 매 반복마다 변수 i의 값을 출력합니다. 결과적으로 위 코드는 1부터 10까지의 숫자를 한 줄씩 출력합니다.


while 루프는 조건식이 참일 경우 계속 반복됩니다. 일반적으로 while 루프는 반복 횟수가 불명확할 때 사용됩니다. while 루프의 공식은 다음과 같습니다.


while (조건식) {

   // 실행할 코드

 } 



              조건식: 매 반복마다 검사되며, 조건식이 참일 경우 루프가 계속 실행됩니다.            

두 루프 모두 break 문을 사용하여 루프를 중지시킬 수 있고, continue 문을 사용하여 현재 반복을 중지하고 다음 반복을 시작할 수 있습니다.


let i = 1; 

while (i <= 10) {

   console.log(i);

   i++;

 } 


예시로 1부터 10까지의 숫자를 출력하는 코드를 작성해보겠습니다. 위 코드에서 let i = 1은 반복에 사용할 변수를 초기화하는 부분입니다. i <= 10은 반복을 계속할 조건을 나타내며, 조건이 참일 경우 루프가 계속 실행됩니다. console.log(i)는 매 반복마다 변수 i의 값을 출력합니다. i++는 반복이 한 번 실행된 후에 변수 i를 1씩 증가시키는 부분입니다.



while 루프는 for 루프와 다르게 초기화 부분과 증감 부분을 루프 안에 작성하지 않고, 루프 이전에 따로 작성합니다. 그리고 반복을 계속할 조건만 작성하면 됩니다. 따라서, while 루프는 루프 조건이 참일 경우에 계속 반복되는 것입니다.





※ 아직도 while과 for의 차이가 이해가 안되시나요?


while 루프와 for 루프는 모두 자바스크립트에서 반복문을 만드는 방법입니다. 그러나 두 루프는 사용하는 방법이 조금 다릅니다.

일반적으로 for문은 반복을 특정 횟수만큼 수행해야할 때 사용되며, while문은 반복을 조건이 참일 때 계속 수행해야할 때 사용됩니다.

while 루프는 반복을 계속할 조건만 작성하면 되기 때문에 반복 횟수를 정확히 예측하기 어렵습니다. 예를 들어, 아래 코드는 무한 루프에 빠질 수 있습니다.


while (true) {

   console.log("무한루프");

 } 



반면에 for 루프는 초기화, 조건, 증감 부분을 모두 한 줄에 작성하기 때문에 반복 횟수를 더 쉽게 예측할 수 있습니다. 또한, for 루프에서는 반복 횟수를 정확히 지정할 수 있기 때문에 코드를 더욱 간결하게 작성할 수 있습니다.


for (let i = 0; i < 10; i++) {

   console.log(i);

 } 



이 반복문은 변수 i를 0으로 초기화하고, i가 10보다 작을 때까지 반복하며, 반복할 때마다 i의 값을 1씩 증가시킵니다. 각 반복에서 console.log(i)를 호출하여 i의 값을 콘솔에 출력합니다.



그러면 왜 while을 쓰는건가요?


for문은 초기화, 조건, 증감식 등을 한 줄에 표현하여 코드가 간결하고 읽기 쉬운 장점이 있습니다. 반면에, while문은 특정 조건이 참인 동안 계속 반복하기 때문에 조건식의 평가 결과에 따라 실행 횟수가 제한되지 않는 유연한 장점이 있습니다.


따라서, 어떤 상황에서는 for문이 더 적합하고 어떤 상황에서는 while문이 더 적합한지는 상황에 따라 다릅니다. 예를 들어, 반복 횟수가 정해져 있고 범위가 작을 때는 for문을, 반복 횟수가 정해져 있지 않거나 반복 범위가 큰 경우에는 while문을 사용하는 것이 좋습니다.




함수 (Function)


프로그래밍에 있어 함수는 매우매우매우 중요한 개념입니다. 함수를 이해하기 위해서는 아주 기본적인 몇가지 용어를 확실히 이해하고 가야합니다.



✔️ 함수(function) : 함수는 컴퓨터 프로그래밍에서, 어떤 작업을 수행하기 위해 미리 정의된 일련의 명령문을 모아 놓은 블록(block)입니다.

함수는 필요한 때에 호출하여 사용할 수 있습니다. 예를 들어, "안녕하세요"라는 말을 10번 반복하고 싶다면, "안녕하세요"를 10번 써서 코드를 작성할 수도 있지만, 이것은 비효율적입니다. 대신에 "안녕하세요"를 출력하는 함수를 만들어서, 이 함수를 10번 호출하면 더 간단하게 구현할 수 있습니다.


function sayHello() {

   console.log("안녕하세요!");

 } 

(함수 정의)


sayHello(); // "안녕하세요!"가 출력됩니다. 

(함수 호출)


✔️ 인수(argument) : 인수(argument)는 함수에 전달되는 값입니다. 함수는 입력(인수)을 받아 처리하고 결과를 반환합니다. 예를 들어, 함수는 숫자, 문자열, 불리언 등과 같은 값을 인수로 받아 이 값에 대한 계산을 수행하거나 처리합니다.


function add(a, b) {

   return a + b;

 } 


다음 함수는 두 수를 더하는(add) 함수입니다. 이 예시에서 a와 b는 함수 add의 인수(argument)입니다. 이 함수는 두 개의 인수(a와 b)를 받아서, 이 둘을 더한 값을 반환합니다.


✔️ 반환 값(return value) : 반환 값(return value)은 컴퓨터 프로그램에서 어떤 함수(function)이 실행된 후, 그 함수가 계산한 결과값을 의미합니다.예를 들어, 우리가 계산기 앱에서 숫자를 더하는 함수를 실행할 때, 그 함수는 두 숫자를 더한 결과를 계산하게 됩니다. 이때, 그 결과값이 바로 함수의 반환 값이 되는 것입니다.


간단히 말해서, 반환 값은 함수가 실행된 후에 얻을 수 있는 결과물을 의미합니다. 함수를 사용하는 사람은 이 반환 값으로 계산 결과를 알 수 있고, 이를 다른 목적으로 활용할 수 있습니다.



쉽게 설명하면 함수는 요리를 하는 것과 비슷합니다. 요리를 하려면 요리 재료가 필요하듯, 함수도 인수가 필요합니다. 예를 들어, 먹고 싶은 음식이 있다면, 요리사에게 그 음식을 주문하듯 함수에도 필요한 값인 인수를 전달해야 합니다. 함수는 이 값을 받아서 처리한 후, 그 결과인 반환 값을 돌려주는 것입니다.




네 가지 함수 유형



1. 인수와 반환 값이 없는 함수


이 유형의 함수는 인수를 받지 않으며 값을 반환하지 않습니다. 일반적으로 호출될 때 코드 블록을 실행하는 데 사용됩니다. 예를 들어:

function sayHello() {   console.log("안녕하세요!"); } 

sayHello()로 이 함수를 호출하면 콘솔에 "안녕하세요!"가 출력됩니다.



2. 인수는 있지만 반환 값이 없는 함수


이 유형의 함수는 하나 이상의 인수를 받지만 값을 반환하지 않습니다. 전달된 인수에 기반하여 작업을 수행하는 데 사용됩니다. 예를 들어:

function multiply(num1, num2) {   console.log(num1 * num2); } 

multiply(2, 3)으로 이 함수를 호출하면 6이 콘솔에 출력됩니다.



3. 인수는 없지만 반환 값이 있는 함수


이 유형의 함수는 인수를 받지 않지만 값을 반환(return)합니다. 계산을 수행하거나 코드의 다른 위치에서 사용할 수 있는 값을 생성하는 데 사용됩니다. 예를 들어:

function getRandomNumber() {   return Math.floor(Math.random() * 10); } 

getRandomNumber()로 이 함수를 호출하면 0과 9 사이의 임의의 정수를 반환합니다.



4. 인수와 반환 값이 있는 함수


이 유형의 함수는 하나 이상의 인수를 받고 값을 반환(return)합니다. 전달된 인수에 기반하여 계산을 수행하거나 값을 생성하는 데 사용됩니다. 예를 들어:

function sum(num1, num2) {   return num1 + num2; } 

sum(2, 3)으로 이 함수를 호출하면 5가 반환됩니다.



함수를 만드는 목적에 따라, 인수와 변환값의 존재를 생각하고 작성해야합니다.






라이브러리란?


일반적으로 사용하는 함수를 일일히 작성할 필요가 없이 라이브러리를 import해서 미리 만들어진 함수를 사용할 수 있습니다


즉, 라이브러리는 프로그램을 개발할 때 필요한 기능들을 이미 만들어 놓은 코드들을 모아놓은 것이라고 할 수 있습니다. 이러한 라이브러리는 다른 프로그래머들이 만들어 놓은 것을 사용할 수도 있고, 직접 만들어서 사용할 수도 있습니다.



라이브러리를 사용하면 프로그램을 만들 때 매번 모든 코드를 처음부터 작성하는 것이 아니라, 이미 만들어진 코드를 활용하여 빠르게 개발할 수 있습니다. 라이브러리는 일반적으로 코드의 재사용성을 높이고, 코드의 품질과 안정성을 보장해주기도 합니다.



또한 라이브러리는 언어나 개발환경에 따라 여러 종류가 있습니다. 예를 들어, Python 언어를 사용하는 경우에는 NumPy, Pandas, Matplotlib 등과 같은 라이브러리들이 있고, 웹 개발을 할 때는 jQuery, React, Vue.js와 같은 라이브러리들이 있습니다. 이러한 라이브러리들은 개발자들이 필요로 하는 다양한 기능들을 제공하며, 개발자들이 더욱 효율적으로 프로그래밍을 할 수 있도록 도와줍니다.







알고리즘









알고리즘은 프로그래밍에서 문제를 해결하는 과정을 단계별로 기술한 일련의 절차나 규칙의 집합입니다. 즉, 입력으로 주어지는 데이터를 출력으로 변환하는 문제를 해결하기 위한 절차를 설계하는 것이라고 할 수 있습니다.


알고리즘은 프로그래밍에서 매우 중요한 역할을 합니다. 올바른 알고리즘을 선택하면, 문제를 더 효율적으로 해결할 수 있고, 더 적은 시간과 리소스를 사용할 수 있습니다. 반면에, 잘못된 알고리즘을 선택하면, 문제를 풀기 위해 많은 시간과 리소스를 낭비할 수 있습니다.


알고리즘은 대개 순서도, 유사코드, 의사코드 또는 실제 프로그래밍 언어로 기술됩니다. 순서도는 흐름도를 통해 단계적으로 그림으로 표시하며, 유사코드나 의사코드는 자연어나 구조화된 프로그래밍 언어를 사용해 설명합니다. 프로그래밍 언어로 직접 작성한 코드는 컴퓨터가 이해할 수 있는 기계어로 변환되어 실행됩니다.



일상속에서의 알고리즘을 말씀드리자면, 집에서 학원가기, 샌드위치만들기 등 어떠한 문제를 해결하기 위한 일련의 과정을 일컫는다고 할 수 있습니다.


어느정도 프로그래밍 언어의 문법을 정복했다면, 그 다음은 문제를 효과적으로 해결하는 "알고리즘"에 대해서 공부하는 것이 좋습니다.






의사코드 (pseudocode)



사실 코딩을 배울 때 문법이 강조되지만, 기본적인 문법을 충분히 익힌 뒤에는 바로 프로그램이 실행되는 논리적 흐름을 짜는 방법을 익히는 것이라고 생각합니다. 이를 위해서는 종이나 메모장에 내가 짤 프로그램의 코드의 흐름을 보기 쉽게 나열하는 과정이 필요합니다.  이때 바로 의사 코드(슈도 코드)의 필요성이 나타납니다.


의사코드는 프로그래밍 언어가 아니라, 프로그램의 동작 방식을 설명하기 위해 사용되는 자연어에 가까운 언어입니다. 즉, 의사코드는 알고리즘의 작성 과정에서 사용되며, 컴퓨터가 이해할 수 있는 명령어가 아니라, 프로그래머가 이해하기 쉬운 자연어로 작성됩니다.


(즉 어떠한 알고리즘을 만들때 어떻게 시작해야 하는지, 도표로 쉽게 작성하고 그린다고 생각하면 편합니다.)


의사코드는 일반적으로 아래와 같은 형식이 될 수도 있습니다.



알고리즘 이름 

1. 변수 초기화 

2. 입력 받기 

3. 반복문 시작 

4. 조건 검사 

5. 조건이 참이면 실행할 명령어

6. 반복문 끝 

7. 출력하기 

8. 끝 




위의 의사코드는 일반적인 구조를 보여줍니다. 알고리즘의 이름을 지정하고, 변수 초기화 후 입력을 받고, 반복문을 시작하며, 조건 검사 후 실행할 명령어를 실행하고, 반복문이 끝난 후 출력하고, 마지막으로 끝을 나타내는 부분입니다.


의사코드는 프로그래밍 언어에 비해 문법이 자유롭기 때문에, 개발자가 알고리즘을 빠르게 작성하고 수정할 수 있습니다. 또한, 다른 사람들과 의사소통하기에도 용이합니다. 그러나, 의사코드는 구체적인 프로그래밍 언어와 달리 명확하게 정의된 문법이 없기 때문에, 다른 사람이 작성한 의사코드를 이해하기 어려울 수 있습니다. 따라서, 가능하면 구체적인 프로그래밍 언어로 작성된 코드와 함께 사용하는 것이 좋습니다.









(의사 코드 예시 : 출처 )





◆ 함께 보면 좋은 강의


1. 프로그래밍, 컴퓨터 과학 기초


2.알고리즘 및 데이터 구조






작가의 이전글 IT 프로젝트를 수행하는 PM 업무 & 산출물 정리
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari