변수와 상수

변수란?

 

어떤 컴퓨터 언어를 배우던 변수는 가장 먼저 배우게 되는 개념입니다. 그만큼 자주 쓰이고 중요한 개념입니다. 변수는 한자로 '변할 ()' ' ()' 쓰고 있습니다. 우리가 일반적으로 ' 일에는 변수가 너무 많다' 같이 쓰는 것처럼 컴퓨터 언어에서도 단순히 숫자라는 의미가 아니라 변할 있는 데이터를 의미합니다. 영어로는 variable이라고 쓰는데 역시변할 있는 이라는 의미를 지니고 있습니다.변수를 간단히 정의하면 하나의 데이터를 저장할 있는 메모리 공간'이라고 있습니다. 정의 자체가 어렵게 느껴지지는 않을 겁니다. 그럼 예를 들어보겠습니다.

 

A+B=C 라는 공식을 예로 들겠습니다. A+B=C 라는 식이 있고, A=3 이고 B=4 라고 알려주면서 의 값을 구하라고 명령합니다 A+B=C 이므로 3+4=7 이라고 대답할 겁니다. 그런데 또다시 A일 때 는 얼마냐고 물으면 10 이라고 대답할 겁니다이처럼 A, B, C 는 수시로 값이 변합니다

 

에 대입하는 값이 다르면 의 값도 달라집니다이처럼 값이 수시로 변하는 수를 변수라고 합니다. 어떤 숫자가 올지 모르기 때문에 변수라고 합니다. 그러니까 보기의 수학공식은 라는 이름을 가진 변수와 라는 변수, C 라는 변수를 사용한 것입니다변수에 대입하는 수는 수시로 변할 수 있습니다.

 

 

변수명의 규칙

 

추가적으로 변수는 이름을 가지는데 그것을 변수 명이라고 합니다. 변수의 이름을 정하는 것도 마음대로 정할 수는 없습니다일정한 규칙이 있습니다.

 

1. 첫글자는 영문이어야 합니다.

   - 숫자나 한글 등 다른 언어가 맨 앞에 오면 안됩니다.

 

2. 예약어는 변수명으로 사용 불가

   - 예약어는 미리 예약되어 있는 단어입니다.

  - 보통 예약어를 쓰면 다른색으로 표시되어 예약어를 썼는지 안 썼는지 알 수 있습니다.

 

3. 빈 칸(띄어쓰기) 사용 불가

   - _(언더바)로 이어서 사용할 수는 있지만 공백으로 연결할 수는 없습니다.

   - 변수명은 오직 영어, 숫자, _(언더바)로만 구성되어야 합니다.

 

4. 변수명이 255자를 넘지 않습니다.

 

 

컴퓨터가 변수를 기억(저장)하는 방법

 

 

컴퓨터는 많은 내용들을 저장합니다. 그럼 컴퓨터는 데이터들을 어떻게 저장할까요? 바로 컴퓨터의 메모리,  RAM 이라는 특별한 기억공간에 이것을 기록합니다. 컴퓨터 RAM 은 아래와 같이 생겼습니다.

 

변수1.jpg

 

이 모양을 본뜬 것인지 몰라도 우리는 보통 RAM 을 설명할 때 아래처럼 표시합니다.

 

변수2.jpg

칸 칸을 각각의 '' 이라고 생각하면 데이터들이 이 '' 에 저장될 수 있습니다. 이런 방들이 엄청 많습니다. 이 때컴퓨터는 각 방에 이름을 붙이는데 단순하게 숫자로 이름을 붙인다고 합니다. 예를 들어: 0번방, 1번방, 2번방 ....

 

정확하게 말하면 1번방, 2번방과 같은 표현은 우리가 일반적으로 사용하는 10진수이고 컴퓨터는 메모리의 번지를 숫자로 나타낼 때 16진수로 나타낸다고 합니다. 0 1밖에 모르는 컴퓨터가 어떻게 2진수가 아니라 16진수로 나타낼까요?

 

16진수는 2진수 4자리로 구성됩니다. (OOOO 이런 식으로) 이 때우리가 대부분 사용하는 32bit CPU 에서는 최대 232(4GB)

, 42억 개에 달하는 방을 가질 수 있는데 이러한 방들을 모두 숫자로 구분하게 됩니다. 각 방을 숫자로 표현하는데 16 진수의 숫자로 표현을 한다고 했으니 16 진수에 대해 잠깐 알아보도록 하겠습니다

 

²  16진수 ²

 

