본문 바로가기
Computer Science/컴퓨터공학(김용담 강사님)

기본 프로그래밍 개념: 언어, 변수, 자료형, 연산자, 제어구조, 함수, 모듈

by 코듀킹 2023. 4. 5.

목차: 기본 프로그래밍 개념(Basic Programming Concepts)

1. 프로그래밍 언어(Programming Language)
2. 변수(Variables)
3. 자료형(Data Types)
4. 연산자(Operators)
5. 제어구조(Control structures)
6. 함수(Funtions)
7. 모듈(Modules)

기본 프로그래밍 개념

1. 프로그래밍 언어(Programming Language)

한국어, 영어같은 '언어'를 통해 우리는 서로 소통할 수 있습니다. 사람이 쓰는 언어를 '자연어(Natural Language)'라고 하죠. 그렇다면 컴퓨터와 사람이 소통하기 위한 언어는 무엇일까요? 바로 '프로그래밍 언어(Programming Language)'입니다. 프로그래밍 언어도 자연어처럼 문법(syntax)의미론(semantics)을 가져야하죠. 프로그래밍 언어만의 특징이 몇가지 있는데, 소개해보겠습니다.


1) 사람이 목적을 가지고 언어 체계를 만든다.

2) 언어를 번역하는 프로그램 종류에 의해 기계어(Machine Instruction)으로 번역된다. 이 때 어떤 프로그램 계열을 사용하느냐에 따라 컴파일러(Complier) 기반 언어인터프리터(Interpreter) 기반 언어로 크게 구분된다.

3) 언어가 가지는 패러다임이 있다. 절차 지향 프로그래밍(Procedure-base Programming), 객체 지향 프로그래밍(Object-Oriented Programming, 함수형 프로그래밍(Funtional Programming) 등이 있으며, 하나의 언어가 여러 패터다임을 채택할 수 있다.

4) 컴퓨터가 이해하기 좋은 Low-level 언어(ex. 어셈블리, C언어)와 사람이 이해하기 편한 High-level 언어(ex. Python, Java, JavaScript, Gp, Swift 등)로 크게 구분된다.

 

 

2. 변수(Variables)

컴퓨터에는 데이터를 저장할 수 있는 메모리가 있습니다. 이 메모리는 마치 호텔처럼 방을 만들 수 있습니다. 그 방 안에는 여러 손님이 왔다갔다 할 수 있겠죠? 컴퓨터의 메모리에서의 호텔 방은 '변수'를 의미하고, 손님은 '값'을 의미합니다. 즉, 변수라는 공간 안에 값이 들어갈 수 있고, 이 때 값은 계속 변할 수 있다는 것이죠. 각 프로그래밍 언어마다 변수를 정의하는 방식이 정해져있습니다.

 

변수는 코드에 의해 쓰여지는 것을 선언(delaration)되었다고 말합니다. 선언된 변수는 코드가 컴파일*되거나 실행되면 메모리 상에 올라가게 됩니다. 즉, 선언된 하나의 변수를 실행하면, 호텔방이 하나 만들어지는 것이죠. 

*컴파일: 통역사가 영어를 한국어로 통역해주는 것처럼, 우리가 작성한 프로그래밍언어는 '컴파일러'라는 통역사가 컴퓨터가 이해할 수 있는 숫자로 이루어진 언어로 변환시켜줍니다. 이 작업을 '컴파일'이라고 합니다.

 

각 변수들은 프로그래밍 언어에 의해서 정의된 여러 자료형(Data Type)에 따라 값을 저장하는 방식이 다릅니다. 자료형은 다음 파트에서 설명드리겠습니다. 

 

 

3. 자료형(Data Types)

위에서 호텔방을 예시로 변수를 설명드렸습니다. 호텔방이라는 공간에는 사람이 들어올 수도 있고, 물건이 들어올 수도 있고, 동물이 들어올 수도 있겠죠? 변수도 마찬가지로 숫자가 들어올 수도 있고, 문자가 들어올 수도 있고, 또는 문장이 들어올 수도 있습니다. 이를 자료형(Data Types)이라고 합니다. 프로그래밍 언어마다 정의하는 자료형이 조금씩 다르지만, 일반적으로 대부분의 프로그래밍 언어가 채택하고 있는 자료형을 알아보겠습니다.

 

1) Integer(int): 정수를 나타냅니다. 양수, 음수 모두를 표현하며 언어마다 숫자의 표현 범위가 정해져있습니다. 

2) Floating-Point(float, double): 소수를 나타냅니다. 여기서 소수는 실수를 나타내기 위한 개념입니다. 컴퓨터는 무한소수를 표현하지 못하여 근사치로 나타냅니다. 정확한 수치를 나타내지 않아도 될때는 float(single precisiton)을 많이 쓰고, 좀 더 정확한 수치를 나타내야할 때는 double(double precision)을 사용합니다.

