본문 바로가기

Java/Chapter 02. 변수와 자료형

[Java] 02.01 - 변수의 이해와 활용

들어가며

 살면서 본인은 모기 때문에
잠을 설쳐본 적이 없다.

 하지만 이제 있게 되어 버렸다.

 모기는 제발 멸종했으면 좋겠다.

 느그들이 있을 곳은 박물관과
실험실 뿐이다.


 솔직히 변수에 대해 모르는 것은
아니지만,

 복습의 차원으로 간단하게 다뤄보도록 하겠다.

 

메모리 공간의 활용을 위해 필요한 변수

 변수를 한 문장으로 정리하면
다음과 같다.

 데이터의 저장과 참조를 위해
할당된 메모리 공간'에 붙인 이름을
'변수'라고 한다.

다음 그림은 메모리 공간의 일부를
표현한 것이다.

 그리고 이 메모리 공간에는 두 개의
메모리 블록이

 프로그래머가 사용할 수 있도록
할당되어 있다.

그림 8 - 메모리 공간의 할당

그렇다면 메모리 공간을 어떻게
할당받는 것인지,

 그리고 메모리 공간에 어떻게
접근할 수 있는지는

 여전히 의문으로 남는다.

 

변수는 메모리 공간에 붙여진 이름

 메모리 공간의 할당과 접근이라는
두 가지 문제의 해결을 위해

 '변수'라는 개념이 존재한다.

 코드 상에서 변수라는 것을 선언하면
[그림 8]과 같이 메모리 공간이 할당된다.

 그리고 그 할당된 메모리 공간에
이름이 붙는다.

 그러면 이 이름을 통해서 해당
메모리 공간에 접근할 수 있게 된다.

 그럼 변수의 선언이 어떻게 이뤄지는지
살펴보자.

 예를 들어 다음과 같이 생각했다고
가정하자.

"정수의 저장을 위한 메모리 공간의 할당"

"그리고 그 메모리 공간의 이름을 'num'이라고 명명"

 이 두가지를 이루기 위해서 우리가
할 일은 다음 문장을 삽입하는 것이다.

int num;

 여기서 int가 뜻하는 바는,

 정수를 저장할 메모리 공간의
할당을 의미하고

 이어서 등장하는 num이
뜻하는 바는,

 할당된 메모리 공간의 접근 시에
num이라는 이름을 사용하겠다는 의미다.

 따라서 [그림 8]과 같이 정수의
저장을 위한

 2개의 메모리 공간을 할당하고

 각각을 num1과 num2라고 이름
붙이기를 원한다면,

 다음과 같이 2개의 문장을 삽입하면
된다.

int num1;
int num2;

 위와 같은 문장을 가리켜 '변수 선언'
이라고 한다.

 즉, 두 문장을 통해서 num1과 num2라는
이름의 변수가 선언되었는데,

 다음 그림은 이 두 변수의 선언
결과를 보여준다.

그림 9 - 변수 선언 결과

 이렇듯 변수가 선언되면, 메모리 공간이
할당되고,

 할당된 메모리 공간의 접근을 위한
이름이 부여된다.


 그럼 다음 예제를 통해서 변수를
선언하고

 값의 저장과 참조를 진행해 보겠다.

public class class_name {
    public static void main(String[] args) {

        int num1;
        num1 = 10;

        int num2 = 20;

        int num3 = num1 + num2;

        System.out.println(num1 + " + " + num2 + " = " + num3);
    }
}

/*
실행 결과
10 + 20 = 30
*/

 위 예제에서 주목할 부분은,

 자바에서는 값의 대입의 의미로
'='기호가 사용된다는 점이다.

 기호 '='를 가리켜 '대입 연산자'라
한다.

 그리고 이 연산자를 이용하면

 오른쪽에 있는 값이 왼편에 있는
변수에 대입 된다.

 그럼 다음 문장을 보자.

int num2 = 20;

 이렇듯 변수를 선언과 동시에
값을 저장할 수도 있다.

 즉, 변수 num2는 선언과 동시에
20이라는 값으로 '초기화' 되었다.