기본적으로 컴퓨터는 0 1로 모든 것을 표현한다는 것을 염두에 두고 시작하겠습니다.

 

 

 "15" 라는 숫자를 예로 들어 보겠습니다. 저희는10진수로 숫자를 읽습니다. 그러나 컴퓨터는 (0 1로 모든 것을 표현) 2진수로 숫자를 읽습니다.  1111 입니다.

 

15를 각 10진수와 2진수로 자세히 풀어서 설명해보겠습니다.

 

<10진수 표기법

15 10으로 나누면 몫은 1 나머지는 5  됩니다. 몫부터 표시하고 나머지를 표시합니다 15 됩니다.

 

  = 1 x 10 + 5 x 1 

 

  = 1 x 101 + 5 x 100 

 

  = 10 + 5 = 15

 

 

<2진수 표기법>

15        2 나누면  몫이 7 나머지 1,

  

7 다시 2 나누면  몫이 3 나머지 1,

 

3 다시 2 나누면  몫이 1 나머지 1,

 

 이상 2 나누어지지 않으니  1부터 표시하고 나머지들을 밑에서 위로 올라가며 표시하면  

 

1111  됩니다.

 

1 x 23 + 1 x 22 + 1 x 21 + 1 x 20 

 

= 8 + 4 + 2 + 1 = 15

 

 

표기하는 방법은 다르지만 사람과 컴퓨터는 15 표현하고 있습니다.

 

우리는 10 을 기준으로 한 10 진수를 사용하기 때문에 0,1,2,3,4,5,6,7,8,9 10개의 숫자가 필요합니다컴퓨터는 2 를 기준으로 한 2진수를 사용하기 때문에 0,1 2개의 숫자가 필요합니다. 그렇다면 16 진수는 어떻게 표현할까요?

 

16 진수는 16을 기준으로 한 16 진수를 사용하기 때문에 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 16 개의 숫자가 필요합니다. 하지만 10부터는 2자리가 되기 때문에 1 자리로 표현을 위해서 수학자들은 이를 A, B, C, D, E, F 로 표현했습니다.

 

그러므로 10=A, 11=B, 12=C, 13=D, 14=E, 15=F 로 표현하는 것입니다.

 

그래서 16 진수는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 의 총 16 개의 숫자가 필요합니다. 왜 컴퓨터가 계산하기 복잡한데 16 진수를 사용할까요? 2 진수에서 16 진수로 바꾸기가 쉽기 때문입니다.

 

예로 '237' 보겠습니다.

 

