본문 바로가기
🌈 백엔드/JAVA_기초

JAVA 개념_ 자료형

by 개발자 알마 2023. 2. 13.
반응형

 

 

[1] 자료형 


(1) 기본 자료형 : 실제 값을 저장한다 

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

 

 

  • byte : 1바이트의 자료형 동영상, 음악파일 , 실행 파일 
  • short : 2바이트의 자료형 , C/C++언어와 호환시에 사용한다 
  • int : 4바이트의 정수 자료형 
  • long : 8바이트의 정수 자료형 , 값L을 기재해야 적용된다  
  • double : 실수의 기본 자료형 , float보다 담을수 있는 크기가 크다 

 

 

(2) 기본자료형의 데이터 크기 

 

데이터크기 자료형 수의 범위 
1바이트 = 2⌒8 byte
boolean
2⌒7 ~ 2⌒7-1
2바이트 = 2⌒16 short
char
2⌒15 ~ 2⌒15-1
4바이트 = 2⌒32 int
float
2⌒31 ~ 2⌒31-1
8바이트 = 2⌒64 long
double
2⌒63 ~ 2⌒63-1

 

↓ int를 10으로 표현한다면 (2진수 : 1010)

int는 4바이트이고 32비트의 데이터크기를 갖는다 

0 부호비트 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
1 0

 

 

 

↓ 소수점을 float 표현할때는 값f를 기재한다 

double dnum = 3.14;
float fnum =3.14f;

↓ 32비트를 초과하는 정수를 long 표현할때는 값L를 기재한다 

int num1 = 123;
long num2 =12345678900L;

 

(3) 참조 자료형 : 객체의 주소를 저장한다 

 

자료구조  
자료구조 선형구조 순차리스트 배열 Array    
리스트 List    
연결리스트 단순연결리스트 LinkedList    
이중연결리스트 Doubly LinkedList    
원형연결리스트 Circular LinkedList    
스택 Stack    
Queue    
디큐 Dequeue    
덱(데크) Deque    
비선형구조 트리 일반트리 Tee    
이진트리 binary tree    
그래프 방향그래프      
무방향그래프      
파일구조 순차파일        
색인파일        
직접파일        

 

Collection List ArrayList  
Vector  
LinkedList  
Set HashSet  
TreeSet  
Map Hashtable Properties  
HashMap    
TreeMap    

 

데이터 자체가 아닌 주소값을 저장하여 불러오는 것이기 때문에 

산술연산을 직접적으로 할수 없다 메소드를 활용하여 값을 연산해야한다 

 

 

 

 

[2] 형변환 


(1) 형변환 type conversion 

  • 서로 다른 자료형 간에 연산등의 수행을 위해 하나의 자료형으로 통일한다

 

(2) 묵시적 형변환 = 자동 형변환

 

타입이 가지고 있는 데이터 크기에 따라 데이터 유실없이 형변환이 가능하다 

컴파일러가 생략된 형변환을 자동적으로 추가해준다 

정수형 1바이트 2바이트 4바이트 8바이트
byte char
short
int long

1바이트 크기를 가진 byte가 8바이트를 가진 long 로 형변환이 된다면

데이터 공간이 더 커지는 것이기 때문에 데이터 유실이 없지만 

반대라면 8바이트 → 1바이트가 된다면 데이터유실이 발생할 가능성이 있다 

보통은 사용하는 프로그램으로 인해 자동형변환이 되지 않지만 개발자가 필요하다면 강제형변환 할수 있고 

이로 인해 추후 결과물 오차가 발생할수 있음을 고려해야한다 

 

실수형 4바이트 8바이트
float double

 실수형은 정수형보다 소수점이 있기 때문에 정수형→실수형의 형변환은 데이터 유실이 없지만

실수형 → 정수형의 형변환은 소수점이 없어짐으로 인해 데이터 유실이 발생할수 있다 

// byte -> int 로 형변환 : 1바이트에서 4바이트로 데이터 크기가 커지므로 ok 
byte numA = 10;
int numB = numA;

// int -> float 로 형변환 : 정수에서 실수형으로 섬세해지므로 ok 
int numA = 10;
float numB = numA;

 

 

