들어가며
이 자료에서는 아두이노 변수와 자료형에 대해 설명합니다. 변수와 자료형을 이해하고, 이를 통해 간단한 프로그램을 작성해 보도록 하겠습니다. 변수와 자료형은 프로그래밍의 아주 기초적인 지식으로, 기본기를 알고 있어야 더 나아가 복잡한 프로그래밍도 할 수 있을 것 입니다. 아두이노 변수와 자료형에 대해 알아보겠습니다.
아두이노 변수와 자료형
Arduino에서 프로그래밍을 할 때, 변수와 자료형은 데이터를 저장하고 조작하는 데 사용하는 필수 요소입니다. “변수”는 프로그램 내에서 데이터를 저장하기 위한 공간이며, “자료형”은 변수에 저장할 수 있는 데이터의 종류를 정의합니다.
변수의 선언과 초기화
변수를 사용하기 위해서는 먼저 선언해야 합니다. 선언 시 변수의 자료형을 지정하고, 필요하면 초기값을 설정할 수도 있습니다. 선언된 변수는 아래에서 변경하거나 불러와 사용할 수 있습니다.
int myNumber; // 정수형 변수를 선언
myNumber = 10; // 변수에 값을 할당
int mySecondNumber = 20; // 선언과 동시에 초기화
myNumber = 20; // 변수의 값이 10에서 20으로 변경
자료형의 종류
다양한 자료형이 있으며, 각 자료형은 특정 종류의 데이터를 저장하는 데 사용됩니다. 아래는 Arduino에서 자주 사용되는 자료형과 그 특성을 요약한 표 입니다.
| 자료형 | 크기 | 범위 | 설명 |
|---|---|---|---|
boolean | 1 바이트 | true 또는 false | 참/거짓 값 저장 |
char | 1 바이트 | -128 ~ 127 | 문자 저장 |
byte | 1 바이트 | 0 ~ 255 | 부호 없는 8비트 정수 저장 |
int | 2 바이트 | -32,768 ~ 32,767 | 16비트 정수 저장 |
unsigned int | 2 바이트 | 0 ~ 65,535 | 부호 없는 16비트 정수 저장 |
long | 4 바이트 | -2,147,483,648 ~ 2,147,483,647 | 32비트 정수 저장 |
unsigned long | 4 바이트 | 0 ~ 4,294,967,295 | 부호 없는 32비트 정수 저장 |
float | 4 바이트 | 3.4028235E+38 ~ -3.4028235E+38 | 단정밀도 부동소수점 저장 |
double | 4 바이트 / 8 바이트 | 3.4028235E+38 ~ -3.4028235E+38 1.7E+308 ~ -1.7E+308 | Arduino에서는 float과 동일 |
8비트 기반의 마이크로 컨트롤러와 32비트 기반의 마이크로 컨트롤러에서 자료형의 범위가 달라질 수 있습니다. ESP32등이 32비트 컨트롤러중 하나입니다.
변수의 사용 예시
변수를 선언하고 사용하는 예시입니다. 아래 예시를 통해 어떠한 변수에 어떠한 값들을 할당할 수 있는지 한번 알아보세요.
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
// boolean 변수 사용 예시
boolean ledState = true;
Serial.println(ledState); // 1 출력 (true)
// char 변수 사용 예시
char myChar = 'A';
Serial.println(myChar); // A 출력
// int 변수 사용 예시
int myInt = 100;
Serial.println(myInt); // 100 출력
// unsigned int 변수 사용 예시
unsigned int myUnsignedInt = 200;
Serial.println(myUnsignedInt); // 200 출력
// long 변수 사용 예시
long myLong = 1000000;
Serial.println(myLong); // 1000000 출력
// unsigned long 변수 사용 예시
unsigned long myUnsignedLong = 2000000;
Serial.println(myUnsignedLong); // 2000000 출력
// float 변수 사용 예시
float myFloat = 3.14;
Serial.println(myFloat); // 3.14 출력
// double 변수 사용 예시
double myDouble = 3.14159;
Serial.println(myDouble); // 3.14159 출력
}
void loop() {
// 반복 실행되는 코드
}
변수의 사용 범위
변수의 선언 위치에 따라 변수를 사용할 수 있는 범위가 달라지게 됩니다. 변수는 선언된 위치에 따라 전역 변수(Global Variable)와 지역 변수(Local Variable)로 나뉩니다.
- 전역 변수: 함수 밖에서 선언되며, 프로그램 전체에서 접근 가능합니다.
- 지역 변수: 함수 내에서 선언되며, 해당 함수에서만 접근 가능합니다.
int globalVar = 10; // 전역 변수
void setup() {
Serial.begin(9600);
}
void loop() {
int localVar = 5; // 지역 변수
Serial.println(globalVar); // 10 출력
Serial.println(localVar); // 5 출력
}
지역 변수를 출력하지 못하는 경우
위의 예제에서는 외부에서 선언된 변수와 내부에서 선언된 변수를 함께 출력할 수 있었지만, 사용하지 못하는 경우도 한번 살펴봐야겠죠. 다음 예제는 setup() 함수에서 선언한 변수를 loop() 함수에서 출력하려고 할 때 발생하는 오류를 보여줍니다.
예제 코드
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
int localVar = 5; // setup() 함수 내에서 지역 변수 선언
Serial.println(localVar); // setup() 함수 내에서는 정상적으로 출력됨
}
void loop() {
// setup() 함수 내에서 선언된 localVar를 loop() 함수에서 출력하려고 시도
Serial.println(localVar); // 오류 발생: localVar는 loop() 함수 내에서 유효하지 않음
}
코드 설명
setup()함수 내에서int localVar = 5;로 지역 변수를 선언하고 값을 초기화합니다.setup()함수 내에서는Serial.println(localVar);로localVar를 정상적으로 출력이 가능합니다.loop()함수 내에서Serial.println(localVar);로setup()함수 내에서 선언된localVar를 출력하려고 시도합니다.- 이 시도는 오류를 발생시킵니다. 이유는
localVar가setup()함수 내에서만 유효한 지역 변수이기 때문입니다.localVar는setup()함수가 종료되면 메모리에서 사라지므로loop()함수에서는 접근할 수 없습니다.