237 = (10진수 표현

 

128 + 64 + 32 + 8 + 4 + 1 = (2진수 표현) 11101101

 

해당 2 진수를 16 진수로 바꾸는 것은 굉장히 간단합니다.

 

16 진수 1자리 = 2 진수 4 자리 이므로 (24 = 16)

 

1110 / 1101  4자리씩 끊어서 표현하면 됩니다.

 

그러므로, (2진수) 1110 / 1101 

 

1110 = 8+4+2+0 = (16진수로) 14 = E

 

1101 = 8+4+0+1 = (16진수로) 13 = D

 

결과적으로 표현하는 방법만 다를

 

(10진수) 237 = (2진수) 11101101 = (16진수) ED

 

이제 다시 본론으로 돌아가서 번지는 0 번부터 매기기 때문에 232 32 자리 00000000000000000000000000000000b 라고 표현합니다.

 

그리고 마지막 방은 32 자리 모두 1 이어야 하므로 11111111111111111111111111111111b 라고 표현을 합니다.

 

여기서 마지막에 붙은 b binary 약자로 2 진수라고 표시해주는 것입니다.

 

2 진수 표현을 16 진수로 표시하여 범위를 나타내면 (2 진수 4 자리가 16 진수이므로 16 진수로는 8 자리가 됩니다.) 0x00000000 ~ 0x11111111까지 가능합니다.

 

- 여기서 앞에 붙은 0x 16 진수라고 표시해주는 것입니다.

 

변수를 제대로 이해하기 위해서는 반대 의미를 가지고 있는 상수의 개념 역시 알아야 합니다.

 

상수 

 

상수는 한자로  '항상 상(常)'자와 '셀 수(數)'자를 쓰고 있고 영어로는 constant라고 씁니다. '항상 같은 값', 또는 '변하지 않는 값'을 의미합니다. 주로 변수를 배우면서 상수를 배우게 되지만 사실 변수보다 상수는 먼저 태어났습니다. 여러 가지 값을 담을 수 있는 메모리 공간보다 한 번 값을 넣어두면 수정할 수 없는 형태가 먼저 사용되었던 것이죠. 하지만 상수만을 사용하는 게 불편했기 때문에 변수가 태어나게 되었던 것입니다(실제로 변수는 데이터 자체를 담는 공간이라기 보다는 데이터가 저장되어 있는 reference를 담는 메모리 공간입니다.) 

 

 

실제로 태초의 프로그래밍 언어라고 불리는 어셈블리에서는 초기에 변수 없이 상수만으로 프로그래밍을 하던 시절도 있었다고 합니다. 그 시절에는 상수가 저장되어 있는 메모리 주소를 일일이 외워서 사용해야 했다니 피곤했을 듯합니다. 이런 불편함을 해소하기 위해서 사람이 기억하기 쉬운 단어 형태로 변수를 선언하고 그 변수에 상수(실제로는 상수의 주소)를 저장해서 쉬운 방법을 생각해내게 되었던 것이죠. 물론 이런 장점 이외에도 변수를 사용하면 같은 값을 중복해서 사용할 필요가 없으므로 코드의 가독성이 높아지고 또 넓은 범위에서 사용되는 변수의 값도 간단히 한번 변경하는 것으로 수정할 수 있으니 유지보수가 훨씬 쉬워지는 장점도 있습니다.

 

다운로드: 3장 변수와상수.pdf

 

 

 


프로그래밍을 제대로 공부해보고 싶다면, 다음 순서로 진행하시는 것을 권장합니다.

 

  1. 프로그래밍 애피타이저 시리즈
  2. [동영상] 데브기어 델파이 기초 시리즈
  3. [오프라인 강의] 델파이/C++빌더 기초 강화
  4. [오프라인 강의] 델파이/C++빌더 윈도우 프로그래밍

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15465
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13970
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16505
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22061
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23270
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18930
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39264
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174728
223 [베를린 U2] 새로운 윈도우 10 스타일 적용하기 (1분 동영상) 험프리 2016.11.15 445
» [프로그래밍 애피타이저] 3장 변수와 상수 file 김원경 2020.04.07 443
221 [발표자료] 20191205 기술브리핑! 20분만에 파악하는 RAD스튜디오 10.3.3 file 관리자 2019.12.05 443
220 이 달의 기술자료 - 2018년 12월 file 험프리 2018.11.30 443
219 [시애틀] IDE 메모리 개선으로 더 큰 프로젝트를 더 빠르게 코딩하고, 더 빠르게 컴파일 할 수 있습니다. 험프리 2015.10.05 442
218 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 7장. 센서와 서비스로 스마트폰 제어하기 [1] 관리자 2020.02.04 442
217 [10.3 리오][업데이트 2] 델파이에서 맥OS 64-bit 애플리케이션 개발이 가능합니다. 관리자 2019.07.25 442
216 [시애틀] 20개 이상의 IDE 생산성 기능들이 내장되어 생산성, 품질, 안정성이 향상됩니다. Humphery 2015.09.04 442
215 이 달의 기술자료 - 2016년 11월 험프리 2016.10.28 441
214 [고객 사례- 의료, 임베디드DB] PAR Springer-Miller Systems – SpaSoft  관리자 2016.11.03 440
213 윈소프트(Winsoft) – 스탠다드 컴포넌트 패키지 (100+가지) 관리자 2020.09.01 438
212 [프로그래밍 애피타이저] 10장 트랜잭션의 정의 file 김원경 2020.04.09 438
211 리눅스 앱에 '윈도우 10 컬러 스타일'을 적용하고 싶다면 - Aqua Graphite 스타일 관리자 2019.09.09 438
210 [오픈소스] AutoTablesForRADServer - RAD 서버용 REST API 자동 생성기 file 험프리 2018.10.26 438
209 /n 소프트웨어 – IPWorks WebSockets 관리자 2020.09.01 437
208 TMS Aurelius - ORM 프레임워크 관리자 2020.08.27 436
207 [고객사례-게임, 델파이] Tears of Ra 관리자 2020.01.10 436
206 이 달의 기술자료 - 2017년 04월 file 험프리 2017.03.30 434
205 안드로이드 앱의 난독화 - 파이어몽키로 작성한 네이티브 앱은 디컴파일할 수 없어 보안에 강력합니다. 험프리 2020.02.24 434
204 [10.3 리오][업데이트1] iOS 12, iPhone X 시리즈 디바이스들 지원 관리자 2019.02.22 434