자바 변수의 타입에 대해서 알아보자

2024. 12. 17. 13:00JAVA

728x90
반응형

 안녕하세요. 진득 코딩입니다.

 

 저번 시간에는 자바의 변수에 대해서 알아보는 포스팅을 했습니다.

 

 이번 시간에는 저번에 배운 변수들의 타입들에 대해서 살펴보도록 하겠습니다.

 

 값(data)의 종류

 

값의 분류

 

  • 값(data)의 종류에는 크게 문자와 숫자로 나눌 수 있습니다.

  • 이 중 숫자는 다시 정수와 실수로 나눌 수 있습니다.

  • 이러한 값(data)의 종류(type)에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것이 자료형(data type)입니다.

  • 자료형에는 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 등이 있습니다.

기본형과 참조형

 

 자료형은 크게 기본형과 참조형으로 나눌 수 있습니다.

  1. 기본형 변수

    - 실제 값(data)을 저장합니다.

    - 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)으로 나뉩니다.

  2. 참조형 변수

    - 어떤 값이 저장되어 있는 주소(memory address)를 값으로 갖습니다.

    -  8개의 기본형을 제외한 나머지 타입을 말합니다.

    - 참조형 변수(참조 변수)를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 됩니다.

    - 클래스이름 변수이름; 꼴로 선언하게 됩니다.

기본형(primitive type)

 

 기본형을 제외한 모든 타입은 참조형이기 때문에 참조형의 범위는 너무 넓습니다.

 반면에 기본형은 딱 8가지이기 때문에 일단 기본형에 대해서 자세히 살펴보도록 하겠습니다.

분류 타입
논리형  boolean

 true와 false 중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용됩니다.

문자형  char

 문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장할 수 있습니다.

정수형  byte, short, int, long

 정수를 저장하는데 사용되며, 주로 int가 사용됩니다.
 
 byte는 이진 데이터를 다룰 때 사용되며, short은 C언어와의 호환을 위해 추가되었습니다.

실수형  float, double

 실수를 저장하는데 사용되며, 주로 double이 사용됩니다.

 

 문자형인 char는 내부적으로 정수(유니코드)로 저장하기 때문에 정수형과 별반 다르지 않으며, 정수형 또는 실수형과도 연산이 가능합니다.

 boolean을 제외한 나머지 7개의 기본형은 서로 연산과 변환이 가능합니다.

  1byte 2byte 4byte 8byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

  • 4개의 정수형 중에서 int형이 기본 자료형(default data type)이고, 실수형 중에서는 double이 기본 자료형입니다.

  • int가 CPU가 가장 효율적으로 처리할 수 있는 타입이기 때문에 일반적으로 int를 많이 사용합니다.
  • 아래 있는 문장들을 통해서 위 표를 외워두면 좋습니다.

 boolean은 true와 false 두 가지 값만 표현할 수 있기 때문에 가장 작은 크기인 1byte입니다.

 char은 자바에서 유니코드(2 byte 문자체계)를 사용하므로 2byte를 사용합니다.

 byte는 크기가 1 byte라서 byte입니다.

 int(4byte)를 기준으로 짧아서 short(2byte), 길어서 long(8byte)입니다.

 float는 실수값을 저장하기 때문에 int보다는 많은 데이터를 담아야 하기 때문에 8byte를 사용합니다.

 double은 float보다 두 배의 크기(8byte)를 갖기 때문에 double입니다.

 

 자료형이 가질 수 있는 값의 범위는 정수형(byte, short, int, long)의 경우 '-2^(n-1) ~ 2^(n-1)-1'의 범위를 가지고 있다는 정도만 기억하고 있으면 됩니다.

 실수형을 사용할 때에는 정밀도(precision)을 기준으로 구분하여 선언해 줍니다.

 정밀도는 n자리일 때, 10진수로 7자리의 수를 오차 없이 저장할 수 있다는 의미를 가지고 있습니다.

 따라서 7~9자리의 수를 계산할 때는 넉넉하게 long타입(약 19자리)으로 변수를 선언하는 것이 좋습니다.

 

상수 ( constant )

 

  • 상수(constant)는 한 번 값을 저장하면 다른 값으로 변경할 수 없는 값을 저장할 수 있는 공간입니다.

  • 변수의 타입 앞에 키워드 'final'을 붙여서 사용합니다.

  • 상수는 반드시 선언과 동시에 초기화해야 합니다.

  • 상수의 이름은 암묵적으로 모두 대문자로 하는 것이 관례이며, 여러 단어로 이루어져 있는 경우에는 '_'로 구분합니다.

리터럴 ( literal )

 

  • 리터럴은 그 자체로 값을 의미하는 것을 말합니다.

  • 우리가 통상적으로 알고 있는 상수를 프로그래밍에서는 리터럴이라고 부릅니다.

  • 리터럴에 접미사를 붙여서 타입을 구분합니다.

  • 정수형의 경우, long 타입의 리터럴에 접미사 'l' 또는 'L'을 붙이고, 접미사가 없으면 int 타입의 리터럴로 간주합니다.

  • byte와 short 타입의 리터럴은 별도로 존재하지 않으며, byte와 short 타입의 변수에 값을 저장할 때는 int 타입의 리터럴을 사용합니다.

