구분 | 값의 분류 | 타입의 종류 |
기본 타입 (primitive type) |
정수 타입 | byte, char, short, int, long |
실수 타입 | float, double | |
논리 타입 | boolean |
java에서 사용하는 변수들은 위와 같이 있다. 사실 요즘에는 Java 10 버전 이후에는 var로 변수를 선언하여서
위의 정수타입이나 실수 타입을 잘 알지 못하여도 아무런 문제없이 사용 가능하다. 하지만 필자는 교육용으로 아래 버전을 사용하기도 하고, 알아둬서 나쁠 것 없으니 변수의 타입에 대해 알아보도록 하겠다.
타입 | 메모리 사용 크기 | 값의 허용 범위 | ||
byte | 1byte | -2^7 ~ (2^7-1) | -128~127 | |
short | 2byte | -2^15 ~ (2^15-1) | -32,768 ~ 32,767 | |
char | 2byte | 0 ~ (2^16-1) | 0 ~ 65535 (유니코드) | |
int | 4byte | -2^31 ~ (2^31-1) | -2,147,483,648 ~ 2,147,483,647 | |
long | 8byte | -2^63 ~ (2^63-1) | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
표에서 값의 허용범위는 알 필요가 없지만 메모리 사용 크기는 알아두면 좋다.
위의 정수타입에선 char형을 주의해야한다. char 타입은 음수값을 가질 수 없으며, ' ' 사이에 있는 문자를 유니코드로 변환하여서 출력해준다. 이것을 '문자 리터럴(literal)' 이라고 한다.
char 형은 오직 문자 하나만 받아들일 수 있으며, 문자가 두개 이상 있는것을 문자열이라고 하며 문자열을 사용하기 위해선 String 형을 사용해야 한다.
String은 참조 타입(reference type)중 하나이며 참조 타입에 대해서는 나중에 자세히 배우도록 하고, 여기선 간단히
char형과 string형의 사용방법과 차이점에 대해 알아보도록 하겠다.
char c1 = 'A'; //성공
char c2 = '아'; //성공
char c3 = 20; //성공,10진수 저장
char c4 = '\uAB01' //성공,16진수 저장
char c5 = 'ab'; //에러,한 문자만 가능
char c6 = "A"; //에러,문자열은 불가능
char의 사용법은 위와 같다. 기본적으로 한 문자만 입력하거나, 혹은 2byte 이내의 양수를 직접적으로 주거나
'\u' 를 사용하여 16진수의 값을 줄 수 있다.
하지만 char형은 2개이상의 문자를 저장하지 못하고, 쌍따옴표인 문자열 또한 저장할 수 없기 때문에 이에 대해선
에러가 발생한다.
String s1 = "A";
String s2 = "abcd";
String s3 = "가나다";
String 형은 위와같이 사용이 가능하다. 한문자만 들어가는 문자열이든, 여러가지 문자가 들어간 문자열이든 다 값을 저장해준다. 한가지 주의할점은 String의 S는 대문자를 사용해 주어야 한다는 점이다.
또한 String 형은 이스케이프 문자도 저장할 수 있는데 우선 이스케이프 문자에 대해 알아보겠다.
이스케이프(Escape) 문자
이스케이프 문자는 문자열에서 다양한 기능을 해주고, 역슬래시 + 다른문자를 합쳐서 나타낸다.
\t : tab을 한번 누른만큼 떄준다.
\n : 줄을 바꿔준다.
\r : 캐리지 리턴
\" : " 출력
\' : ' 출력
\\ : \(역슬래시) 출력
\u : 16진수 유니코드에 해당하는 문자 출력
package chapter01;
public class EscapeExample {
public static void main(String[] args) {
System.out.println("1반\t철수");
System.out.println("다음줄로 갈게요\n왔어요");
System.out.println("나는 \"간지남\"이다.");
System.out.println("6월\\7월\\8월");
}
}
위는 사용 예시이다. 위의 코드대로 출력시 아래와 같은 결과가 나온다.
타입 | 메모리 사용 크기 | 값의 허용 범위 | 정밀도(소수점 이하 자리) |
float | 4byte | (1.4*10^(-45)) ~ (3.4*10^38) | 7자리 |
double | 8byte | (4.9*10^(-324)) ~ (1.8*10^308) | 15자리 |
실수 타입으론 float과 double이 존재한다.
float과 double은 같이 3.14란 값을 넣어도 실제 컴퓨터에선 다른 값을 가지게 된다.
그 이유는 정밀도의 개념 떄문인데, 부동 소수점을 사용하는 컴퓨터에선 같은 0.1 이란 값도
0.0999999..... 이나 0.10000....1 처럼 근사치를 가지게 되기 때문인데, 이때 float과 double의 정밀도 차이 때문에
우리가 보기에는 같은 값으로 보이더라도 컴퓨터 메모리 상에선 다른 값을 가지게 된다는 것이다.
이러한 차이점 때문에 우리가 변수값을 줄 때 0.1 이라고 값을 주면 컴퓨터에선 double 타입으로 인지한다. 따라서,
float형을 사용할땐 그냥 실수를 적어주기만 하면 java에서 double이라 인지하기 때문에. 이를 해결해주기 위해선
실수 뒤에 f나 ,F를 붙여줘서 이 숫자가 float형 이라고 알려줘야한다.
float a = 1.112; //에러(우측은 double형)
float b = 1.112f; //정상
float c = 1.112F; //정상
실수형 표현 방식에는 단순히 숫자를 적는 것 외에 한가지 방법이 더 존재한다.
실수 리터럴 e(E)를 사용해주는 것이다.
float a = 5e2f; // 5.0 x 10^2 = 500.0
double b = 0.12E-2 // 0.12 * 10^(-2) = 0.0012
논리 타입 boolean
논리 타입은 참과 거짓을 의미하는 논리 리터럴로 true와 false를 사용한다.
논리 리터럴은 1byte의 크기를 가지고, 후에 배울 조건문 등에서 자주 사용하게 될 것이다.
'language > java' 카테고리의 다른 글
6. [java] 변수의 입출력 (0) | 2021.06.10 |
---|---|
5. [java] 변수의 타입 변환(Promotion & Casting) (0) | 2021.06.09 |
3. [java] 변수(Variable) 선언과 초기화(Declare & initialization) (0) | 2021.06.09 |
2. [java] 프로젝트 생성하기 및 Hello World 출력하기 (0) | 2021.06.08 |
1. [java] JAVA설치 및 개발 환경 구축 (0) | 2021.06.07 |