3) Character(char): 글자 하나를 나타냅니다. 유니코드(UTF-8) 기준으로는 전세계 대부분 언어를 지원하여 한글도 한 글자를 3B의 숫자로 표현할 수 있습니다.

4) Boolean(bool): True / False를 나타내며, 1B로 표현합니다.(1bit도 충분하긴 합니다.)

5) List: 여러개의 원소(숫자, 문자 등)를 포함할 수 있는 자료형입니다. 중간에 숫자를 빼고, 넣고를 쉽게 할 수 있는 특성으로 인해 편하게 여러 개의 데이터를 하나의 변수로 다룰 때 사용합니다.

6) Dictionary(dict, map): key - value의 조합으로 데이터를 저장하는 구조입니다. 데이터를 효율적으로 저장하기 위한 구조 입니다. List처럼 중간에 숫자를 넣고, 빼고 하는 작업은 불가능합니다. 

 

 

4. 연산자(Operators)

연산자(Operators)는 주어진 변수에 대해서 더하기, 빼기 같은 연산을 처리할 수 있는 기능을 뜻합니다. 주로 선언된 변수의 자료형에 따라, 수행이 가능한 연산자와 수행이 불가능한 연산자가 정해집니다. 예를들어 'a'라는 문자 자료형과 1이라는 숫자 자료형을 더하면 오류가 뜨게 되죠. 따라서 문법을 잘 익히는 것이 중요합니다. 다음은 대표적인 연산자입니다. 

 

1) Arithmetic Operarot: 사칙연산과 같은 산술연산자를 의미합니다. +(더하기), -(빼기), x(곱셈), /(나누기), %(나머지) 등이 있습니다.

2) Comparison Operator: 두 개의 변수 사이의 크기 관계를 결정하는 비교연산자를 의미합니다. ==(같음), !=(다름), <=(같거나 작음), >=(같거나 큼), <(작음), >(큼)이 있습니다.

3) Logical Operator: 어떤 두 개의 표현식의 논리 관계를 결정하는 논리연산자를 의미합니다. AND, OR, NOT이 있습니다.

4) Assignment Operator: 변수에 값을 할당하는 할당연산자를 의미합니다. 현대 프로그래밍 언어에서는 대부분 =로 사용됩니다. 

 

 

5. 제어구조(Control structures)

제어구조는 프로그램을 구현할 때 로직을 설계하기 위해서 사용하는 표현식입니다. 예를 들어 우리가 해적이고, 보물섬이 표시되어있는  보물지도를 가지고 있다고 가정해보겠습니다. 화살표를 따라 순차적으로 바다를 항해할 수 있고, 만약 가는 길에 괴생명체가 있으면(if 길 == '괴생명체') 오른 쪽 바다로 피해가고, 괴생명체가 없다면(else) 그대로 쭉 가면 된다고 표시할 수 있겠죠. 또한, 소용돌이가 출몰하는 구간에서는 그 소용돌이 멈출 때까지 반복해서(for, while) 소용돌이 주위를 돌다가 가야한다고 표시할 수도 있습니다. 이러한 보물지도처럼 가야하는 길을 한눈에 볼 수 있게 펼쳐져있는 걸 플로우차트(flow chart)라고 하고, 길 하나하나의 조건들을 제어구조라고 합니다.

 

 

왼쪽 플로우차트, 오른쪽 제어구조의 순서도

 

그럼 기본 제어구조 종류를 알아보겠습니다. 

 

1) Sequence structure: 명령문이 나열된 순서대로 하나씩 순차적으로 수행하는 순차적 구조입니다.

2) Decision(=selection) structure: if else문의 조건에 따라 True면 실행, Flase면 비실행같은 순서로 수행하는 선택구조 입니다. 

3) loop(=repetition, iteration) structure: for, while문 등의 조건에 따라 반복하는 반복 구조입니다. 

4) Jump structure: goto, break, continue문의 조건에 따라 프로그램의 흐름을 도중에 건너뛰는 건너뜀 구조입니다.

 

 

6. 함수(Funtions)

