1. 타입(Type)
- 타입은 데이터 값의 특성을 표시해 주는 역활을 한다
- 값이 차지하는 메모리의 크기와 저장되는 방식을 결정한다
2. 타입의 분류
1) 기본 타입(primitive type)
- 'OO은 OO이다' 와 같이 직접적으로 표현하는 데이터이다
- 데이터의 실제 값을 의미하며 4가지 타입으로 구분된다
- 정수 타입 : byte, short, int, long
- 실수 타입 : float, double
- 문자 타입 : char
- 논리 타입 : Boolean
2) 참조 타입(reference type)
- 데이터가 저장된 주소값을 의미한다
- 객체의 주소를 저장한다
- 참조타입변수 = 객체; - 8개의 기본타입을 제외한 나머지를 참조 타입이라 한다
- ‘OO은 OO에서 찾을 수 있다’처럼 간접적으로 표현하는 데이터이다
class Example {
public static void main(String[] args) {
Object object = new Object(); //Object 객체를 참조변수 object에 저장한다
System.out.pringln(object); //참조변수 object가 저장하고 있는 값을 출력한다
}
}
- 상기 예제를 실행하면 다음과 같은 결과가 출력된다
- System.out.println(object); 의 결과로 Object 객체에 대한 주소값을 출력한다
- 저장하려는 객체의 위치, 주소값을 저장하는 변수를 참조타입 변수 라고 한다
3. 정수 타입(byte, short, int, long)
: 숫자 데이터를 의미하며 크기별로 타입을 지정해 준다
1) 정수 타입의 종류
타입 | 메모리 | 범위 | 기타 |
byte | 1byte | -128(-27) ~ 127(27- 1) | 메모리 Cell의 기본단위 |
short | 2byte | -32,768(-215) ~ 32,767(215- 1) | byte 보다 길고 int(4byte)보다 짧다 |
int | 4byte | -2,147,483,648(-231) ~ 2,147,483,647(231- 1) |
int는 정수(Integer)의 약자이다 |
long | 8byte | -9,223,372,036,854,775,808(-263) ~ 9,223,372,036,854,775,807(263- 1) |
- int(4byte)보다 길다 - long 타입 변수에 값을 할당할 때 4byte의 데이터가 아니라 8byte의 데이터 값이라는 것을 컴파일러에 알려주기 위해 끝에 'L'을 붙인다 |
※ byte= 컴퓨터가 처리하는 정보의 기본 단위
1byte = 8bit = 하나의 문자를 나타내는 가장 작은 단위
1bit = 0 또는 1을 저장하는 최소 단위
2) 정수 타입의 특성
- int는 정수형의 기본타입이다
- 정수를 입력하면 기본적으로 int 로 인식한다
ex1) byte 타입 변수 a에 값 120을 할당하면, byte 범위 내에 있으므로 컴파일러가 byte로 바꿔서 전달한다
byte 타입 변수 a1에 값 128을 할당하면, byte 범위 밖에 있으므로 컴파일러에서 오류가 발생한다
public class Main {
public static void main(String[] args){
Object object =new Object();
byte a = 120; //정상 실행
System.out.println(a);
byte a1 = 128; //byte 127의 범위를 벗어남으로 오류 발생
System.out.println(a1);
}
}
/*java: incompatible types: possible lossy conversion from int to byte 에러 코드 발생
( 호환이 안되는 유형: byte에서 int로 전환 가능하다 ) */
ex2) int 타입 변수 a에 값 120을 할당하면, int 범위 내에 있으므로 컴파일러가 byte로 바꿔서 전달한다
int 타입 변수 a1에 값 2147483648을 할당하면, int 범위 밖에 있으므로 컴파일러에서 오류가 발생한다
public class Main {
public static void main(String[] args){
Object object =new Object();
int a = 120;
System.out.println(a);
int a1 = 2147483648;
System.out.println(a1);
}
}
/*java: integer number too large 에러발생
(정수가 너무 크다 )*/
- long 타입은 입력값 마지막에 'L'을 붙여준다
- 변수의 값이 자료형의 범위를 넘을 경우 오버플로우(overflow) 또는 언더플로우(underflow)가 발생하기 때문에 필요에 따라 long과 같은 타입을 사용
ex3) long 타입 변수 a1에 값 2147483648+'l' 또는 2147483648+'L' 을 할당하면, long 범위 내에 있으므로 컴파일러가 byte로 바꿔서 전달한다
public class Main {
public static void main(String[] args){
Object object =new Object();
int a = 2147483647;
System.out.println(a);
long a1 = 2147483648l;
//마지막에 'l'을 붙이지 않으면 java: integer number too large 에러 발생
System.out.println(a1);
long a2 = 2147483648L;
//마지막에 'l'을 붙여도 에러는 발생하지 않지만 'L'을 사용하여 준자
System.out.println(a2);
}
}
3) 오버플로우(Overflow)
- 자료형이 표현할 수 있는 범위 이상의 값을 표현한 경우 발생하는 현상
- 어떤 값이 byte형이고, byte형의 최댓값인 127을 값으로 가지는 경우, 이 값에 1을 더하면 128이 아니라 -128이 됩니다.
4) 언더플로우(Underflow)
- 자료형이 표현할 수 있는 범위 이하의 값을 표현한 경우 발생하는 현상
- 어떤 값이 byte형이고, byte 형의 최솟값인 -128을 값으로 가지는 경우, 이 값에 1을 빼면 -129가 아니라 127이 됩니다.
4. 실수 타입(float, double)
: 실수는 소숫점을 가지고 있는 값을 말한다
float | double |
4byte = 32bit 소숫점 포함 9자리까지 표시 |
8byte = 64bit 소숫점 포함 18자리까지 표시 |
32비트 IEEE 754 부동 소수점 | 64비트 IEEE 754 부동 소수점 |
접미사 'f'를 사용 | 접미사 'd' 또는 'D'를 사용 |
- 정수가 아닌 소수점 단위의 값을 데이터로 가져올 때 사용한다
- 실수 타입의 값은 두가지 유형 모두 정확하지 않다
public class Grade {
public static void main(String[] args) {
float f1 = 12345.123456789012345678901234567890f;
double d1 =12345.123456789012345678901234567890;
System.out.println("float f1 : " + f1);
System.out.println("double d1 : " + d1);
}
}
result
float f1 : 12345.123
double d1 : 12345.123456789011
5. 논리 타입(boolean)
: 참(true) 또는 거짓(false)를 저장할 수 있는 타입이다
- 값으로 true 와 false를 가진다
- 컴퓨터 언어로 0과 1로 저장하며 1bit로 표현된다
- JVM이 다루는 최소 단위가 1byte이므로 1byte의 크기를 차지한다
- 조건이 참 또는 거짓일 경우 사용한다
public class Grade {
public static void main(String[] args) {
boolean Rain = true;
if (Rain == false) {
System.out.println("우산을 들고 나간다");
}
else {
System.out.println("우산을 놓고 나간다");
}
System.out.println(Rain);
}
}
result
우산을 놓고 나간다
true
6. 문자 타입(char)
: 단 하나의 문자만 저장하는 타입
- 여러 문자를 저장하기 위해서는 문자열(String)를 사용한다
- 문자와 문자열은 전혀 다른 타입이다
- 자바는 유니코드에 바탕을 두고 문자를 표현한다
- cahr 변수 값에 숫자를 할당하여 보면 각기 다른 문자가 출력되는 것을 볼 수 있다
public class Grade {
public static void main(String[] args) {
char a=1;
char a1=12;
char a2=123;
char a3=1234;
char a4=12345;
System.out.println(a);
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
System.out.println(a4);
}
}
result
{
Ӓ
〹
7. 타입 변환
1) 자동 변환
- 바이트 크기가 작은 타입에서 큰 타입으로 변환된다
- 덜 정밀한 타입에서 더 정밀한 타입으로 변환된다
long longValue = 12345L;
float floatValue = longValue;
// float이 long보다 정밀하므로, 자동으로 타입이 변환된다
System.out.println(floatValue);
// 12345.0이 출력된다
2) 수동 변환
- 메모리 용량이 큰 타입에서 작은 타입으로 변환은 자동변환이 되지 않는다
- 큰 데이터 타입을 작은 데이터 타입의 변수에 저장하는 것을 캐스팅(casting)이라고 한다
- 캐스팅 연산자 ( )를 사용하며, 연산자 안에 변환하고자 하는 타입을 작성해 준다
int intValue = 128;
byte byteValue = (byte)intValue;
//int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환
System.out.println(byteValue);
//출력값은 byte의 최대 표현 값인 127이 아니라 -128이다
//표현 범위를 넘으면 한 바퀴를 돌아 음수로 출력하기 때문이다
※ 참조
https://stackoverflow.com/questions/5071040/java-convert-integer-to-string
Java - Convert integer to string
Given a number: int number = 1234; Which would be the "best" way to convert this to a string: String stringNumber = "1234"; I have tried searching (googling) for an answer but no many seemed "
stackoverflow.com
https://www.delftstack.com/ko/howto/java/how-to-convert-a-string-to-an-int-in-java/
Java에서 문자열을 int로 변환하는 방법
이 기사에서는 Java에서 String을 int로 변환하는 방법을 소개합니다.
www.delftstack.com
'JAVA' 카테고리의 다른 글
Java - 배열(array) (0) | 2022.05.22 |
---|---|
Java - 변수(variable) (0) | 2022.05.22 |
Java - 개요3. 파일 생성 (0) | 2022.05.19 |
Java - 개요2. JVM & JDK (0) | 2022.05.18 |
Java - 개요1. 정의 (0) | 2022.05.18 |