컴공과컴맹효묘의블로그

[초보Java 시리즈]02-변수(Variable)과 자료형(Data Type) 본문

컴퓨터/Java를 자바

[초보Java 시리즈]02-변수(Variable)과 자료형(Data Type)

효묘 2020. 1. 22. 20:00
반응형

02-1 변수의 이해

변수란 무엇일까?

변수란, 한 문장으로 간단히 표현하자면 "프로그래머가 데이터(값)의 저장과 참조를 위해 할당받은 메모리 공간"입니다. 

여기서 말하는 데이터는 정수형 숫자, 실수형 숫자, 문자열 등을 말하는 것입니다.

참조는 그 변수에 어떤 값이 들어있는지 찾아보는 것입니다.

 

변수에대한 간단한 이해를 설명하겠습니다.

프로그래머는 메모리에대한 '할당''접근'을 해야합니다. 마치 우리가 '팔레트'에 사용할 '물감'을 짜는것 처럼요. 

그리고 메모리 공간의 할당은 Java에서는 간단히 할 수 있습니다.

int num;

"10진수 정수를 저장할 메모리 공간을 할당해야겠다. 그리고 그 메모리 공간을 num이라고 불러야지."

간단한 코드 한 줄로 메모리 공간을 할당하고 그 메모리의 이름까지 지었습니다. 여기서 int가 의미하는 것은 "10진수 정수를 저장할 메모리 공간을 할당한다."

 

그럼 이제 이 할당받은 메모리에 접근하여 값(데이터)을 저장해야합니다.

int num1;
num1 = 10;

int num2 = 7+9;

변수에 값을 저장할 때 '='기호를 사용했습니다. 일반적으로 수학에서는 '='기호는 "같다"라는 의미이지만, Java에서는 "우측의 (연산)값을 좌측 변수에 저장한다"라는 의미입니다.

 

미술을 할 때 우리는 필요한 '물감'을 '팔레트'에 짠 후 두 가지 이상의 물감을 섞거나 물감 그대로 사용하기도 합니다. 변수도 각각의 메모리에 접근하여 두 메모리 값의 연산을 다른 변수에 저장할 수 있습니다.

 

전체 코드
실행 결과

10행의 코드를 살펴봅시다.

int num3 = num1 + num2;

이 코드는 num3라는 변수를 선언합니다.

num1와 num2에 저장된 값을 참조하고, 이 두 변수를 +연산 합니다.

그리고 이 연산의 결과값을 num3에 대입합니다.

 

System.out.println(num3);

System.out.println()이라는 함수를 통해 console창에 결과값을 띄울 수 있습니다.

 

다음과 같이 좀 더 명확하게 표현할 수도 있습니다.

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

 

실행 결과2

 

 

02-2 기본 자료형

자바에서는 8가지의 기본 자료형을 제공하고 있습니다. 자료형(Data Type)은 말 그대로 데이터의 종류입니다.

 

자료형 데이터 메모리 크기 표현 범위
boolean 명제(참, 거짓) 1 byte true, false
char 문자 2 byte 모든 유니코드(Unicode)
byte 정수 1 byte -128~127
short 2 byte -32768~32767
int 4 byte -2147483648~2147483647
long 8 byte -9223372036854775808~9223372036854775807
float 실수 4 byte ±(1.40x10^(-45)~3.40x10^(38))
double 8 byte ±(4.94x10^(-324)~1.79x10^(308))

이렇게 표현 종류에따라서는 크게 네 가지, 거기서 데이터의 표현 범위로 세분화하면 여덟 가지로 나뉩니다.

 

참고로 프로그래밍할 때 '실수'는 보통 소수점이 존재하는 값을 의미할 때 쓰입니다.

예를 들어 ( 4 )는 정수입니다.(실수라고 안함)

그리고 ( 4.0 ) 이나 ( 3.14 )는 실수라고 합니다.

 

여기서 실수의 특징을 하나 알려드리겠습니다.

변수를 한 줄에 여러 개 선언할 수 있다.
결과

여러분이 예상한 값은 3.0000002입니다. 하지만 결과는 전혀 다른 값이 나왔습니다.

컴퓨터에서의 실수는 부동소수점(floating point)를 사용하고 있습니다. 0.1과 0.2에는 무한한 실수의 값이 존재합니다. 하지만, 컴퓨터 메모리의 값은 한정되어있으므로 정확성을 포기하고 표현 범위를 늘렸습니다. 따라서 실수의 연산은 항상 오차가 존재할 수밖에 없습니다.

 