처음 값을 지정하는 일을 가리켜 '초기화'라고 한다.

 그리고 다음 문장에서 보이듯이
숫자가 아닌

 덧셈의 결과로 변수를 초기화할
수도 있다.

int num3 = num1 + num2;

 그리고 위 예제와 같이

 정수를 저장하는 용도로 변수를
선언하면, 정수만 저장할 수 있다.

만약 3.14와 같은 실수 값을 저장하려 한다면 컴파일 에러가 발생한다.

 

자료형의 종류와 구분

 변수에 저장할 데이터의 유형을
알리기 위해

 앞서 int라는 키워드를 사용했는데,

 이러한 키워드를 가리켜 '자료형
(Data Type)'이라고 한다.

 그리고 자바는 다양한 종류의
값을 저장하고 참조할 수 있도록

 다음과 같이 다양한 자료형을
제공한다.

그림 10 - 자바의 기본 자료형

 위의 표에서 정리한 자료형을
가리켜,

 '기본 자료형'(Primitive Data Type)
이라고 한다.

 그리고 이들 기본 자료형은
데이터 종류에 따라서

 다음과 같이 크게 네 가지로
구분이 된다.

  • 정수 표현               byte, short, int, long
  • 실수 표현               float, double
  • 문자 표현               char
  • 참과 거짓의 표현      boolean

 이 중에서 정수 표현에 사용되는
자료형과

 실수 표현에 사용되는 자료형은
바이트의 크기에 따라서

 그 종류가 둘 이상씩 되는데,

 이는 표현 및 저장하고자 하는
값의 범위에 따라서

 절적한 자료형을 선택할 수
있도록 하기 위함이다.

 물론 바이트 크기가 크면,

 그만큼 표현할 수 있는 값의
범위는 넓어진다.

 이와 관련하여, 다음의 예제를
보라.

public class class_name {
    public static void main(String[] args) {

        double num1, num2;
        double result;

        num1 = 1.0000001;
        num2 = 2.0000001;
        result = num1 + num2;

        System.out.println(result);
    }
}

/*
실행 결과
3.0000001999999997
*/

 위 예제의 다음 문자에서
보이듯이

 동일한 자료형의 변수 2개를
한 번에 선언할 수 있다.

 물론 이 둘을 선언과 동시에
초기화 하는 것도 가능하다.

double num1, num2;

 기대하는 출력 결과는 분명
'3.0000002'이지만,

 정작 실제로 도출된 실행 결과는
엉망진창이다.

 이에 대한 원인은 다음 두
문장에서 찾을 수 있다.

num1 = 1.0000001;
num2 = 2.0000001;

 기본적으로 컴퓨터의 실수
표현에는 오차가 존재한다.

 따라서 위와 같이 실수들을
저장할 경우,

 저장되는 값은 이에 가까운
값일 뿐,

 정확한 수치는 아니라는 것이다.

 때문에 덧셈 결과에도 당연히
오차가 존재한다.

 

변수의 명명법

 자바는 대소문자를 구분한다.

 따라서 Num1과 num1은 서로
다른 이름으로 인식된다.

 때문에 자료형 int를 대신하여
INT를 사용할 수 없다.

 그리고 변수의 이름을 짓는데
있어 다음의 제약이 존재한다.

변수의 이름은 숫자로 시작할 수 없다.

 그래서 1num은 변수의 이름이
될 수 없지만,

 num1은 변수의 이름이 될 수
있다.

 그리고 특수 문자와 관련해서
다음의 제약이 존재한다.

'$'와 '_'이외의 다른 특수문자는
변수의 이름에 사용할 수 없다.

 그리고 마지막으로 다음의
제약도 존재한다.

키워드는 변수의 이름으로
사용할 수 없다.

 자바의 문법을 구성하는 int,
double과 같은 단어들을

 '키워드(Keyword)'라고 하는데,
이러한 키워드는

 변수의 이름으로 사용할 수 없다.

 잘못된 변수의 이름은 컴파일
오류로 이어진다.


참고 및 출처

윤성우의 열혈 Java 프로그래밍
국내도서
저자 : 윤성우
출판 : 오렌지미디어 2017.07.05
상세보기