2, 8, 16진수로 표현된 리터럴

 

  • 16진수라는 것을 표시하기 위해 리터럴 앞에 접두사 '0x' 또는 '0X'를, 8진수의 경우에는 '0'을, 2진수의 경우 '0b'를 붙입니다.

숫자 구분자

 

  • 또한 JDK1.7부터 정수형 리터럴의 중간에 구분자 '_'를 넣어 큰 숫자를 편하게 읽을 수 있습니다.

올바른 접미사 사용
잘못된 접미사 사용

 

  • 실수형에서는 float타입의 리터럴에 접미사 'f' 또는 'F'를 붙이고, double 타입의 리터럴에 접미사 'd' 또는 'D'를 붙입니다.

  • double은 기본 자료형이라서 접미사 'd'는 생략이 가능합니다.

  • 리터럴의 접두사와 접미사는 대소문자를 구분하지 않으므로 대소문자 중 어떤 것을 사용해도 되지만 소문자 'l'의 경우 숫자 '1'과 헷갈리기 쉬우므로 대문자인 'L'을 사용하는 것이 좋습니다.


자료형 실수형 리터럴 다른 형태의 동등한 표현
double 10. 10.0
double .10 0.10
float 10f 10.0f
float 3.14e3f 3140.0f
double 1e1 10.0
double 1e-3 0.001

 

 리터럴에 소수점이나 10의 제곱을 나타내는 기호 E 또는 e, 그리고 접미사 f, F, d, D를 포함하고 있으면 실수형 리터럴로 간주합니다.

16진 지수 형태로 2의 제곱을 이용해 표현

 

  • 기호 p를 이용해서 실수 리터럴을 16진 지수 형태로 표현할 수 있습니다.

  • p는 2의 제곱을 의미하며, p의 왼쪽에는 16진수를 적고 오른쪽에는 지수를 10진 정수로 적습니다.

  • p가 포함된 리터럴은 실수형입니다.

타입의 불일치

 

타입이 달라도 허용하는 경우

 

 보통 타입이 일치하지 않는 경우는 허용하지 않지만 위와 같이 타입이 달라도 저장 범위가 넓은 타입에서 좁은 타입의 값을 저장하는 것은 허용합니다.

타입이 달라서 에러

 

 위와 같이 리터럴의 값이 변수의 타입의 범위를 넘어서거나, 리터럴의 타입이 변수의 타입보다 저장 범위가 넓으면 컴파일 에러가 발생합니다.

 

byte와 short 리터럴은 int 리터럴로

 

 byte와 short 리터럴은 따로 존재하지 않으므로 위와 같이 선언하게 되면 int 리터럴을 사용하게 됩니다.

문자 리터럴과 문자열 리터럴

 

문자 리터럴과 문자열 리터럴

 

  • 'A'와 같이 작은따옴표로 문자 하나를 감싼 것을 '문자 리터럴'이라고 합니다.

  • 두 문자 이상은 큰 따옴표로 감싸야하며 이를 '문자열 리터럴'이라고 합니다.

문자 리터럴과 문자열 리터럴의 공백

 

  • char 타입의 변수는 단 하나의 문자만 저장할 수 있으므로, 여러 문자(문자열)를 저장하기 위해서는 String 타입을 사용해야 합니다.

  • 문자열 리터럴은 ""안에 아무 문자도 넣지 않는 것을 허용하며, 이를 빈 문자열(empty String)이라고 합니다.

  • 문자 리터럴에는 반드시 ''안에 하나의 문자가 있어야 합니다.

  • 원래 String은 클래스이므로 연산자 new를 사용해야 하지만 특별히 new 없이 사용 가능합니다.

문자열의 결합

 

  • 문자열은 위와 같이 덧셈 연산자를 이용하여 문자열을 결합할 수 있습니다.

  • 피연산자 중 어느 한쪽이 String이면 나머지 한쪽을 먼저 String으로 변환한 다음 두 String을 결합하게 됩니다.

  • 기본형 타입의 값을 문자열로 변환할 때 아무런 내용도 없는 빈 문자열("")을 더해주면 됩니다.


 문자열 + any type -> 문자열 + 문자열 -> 문자열

 any type + 문자열 -> 문자열 + 문자열 -> 문자열

 

마지막으로 그동안 배운 내용을 예제를 통해서 살펴보도록 하겠습니다.

 

 위 예제를 통해 문자열 간의 덧셈 연산이 가능하다는 것을 확인하고 덧셈 연산을 하는 피연산자 중 어느 한쪽이라도 String이라면 String으로 변환된 후 덧셈 연산이 되어서 출력이 되는 것을 확인할 수 있습니다.

 


 

 이번 시간에는 변수의 타입에 대해서 살펴보았습니다.

 

 여러 변수들의 타입들을 숙지하고 상황에 맞는 타입을 잘 사용할 수 있어야 원활하게 프로그래밍을 할 수 있습니다.

 따라서 이번 포스팅에서 다룬 변수의 타입들에 대해서 잘 숙지하여 원활한 프로그래밍이 되길 바라겠습니다.

 이번 포스팅은 여기까지입니다.

 

 끝까지 봐주셔서 감사합니다.😊

728x90
반응형
LIST