공부/전자컴퓨터공학

Java 변수(variable)와 타입(Type) 자바 기초 배우기

AhJustC 2024. 5. 7. 00:54
반응형
변수(Varible)

값이 변할 수 있는 데이터를 임시로 저장하기 위한 수단으로 메모리 공간을 확보하고 사람이 식별할 수 있는 이름을 붙인 것이라고 보면 되겠다.

 

변수 선언

변수를 선언한다는 것은 어떤 값을 저장할 메모리 공간을 확보하고, 해당 메모리 공간을 식별할 수 있는 이름을 붙이는 것을 의미한다.

 

값 할당

변수에 값을 저장하는 것을 할당 또는 대입이라고 한다. 변수 선언 후 처음으로 값을 할당하는 것을 초기화라고 한다. 초기화가 이루어진 이후에 다시 다른 값을 할당하는 것을 재할당 이라고 한다.

 

상수(Constant)

상수는 재할당이 금지된 변수로 변하지 말아야 할 데이터를 임시로 저장하기 위한 수단이다. final 이라는 키워드를 사용해 선언할 수 있으며 관례로 대문자에 언더바를 넣어 사용한다. 상수를 사용하는 이유는 다음과 같다.

  • 프로그램이 실행되면서 값이 변하면 안되는 경우
    프로그래머가 실수로 상수에 값을 재할당하고자 하면 에러가 발생하여 실수를 방지할 수 있다.
  • 코드 가독성을 높이는 이유
    상수를 사용하면 값을 저장하고 있는 상수 명으로 값을 사용할 수 있기 때문에 코드 가독성이 향상된다.
  • 코드 유지관리를 손쉽게 하고자 하는경우
    예를 들어 상수로 'final double CALCULATOR_PI = 3.14;' 가 선언된 프로그램에서 정밀도를 높이고자 3.241592로 값을 바꾸고 싶다면 상수만 변경하면 프로그램 전체애서 바뀐다.
타입(Type)

타입은 어떤 값의 유형 및 종류를 의미하며 타입에 따라 값이 차지하는 메모리 공간의 크기와 값이 저장되는 방식이 결정된다.  자바의 타입은 실제 값을 의미하는 기본타입과 어떤 값이 저장된 주소를 값으로 하는 참조 타입이 있다.

  • 기본타입(primitive type)
    값을 저장할 때 데이터의 실제 값이 저장된다. 정수타입(byte, short, int, long), 실수타입(float, double), 문자타입(char) 논리타입(boolean) 이 있다.
  • 참조타입(reference type)
    값을 저장할 때 데이터가 저장된 곳을 나타내는 주소값이 저장된다. 8개의 기본형을 제외한 나머지 타입이다.
리터럴(Literal)

사전적 의미인 '문자 그대로의' 뜻처럼, 프로그래밍에서 리터럴이란 문자가 가리키는 값 그 자체를 의미한다. 값 대신 리터럴 이라는 표현을 하는게 개발자들과의 소통에 좋을 것 같다.

정수타입

정수 타입은 숫자를 나타내는 타입으로, byte, short, int, long 초 4개의 타입으로 분류된다. 이들은 각각 차지하는 메모리의 크기가 다르며 그에 따라 나타낼 수 있는 숫자의 범위가 다르다. 근래에는 메모리 용량이 부족한 경우가 거의 없기 때문에 정수형을 사용할때에는 일반적으로 int형을 사용한다. 

타입 메모리 표현범위
byte 1byte -128~127
short 2byte -32,768~32,767
int 4byte -2,147,483,648~2,147,483,647
long 8byte -9,223,372,036,854,775,808~ 9,223,372,036,854,775,807

정수형 리터럴 중 long type의 리터럴의 경우에 뒤어 접미사 L을 붙여 사용하여야 한다. 숫자 1과 혼동이 될 우려가 있어 일번적으로 대문자 L을 사용한다.

// 각 데이터 타입의 표현 범위에 맞는 값을 할당하고 있다
byte  byteNum  = 123;
short shortNum = 12345;
int   intNum   = 123456789;
long  longNum  = 12345678910L;

// 각 데이터 타입의 표현 범위에 벗어난 값을 할당하고 있어 에러가 발생한다.
byte  byteNum  = 130;
short shortNum = 123456;
int   intNum   = 12345678910;

// 숫자가 길면 언더바로 구분할 수 있다.
int   intNum   = 12_345_678_910;
long  longNum  = 12_345_678_910L;

 

정수형의 오버플로우와 언더플로우

  • 오버플로우
    자료형이 표현할 수 있는 범위중 최대값 이상의 값을 표현할 경우 발생한다. 최대값을 넘어가면 해당 데이터 타입의 최소값으로 값이 순환된다.
  • 언더플로우
    자료형이 표현할 수 있는 범위중 최소값 이하의 값을 표현할 경우 발생한다. 최소값을 넘어가면 해당 데이터 타입의 최대값으로 값이 순환된다.
실수타입

실수는 소수점을 가지는 값을 의미하며 float형과 double 형으로 분류된다.

타입 메모리 표현범위 정밀도
float 4byte 음수: -3.4*10^38~-1.4*10^-45
양수: 1.4*10^-45~3.4*10^38
7자리
double 8byte 음수: -1.8*10^308~-4.9*^10^-324
양수: 4.9*10^-324~1.8*10^308
15자리

 

double형 리터럴에는 접미서 d를 붙여도, 붙이지 않아도 되지만, float형은 리터럴에 반드시 접미사 f를 붙여주어야 한다.

double형은 float보다 더 큰 실수를 저장할 수 있으며 더 정확하게 저장할 수 있다.

// float형 리터럴을 float형 변수에 할당
float num1 = 3.14f;

// double형 리터럴을 double형 변수에 할당
double num2 = 3.141592d;
double num2 = 3.141592;

 

실수형의 오버플로우와 언더플로우

  • 오버플로우
    값이 음의 최소범위 또는 양의 최대범위를 넘어갔을 때 발생하며 이때 값은 무한대가 된다.
  • 언더플로우
    값이 음위 최대범위 또는 양의 최소범위를 넘어갔을 때 발생하며 이때 값은 0이 된다.
반응형
논리타입

논리 타입은 boolen형으로 참 또는 거짓을 저장할 수 있는 데이터 타입으로 true, false를 값으로 가진다. 단순히 참과 거짓을 표현하기 위해서는 1bit만 있으면 되지만 JVM이 다룰 수 있는 데이터의 최소단위가 1byte로 boolen 형은 1 byte(8bit)의 크기를 가진다. boolen형은 조건문과 함께 자주 사용되므로 향후 다시 실습해보기로 하자.

 

문자타입

문자 타입은 2byte의 크기의 char형이 있다. 문자타입 변수를 선언하면 해당 변수에 오직 하나의 문자형 리터를을 저장할 수 있으며 반드시 작은따옴표를 사용하여야 한다. 자바는 유니코드로 문자를 저장한다.

 

반응형