Tiny Finger Point Hand With Heart
본문 바로가기
JAVA

[JAVA] 자료형(Data Type)

by yoondii 2023. 2. 26.
728x90
반응형

1.  자바의 자료형

Java의 자료형에는 기본형(Primitive Type), 참조형(Reference Type) 2가지가 존재한다.

자료형은 다른 말로 Data Type이라 부르기도 한다.

 

1.1. 변수와 메모리

변수를 선언하면 해당되는 자료형의 크기 만큼 메모리가 할당.
변수는 할당된 메모리를 가리키는 이름을 말한다.


예를들어
int level = 10; // 4바이트 정수형 메모리가 level 이라는 이름으로 할당 된다.

 

2.  기본 자료형의 종류와 크기

자바에서 기본적으로 제공해주는 기본 자료형으로 primitive type이라 한다.

int, double, float, char 등등

기본형 데이터 타입은 변수에 값이 직접 저장되어 스택(stack) 영역에 저장되어 있다.

> byte와 short

  • byte : 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용.
  • short : 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용.

> int

  • 자바에서 사용하는 정수에 대한 기본 자료 형
  • 4바이트 단위의 자료형
  • 프로그램에서 사용하는 모든 숫자(리터럴)은 int 로 저장됨.
  • 32 비트를 초과하는 숫자는 long 자료형으로 처리.

> long

  • 8바이트 자료형
  • 숫자의 뒤에 알파벳 L 또는 l 을 써서 long 형임을 표시 함.
  • 예) int num = 12345678900; // 오류
    long lnum = 12345678900; //오류
    long lnumber = 12345678900L; // ok

> float 와 double

  • 실수는 정수 보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함
  • 부동 소수점 방식으로 실수 값 0.1 표현
  • 지수부와 가수부로 표현 함
  • 컴퓨터에서는 밑수를 2로 사용
  • 정규화 : 가수가 밑수보다 작은 한 자리까지 가수로 표현 되는 것
  • 컴퓨터에서는 밑수가 2 이므로 정규화를 하게 되면 가수부분의 첫 번째 자리 숫자는 항상 1임
    예) 0.2 표현 0.4 X 2-1 정규화 하면 1.6 X 2-3
  • 부동 소수점 방식의 오류
    • 지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다.
public class DoubleTest2 {

	public static void main(String[] args) {

		double dnum = 1;
		
		for(int i = 0; i<10000; i++) {
			dnum = dnum + 0.1;
		}
		System.out.println(dnum);
	}
}
----------------------------------------
1001.000000000159

 

> char 문자 자료형

 

  • 어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의.
  • A 는 65
  • 문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(charater set)라 함.
    (ex. ASKII, euc-kr, utf-8, utf-16)
  • 자바는 문자를 나타내기 위해 전세계 표준인 UNICODE를 사용
  • utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)
  • 문자를 위한 데이터 타입 char ch = 'A';
  • 내부적으로 숫자료 표현되므로 숫자를 넣어도 문자가 출력될 수 있음.
character set: 문자를 숫자로 변환한 값의 세트

encoding: 문자가 숫자로 변환되는 것
decoding: 숫자에서 다시 문자로 변환되는 것

ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트

UNICODE: 전 세계 표준으로 만든 문자 세트

UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음

UTF-16: 2바이트로 문자를 표현

 

 

> 논리형

  • true(참), false(거짓) 두 가지만 나타냄
  • 1바이트를 사용 함
  • 값이 존재하는지, 배열이 비었는지, 결과가 참인지 거짓인지등을 표현
  • 지역변수자료형 없이 사용하기(JAVA10이상부터 지원)
    • Local variable type inference
    • 추론 가능한 변수에 대한 자료형을 선언하지 않음
    • 한번 선언하여 추론 된 변수는 다른 타입의 값을 대입 할 수 없음
    • 지역 변수만 사용 가능
public class LocalVariableType {

	public static void main(String[] args) {

		var i = 10;
		var j = 10.0;
		var str = "hello";
		
		System.out.println(i);
		System.out.println(j);
		System.out.println(str);
		
		str = "test";
		//str = 3; 
	}
}

 

public class Main {

    public static void main(String[] args) {
        // 정수형
        byte bNum = 1; // 1byte
        short shortNum = 123; // 2byte
        int num = 1000; // 4byte
        long bigNum = 12345678900L; // long은 뒤에 L을 붙여줘야 함, 8byte

        // 문자형
        char c = 'a';
        char cNum = 100; // 참고. 숫자도 넣을 수 있음

        // 실수형
        float f = 1.23f; // float는 뒤에 f를 붙여줘야 함
        double d = 1.234;

        // 논리형
        boolean isActive = false; // 거짓
        boolean isExists = true; // 참
    }
}

 

 

 

여기서 파이썬과 비교할 점은 파이썬은 문자열을 사용할 때 ' ' , " " 둘 다 사용해도 무방했다. 짝만 잘 맞춰주면 되었지만, 자바는 아니다.

' '은 문자 하나만을 의미하는 것이고, " "은 문자열을 의미한다. 

헷갈리지 않게 잘 사용해야한다. 

 

3. 참조형 Reference Type

클래스 자료형으로 프로그래머가 정의한 클래스로 만들어진 자료형 reference type이라 한다.

- String, StringBuilder, ArrayList, HashMap 등등

참조형 데이터 타입은 값이 저장되어 있는것이 아니라 값의 주소값이 힙(heap) 영역에 저장되어있다.

package type;

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        // ...중략...
        
        // 참조형
        int[] numbers = {1, 2, 3, 4, 5};
        
        String name = "홍길동"; // 문자열
        
        List<Integer> scores = new ArrayList<>(); // 리스트 
        scores.add(80);
        scores.add(99);
    }
}

 

 

728x90
반응형

댓글