(3) 강제 형변환

  • 변수나 리터럴의 앞에 변환하고자 하는 타입을 ()와 함께 사용한다 
  • ()는 캐스트 연산자 = 형변환 연산자 라고 한다 
  • 진행한 형변환은 캐스팅이라고 한다 
//int -> byte 로 형변환 : 4바이트에서 1바이트로 데이터 크기가 작아서 데이터 손실 + 강제 형변환
int numA = 10;
byte numB = (byte)iNum;

// double -> int로 형변환 : 실수형에서 정수형으로 소수점 없어지므로 데이터 손실 + 강제 형변환 
double numA = 3.14; 
int numB = (int)numA;

//아스키코드로 강제 형변환
char ch1 = 'A';
System.out.println(ch1);
System.out.println((int)ch1);

 

(4) 산술 변환

피연산자의 타입이 서로 다르다면 연산 전에 형 변환 연산자로 타입을 일치 시켜야한다

규칙1. 피연산자의 값 손실을 최소화해야한다

규칙2. 오버플로우가 발생하지 않도록 타입을 일치시켜야한다 

 

1. long + int 연산 -> long + long 연산으로 변경 -> long 결과 도출 

2. float + int 연산 -> float + float 연산으로 변경 -> float 결과 도출 

3. double + float 연산 -> double + double 연산으로 변경 -> double 결과 도출 

4. byte + short 연산 -> int + int 연산으로 변경 -> int 결과 도출 

5. char + short 연산 -> int + int 연산으로 변경 -> int 결과 도출

 

 

 

 

 

 

[3] 타입의 형변환


 

(1) String →  ??? 변환

 

 

String → int  int num = Integer.parseInt(str)
int num = Integer.valueOf(str)
String → double  double num = Double.parseDouble(str)
double num = Double.valueOf(str)
String → float  float num = Float.parseFloat(str)
float num = Float.valueOf(str)
String → long  long num = Long.parseFloat(str)
long num = Long.valueOf(str)
String → short short num = Short.parseFloat(str)
short num = Short.valueOf(str)
String → char "3".charAt(0)
String → char 배열 String str ="test"
char [] arr = str.toCharArray()
System.out.println(Arrays.toString(arr)
String → ArrayList String str = "test" 
List<Character> arr = new ArrayList<>()
for( char ch : string.toCharArray()) {
arr.add(ch)
}
   

 

(2) 숫자형  String  Char 변환 

 

int num = 1234

double num = 1.23 

float num = (float) 1.23

 

int → String  String str = String.valueOf(num)
String str = Integer.toString(num) 
return 3 + ""
double → String  String str = String.valueOf(num)
String str = Double.toString(num)
float → String String str = String.valueOf(num)
String str = Float.toString(num)
long → String String str = String.valueOf(num)
String str = Long.toString(num)
short → String String str = String.valueOf(num)
String str = Short.toString(num)
int → char  return (char) (3+'0')
return (char)65 -> A 반환

 

 

(3) Char형  숫자형  변환

char  int return '3' -'0'
return (int)'A' -> 65반환
char → String return '3' +""

 

 

 

[3] 오버플로우 


(1) 부호가 없는 정수형 오버플로우 

2진수 1111 이라는 4자리는 4bit로 저장할수 있으나 

덧셈을 통해 10000 이라는 5자리가 될경우 타입이 표현할수 있는 값의 범위를 오버하였기 때문에 오류가 발생할수 있다 

 

(2) 부호가 있는 정수형 오버플로우 

각각 - + 부호의 최대값, 최소값이 다르기 때문에 발생하는 시점이 다르다 

최소값에서 1을 빼면 최대값이 되고 , 최대값에서 1을 더하면 최소값이 된다 

반응형

'🌈 백엔드 > JAVA_기초' 카테고리의 다른 글

JAVA 개념_조건문  (0) 2023.02.16
JAVA 개념_ 반복문  (0) 2023.02.13
JAVA 개념_연산자  (0) 2023.02.13
JAVA 개념_변수  (4) 2023.02.03
JAVA _프로그래밍 언어  (0) 2023.02.03

댓글