# 코드의 구성

## 아두이노 코드의 구성

아두이노 스케치에서 `새 파일`을 생성하면 다음과 같은 코드가 나타난다.

```cpp
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}
```

총 두 개의 { } 가 존재하며, void부터 { } 까지를 통틀어 `함수`라고 부른다.\
따라서 아두이노에는 기본적으로 두 개의 함수가 존재한다고 볼 수있다.

각각의 함수들은 내부에 코드를 가질 수 있고 가진 코드들은 함수가 실행되면 작성 순서대로 실행된다.\
필요하다면 추가적으로 함수를 만들 수도 있지만 이 문서에서는 살펴보지 않는다.\
기본적으로 주어진 함수들의 역할은 다음과 같다.

* void setup(){ } : `setup` 이라는 이름을 가진 함수로 **최초 1회만 실행되는** 코드를 보관 및 실행한다.
* void loop(){ } : `loop`라는 이름을 가진 함수로 **지속적으로 실행되는** 코드를 보관 및 실행한다.

### 심화

왜 `setup` 함수와 `loop` 함수가 실행횟수, 순서의 차이가 발생하는지 궁금하다면 원리를 좀 더 살펴볼 수 있다.(생략해도 무방하다)\
아두이노는 `C/C++`구성되어 있으며, 설치 폴더에 가면 `main.cpp` 라는 파일이 있는데 이 파일이 실제 작성한 아두이노 코드를 실행하는 역할을 수행한다.

```cpp
#include <Arduino.h>

// Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (* /*func*/ )()) { return 0; }

// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }

void setupUSB() __attribute__((weak));
void setupUSB() { }

int main(void)
{
	init();

	initVariant();

#if defined(USBCON)
	USBDevice.attach();
#endif
	
	setup();
    
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
        
	return 0;
}
```

위의 코드를 보면 `setup` 함수와 `loop` 함수의 실행횟수가 차이나는 이유에 대해서 알 수 있다.