변수의 이름을 짓는 방법에대해 알려드리겠습니다. 변수는 이 조건에서만 선언할 수 있습니다.

 

  • 변수는 숫자로 시작할 수 없습니다.
  • 변수는 _와 $를 제외한 특수문자를 사용할 수 없습니다.
  • 변수는 키워드를 사용해선 안됩니다.

키워드란 int, double, float 등 자바의 문법 구성 요소를 가리킵니다.

대표적으로 package, class, public, static, return, boolean, char, byte, flaot, void, short, if, else, final 등등이 있습니다. 이는 외워야 할 대상이 아니며 키워드로 변수를 선언하려고 하면 이클립스가 알아서 빨간 밑줄을 그어줄겁니다.

구문(Syntax) 에러. "void"는 유효하지 않은(invalid) 변수 선언입니다.

02-3 정수와 실수의 표현

 

정수를 표현할때는 정수의 크기를 먼저 알아야합니다. 자바에서는 정수를 표현할 때 1바이트, 2바이트 4바이트, 8바이트가 있습니다. 원리는 같으니 편의를 위해 1바이트 기준으로 설명하겠습니다.

 

우리의 세계는 보통 10진수로 숫자표현을 하지만, 컴퓨터는 데이터 표현을 2진수로 합니다.

10진수는 0부터 9까지 열 개의 문자로 데이터를 표현하는 것이고, 2진수는 0과 1로만 데이터를 표현합니다.

16진수같은 경우는 0~9 + A,B,C,D,E,F까지 해서 16가지 문자로 데이터를 표현합니다.

 

본론으로 들어가서 1바이트는 8bit입니다. 그리고 컴퓨터는 부호를 표현하기위해 이 8bit를 1bit와 7bit로 쪼갭니다.

(보기 편하기 위해 4bit 단위로 띄어쓰기를 합니다.)

부호 데이터는 제일 왼쪽에 있는 데이터 (최상위 비트(MSB:Most Significant Bit))가 0이면 양수, 1이면 음수입니다. 

 

사람들은 음수를 표현하기 위해서 부호데이터를 사용했지만, 여전히 불편함은 존재했습니다. 1과 -1을 더할 경우를 살펴보겠습니다.

 

0000 0001
1000 0001+
----------
1000 0010

1 + (-1)의 결과로 -2가 나왔습니다. 사람들은 이를 해결하기 위해서 1의 보수를 도입합니다.

1의 보수란, 연산자와 피연산자의 합이 1이여야 한다는 의미입니다. 즉, 0010 1000의 1의 보수는 1101 0111입니다.

즉, 양수에 1의 보수를 취하면 그 수의 음수가 나온다는 뜻입니다. 

 

예를 들어 7(0000 0111)를 1의 보수로 취하면 -7(1111 1000)입니다.

0000 0001
1111 1110+
-----------
1111 1111

연산 결과로 0이 나왔습니다. 하지만 0000 0000도 0이고 1111 1111도 0입니다. 이외에도 여러가지 불편함으로 인해 다른 방식을 도입합니다.

 

바로 2의 보수를 취하는 겁니다. 2의 보수는 1의 보수에 1을 더해서 쉽게 구할 수 있습니다.

 0000 0001
 1111 1111+
 ----------
10000 0000

연산의 결과로 데이터 표현 가능범위를 넘어선 값(올림수(carry)라고 한다)이 나왔습니다. 컴퓨터는 할당받은 메모리 안에서 계산해야하므로 마지막 1은 버려줍니다.

   0000 0001
   1111 1111+
   ----------
(1)0000 0000

이게 실제로 컴퓨터가 쓰는 방식입니다.

 

02-3.1 실수의 표현

정수는 부호, 정수 이렇게 두 가지로 표현이 가능했습니다. 실수는 부호, 지수부, 가수부 이렇게 세 가지로 표현 합니다.

컴퓨터는 IEEE에서 채택한 부동소수점 방식을 사용합니다.

위 그림의 경우 4byte(32bit)의 크기를 가집니다. 따라서 ±1.m x 2^(e-127)으로 표현할 수 있습니다.

정확한 표현 방법은 wiki를 참고하기 바랍니다.. 조금 복잡합니다..

반응형
Comments