티스토리 뷰

이전 장들...

2018/07/22 - [프로그래밍 강좌/Java] - 1장. 개발환경 세팅하기 (java, eclipse)

2018/07/23 - [프로그래밍 강좌/Java] - 2장. Eclipse 기본 사용법

2018/07/23 - [프로그래밍 강좌/Java] - 3장. 자바 메인 메소드, 기본 출력

2018/07/25 - [프로그래밍 강좌/Java] - 4장. 컴퓨터가 읽지 않는 문자, 주석


이번 장부터는 직접 실습할 내용이 많을 것이다.

이번 장의 내용은 '변수'라는 것에 대해서 알아볼 텐데, 쉽지만 아주 중요한 개념이다.


변수? 변하는 수! (Variable)

변수란 제목에서 보이는 말과 같이 '변하는 수'라고 정의할 수 있다. 우리는 수학에서 '수'라는 개념을 배웠다. 1, 2, 3과 같은 값이다.

변수는 이러한 수가 '변할 수 있다'는 의미인데, 무슨 뜻일까?


우선 프로그래밍 관련 서적에서는 다음의 의미로 변수를 정의하고 있다.

  1. 메모리 공간의 활용을 위한 도구
  2. 메모리 공간의 할당과 접근을 위해 필요한 도구
  3. 변수의 선언은 '메모리 공간의 할당'으로 이어진다.

이 말의 의미를 이해하기 위해, 우선 아래 그림을 보겠다.



위 그림은 18개의 공간 중 각각 4 만큼의 공간에 메모리 공간이 할당되어 있음을 설명한다.

여기서 '메모리 공간'이란, 우리 컴퓨터에서 RAM 을 나타낸다. 프로그램이 메모리 공간의 활용을 위해 '변수'라는 것을 선언하면, 해당 변수에 대응하는 값이 '변수' 방에 저장된다. 그 '변수'는 이름을 정할 수 있으며, 'a', 'b', 'c' 등 몇몇 예외를 제외한 다음 규칙으로 명명할 수 있다.


변수의 명명 규칙

  1. 자바는 대소문자를 구분한다.
  2. 변수의 이름은 숫자로 시작할 수 없다. (하지만 시작만 숫자가 허용되지 않을 뿐, 이름 중간중간에 숫자가 들어가는 것은 상관없다.)
  3. $과 _ 이외의 특수문자는 변수의 이름에 사용할 수 없다.

만약 위의 명명 규칙을 어길 경우 프로그램 컴파일 중 오류가 발생하며, 프로그램이 실행되지 않는다.


변수 선언?

프로그램을 만들 때 (코딩이라고 하겠다) 우리가 컴퓨터에 입력하는 거의 모든 영어 글자들을 '선언한다'라고 한다.

예를 들어, 우리가 이번 장에서 배우는 변수를 말하자면 '변수 선언' 이라고 할 수 있다.


즉 선언이란 것은 '어떠한 것을 이 코드에서 사용하겠다'고 프로그램에게 말해주는 것과 같은 의미라고 할 수 있다.

그러면 변수는 어떻게 선언할까? 변수가 선언된 다음 예시를 보겠다.


int num1; 


위 코드는 '변수를 선언'한 예이다.

해석해 보자면, "int 형 변수 num1을 선언한다." 라고 할 수 있다.

그렇다면 num1은 변수의 이름이라는 것을 대충은 알겠다. 그런데 int 는 무엇일까?


자료형! (Data Type)

변수와 자료형 제목에 영문으로 써 놓은 이유는... 컴퓨터는 시초도 외국이고, 발전도 외국이기에, 우리는 그냥 번역해서 꼽사리 낀 것이다. 그래서 영어를 좀 알아야 본뜻을 조금은 수월하게 이해할 수 있다. (개인적인 생각)


자료형? 들어도 마음에 딱 와닿지 않는다. 근데 데이터 타입? 데이터의 타입? 종류? 더 모르겠다. (아닌가?)


그러면 나름대로 정의를 해 보겠다. 필자는 다음과 같이 정의했다.

"프로그램 상에서 표현되는 자료의 형태"


위의 변수 선언 예시를 다음과 같이 변경해 보았다.


int num1 = 10; 


딱 봐도 num1 뒤에 10이라는 숫자가 추가된 것을 알 수 있다.

여기서 int가 자료형의 단위이다. 즉, 뭔지 모를 'int 형의 num1변수에 10을 넣는다'고 풀이할 수 있다.


다음 표를 보자.



위 표는 자료형의 종류와 그 구분에 대해 명시되어 있는 표이다.


보시다시피 자료형에는 boolean, char, byte, short, int, long, float, double이 있다.

그런데 왜 그냥 숫자나 문자들을 이렇게 많은 자료형들로 나누어 놓았을까? 그 목적은 "데이터의 크기와 저장공간의 사용"에 관련이 있다.


만약 1000000(백만)이라는 숫자를 int형의 변수 num이라는 변수에 저장한다고 생각해 보겠다. 이를 코드로 나타내면 다음과 같을 것이다.


int num = 1000000; 


위의 코드와 같은 코드다. 저장하는 값이 달라졌을 뿐이다. 하지만 이 '저장하는 값' 에 그 답이 있다. (정확히는, 어떠한 변수에 특정 숫자 등 값을 넣는 것을 '[변수]를 [값]으로 초기화한다'라고 한다.)


위 표에서 '표현 가능 범위'를 보았을 때, 10이라는 값은 byte에도, short에도, int에도, long에도, 심지어 float, double에도 넣을 수 있다. 갈수록 표현 가능 범위가 커지기 때문이다. 하지만 만약 num이라는 변수의 자료형 선언을 byte로 한다면 어떻게 될까? 이 말은 'byte 자료형에 1000000을 대입한다면 어떻게 될까?'와 같은 의미로 해석될 수 있다. 아마 다음과 같은 프로세스를 생각할 수 있을 것이다.


  1. 표현 가능 범위 밖이라도 그냥 저장된다.
  2. 경고가 뜨고 프로그램이 약간 느려지지만 저장 자체는 가능하다.
  3. 저장조차 되지 않으며 컴파일 에러가 뜰 것이다.

정답은 3번이다. 컴퓨터는 똑똑하지 않다. 범위를 벗어나도 저장되지 않고, 프로그램이 느려져도 저장되거나 그런 것 없다. 그냥 에러가 나고 멈춰 버린다. 그래서 이렇게 많은 자료형들이 있는 것이다. 10은 10에 맞는 자료형에 저장하고, 백만은 백만에 맞는 자료형에 저장하도록 하여, 쓸데없이 넓은 범위의 자료형에 작은 자료를 저장할 일도 없고, 스케일이 큰 자료도 그에 맞는 자료형에 저장할 수 있도록 하는 데에 그 목적이 있다.


만약 프로그래밍을 처음 접하는 입장에서 위의 말이 한번 봐서 제대로 이해된다면, 당신은 천재다. 이러한 이론적인 부분은, 읽고, 또 읽고, 또 읽기의 반복을 거쳐야 진정한 내 것이 된다.


다음 장 바로가기 >>

2018/07/27 - [분류 전체보기] - 6장, 상수


'프로그래밍 > Java' 카테고리의 다른 글

7장. 형 변환  (0) 2018.07.27
6장. 상수  (0) 2018.07.27
4장. 컴퓨터가 읽지 않는 문자, 주석  (0) 2018.07.25
3장. 자바 메인 메소드, 기본 출력  (0) 2018.07.23
2장. Eclipse 기본 사용법  (1) 2018.07.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함