Introduction

프로그래밍 언어

0과 1을 구분하는 기계(Hardware)를 “작동” 시키기 위해서는 어떠한 명령을 내려야 하고, 이러한 행위를 “Programming”이라고 한다.

우리가 사용하는 컴퓨터를 살펴보자. 처음 전원을 켜서 실행되는 운영체제부터 다양한 실행 프로그램들과 인터넷에서 사용하는 여러 서비스들까지 모두 수많은 코드들로 이루어져 있다.

이러한 하드웨어를 동작하게 하는 언어를 프로그래밍 언어라고 하는데 그 중 가장 기계와 친밀한 언어를 기계어라고 한다.

기계어(Machine Code)는 별도의 번역기 없이 기계가 이해할 수 있는 언어인데, 이를 알파벳으로 대응시킨 것이 어셈블리어(Assembly Languag**e)**이다.

하지만 여전히 이 언어들은 특정한 목적을 제외하고는 거의 사용하지 않으며 개발자 친화적으로 나온 것이 C언어이다. 이후 객체지향(Object-oriented programming; OOP)을 위해 개발된 것이 C++이다.

adosseg
 .model small
 .stack 100h

 .data
hello_message db 'Hello, World!', 0dh, 0ah, '$'

 .code
main proc
    mov ax, @data
    mov ds, ax
    mov ah, 9
    mov dx, offset hello_message
    int 21h

    mov ax, 4C00h
    int 21h
main endp
end main
#include <stdio.h>

int main(int argc, char** argv) {
    printf("Hello, World!");
}

이전에도 여러 언어들이 있었으며 현재는 C보다는 다양하고 배우기 쉬운 언어들이 많지만 우리가 목표하는 아두이노 개발에서는 C와 C++만을 사용하므로 대다수의 내용들은 생략하기로 한다.

우리는 “아두이노” 라는 MCU (Microcontroller)가 탑재된 보드를 다루기 위하여 해당 보드가 지원하는 언어를 배운다는 것만 이해하면 된다.

절차적 / 객체지향 프로그래밍

위에서 C와 C++의 차이로 언급한 객체지향에 대해 간단히 설명하고자 한다.

절차적 프로그래밍(Procedural Programming)

명칭대로 순차적으로 처리되는 것을 칭한다. 전체적인 프로그램의 구조가 컴퓨터의 처리 구조와 같이 Top-down 형식으로 이루어진다. 대표적으로 C언어가 있다.

단순한 구조여서 작성하거나 하나의 스크립트를 이해하는 것은 쉽지만, 프로그램이 방대해질 수록 유지 보수가 어려워진다. (새로운 기능 추가, 에러 해결 등)

객체지향 프로그래밍(Object Oriented Programming)

실제 세계의 구성을 모델링하여 개발하는 방식이다.

캡슐화 / 상속 / 다형성 / 추상화 등으로 이루어져 있는데, 구체적인 부분은 생략하고 간단하게 체스 게임을 제작하기로 가정해보자.