프로그래밍에서의 함수(function=procedure, method, subroutine)는 코드의 재사용성을 올리고, 기능 단위 코드를 분리해서 구현할 수 있는 개념입니다. 스타크래프트라는 게임을 예로 들어보겠습니다. 마린, 탱크, 히드라 등등의 많은 유닛들이 있고, 그 유닛들 마다 체력, 공격력, 방어력, 공격패턴, 스킬, 등이 설정되어있죠. '공격을 하면, 체력이 1감소한다.', '방어력이 1증가하면, 공격력 1을 무시한다.' 등과 같은 기능들을 함수로 한 번 지정을 해놓으면, 반복되는 패턴을 계속해서 코드로 구현할 필요가 없어지는 것이죠. 이렇게 코드의 재사용성을 올리고, 코딩을 효율적으로 구현할 수있는 개념입니다. 함수를 잘 사용하게 되면, 깔끔하고 유지보수하기 좋은 좋은 코드를 작성할 수 있습니다. 보통 프로그램 개발에서는 어떤 단위로 기능 구현을 할지 디자인을 하게 되는데, 이 때 기본이 되는 단위가 함수입니다. 그럼 함수에 필요한 기본적인 개념을 소개하고, 실제 파이썬에서는 이를 어떻게 구현하는지 살펴보겠습니다.

 

1) Function Definition: 정의하는 함수의 이름, parameters의 개수와 이름, 함수 내부에 사용할 코드 등을 모두 정의하는 단계.

2) Parameters (or Arguments): 함수 내부에서 사용할 (매개)변수. 함수 외부에서 데이터를 받아오고 내부에서 처리하는 대리인의 역할을 합니다. Parameter를 통해서 함수는 외부와 독립적으로 구현될 수 있습니다.

3) Calling: 정의된 함수를 함수 외부에서 불러와서 사용할 수 있습니다. 

4) Return value: 함수 내부 코드가 모두 실행되면 함수를 호출한 대상에게 결과값을 돌려줍니다. 이 때 어떤 값을 돌려줄지는 함수 내부에서 정의할 수 있습니다.

5) Scope: 함수는 구현의 편의성을 위해서 함수 내부에서 사용한 변수들은 외부와 별개의 독립적인 변수로 관리합니다. 즉, 함수 내에서 '마린'이라는 변수를 지정하고, 함수 외부에서도 똑같이 '마린'이라는 변수를 지정했어도 다른 종류의 '마린'이 되는 것이죠. 함수 내부에 있는 변수들을 지역 변수(local variable)이라고 하며, 이들은 독립적인 변수이기 때문에 함수 외부에서 사용 및 참조가 불가능합니다.

# ex) 파이썬에서의 함수

def name(parameters):  # Function Definition
    statement          # Scope
    ...
    return value       # Return value

 

 

7. 모듈(Modules)

프로그래밍에서 이러한 함수를 확장해서 큰 규모의 프로그램을 유지보수하기 편하게 만들 수 있도록 모듈(Module=library, package)이라는 개념을 지원합니다. 모듈을 간단히 설명드리면, 프로그램을 특정 기능과 함께 묶어서 관리하는 단위를 뜻합니다. 다시 스타그래프트를 예로 들면, 게임을 실행할 때 우리는 직접 맵을 만들지 않아도 원하는 맵을 선택하여 게임을 진행할 수 있죠. 이 때, 이미 누군가가 만들어놓은 맵을 모듈이라고 볼 수 있습니다. 모듈을 사용하면 프로그램을 체계적으로 관리할 수 있고, 여러 명의 개발자가 협업하여 프로그램 개발을 할 때도 전체적인 디자인을 하기가 편합니다. 

 

모듈을 구현하고 관리하기 위해서는 프로그램 개발에 필요한 기능 명세가 자하게 되어있어야 하며, 이를 구현 가능한 단위로 나누고 각 모듈들이 합쳐져서 잘 돌아갈 수 있는 디자인이 필요합니다. 구현하는 단계에서 고민해야하는 개념 4가지를 소개하겠습니다.

 

1) Organization: 어떤 코드들이 함께 구성되어 있어야 하는지를 결정하는 개념입니다. 좋은 코드는 유지보수를 편하게 해줍니다.

2) Reusability: 재사용성을 의미합니다. 좋은 모듈은 여러 프로젝트를 수행할 때 구현해둔 모듈을 그대로 가져와서 편의에 맞게 활용할 수 있습니다. 

3) Namespcae: 명시적인 구분을 의미합니다. 보통 모듈을 구현할 때, 여러 개발자가 참여하기 때문에 코드의 각 영역들을 명시적으로 나눠야합니다. Namespace라는 명시적인 구분을 통해서 해당 코드가 어떤 코드 파일에서 정의되었는지를 알 수 있습니다.

4) Importing: 모듈을 불러와서 모듈의 코드들을 메모리에 load하고 현재 프로그램과 연결하는 작업입니다.

 

파이썬은 특히 굉장히 많은 오픈소스 기반 모듈들이 있습니다.(특히 데이터분석분야 관련) 그래서 확정성이 매우 뛰어나고, 데이터 분석을 할 때 매우 용이한 언어입니다.

댓글