이 예제를 통해, 변수의 범위가 함수 내에서만 유효함을 알 수 있습니다. 지역 변수는 선언된 함수 내에서만 접근 가능하며, 다른 함수에서는 사용할 수 없습니다. 이를 해결하려면 전역 변수를 사용하거나, 변수의 값을 함수 간에 전달하는 다른 방법을 사용해야 합니다. (나중에 배울 예정)
상수
위에서 사용해보았던 변수와 달리, 상수(constant)는 값을 변경할 수 없습니다. const 키워드를 사용하여 상수를 선언합니다.
const int ledPin = 13; // 상수 선언
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH); // LED 켜기
delay(1000);
digitalWrite(ledPin, LOW); // LED 끄기
delay(1000);
}
상수의 특성을 이용하여 좀더 수월한 프로그래밍이 가능합니다. 의미있는 숫자들을 상수로 선언하여 사용하거나, 반복적으로 사용하는 변수일 경우 상수로 선언해 둔 값만 변경하는 식으로 유지보수를 좀 더 편리하게 하기도 합니다.
또한 상수는 값이 변경되지 않는다는 특성이 있어 실수로 값이 변경되는 것을 방지할 수 있습니다. 이는 코드의 안정성을 높여주죠.
변수 선언시 주의 사항, 변수 이름 규칙
변수 이름을 지정할 때는 다음 규칙을 따릅니다:
- 알파벳, 숫자, 언더스코어()만 사용 가능: 변수 이름은 알파벳(a-z, A-Z), 숫자(0-9), 언더스코어()로만 구성할 수 있습니다.
- 숫자로 시작 불가: 변수 이름은 숫자로 시작할 수 없습니다.
int myVar; // 올바른 변수 이름
int 1stVar; // 잘못된 변수 이름
- 대소문자 구분: 변수 이름은 대소문자를 구분합니다.
myVar와myvar는 서로 다른 변수로 취급됩니다.
int myVar;
int myvar; // myVar와는 다른 변수
- 예약어 사용 불가: 변수 이름은 Arduino에서 예약된 키워드(예:
int,float,if,while등)를 사용할 수 없습니다.
마무리
Arduino에서 변수와 자료형의 중요성을 이해하고, 이를 사용하여 간단한 프로그램을 작성하는 방법을 배웠습니다. 변수와 자료형은 코딩을 할 때 아주 아주 기초적이면서 필수적인 내용입니다. 앞으로 여러 코드를 접해가면서 자연스럽게 익히게 될 테니, 지금 이해가 잘 안되더라도 너무 걱정하지 마세요. 계속 한다면, 결국 이해하게 될 거에요
변수와 자료형의 기본 개념, 변수 선언 및 초기화 방법, 다양한 자료형의 활용법 세가지에 대해 배워봤는데요 내용이 기억이 나지 않는다고요? 그럼 한번만 더 읽어보고, 그래도 이해가 안되다면 다음 단계로 일단 나아가 보시죠. 반복해서 사용하며 자연스럽게 이해하길 기도하자고요.