[자바/JAVA] 기본타입(Primitive type) vs 참조형타입(Reference type) 비교해보자!

박정현·2023년 6월 15일
0
post-thumbnail
post-custom-banner

자바에서 변수를 선언할 때는 주어지는 타입에 따라 변수에 저장할 수 있는 값의 종류와 허용범위가 달라진다. 변수를 선언한 뒤에는 값을 변경할 수 없다는 것을 명심하자. 변수의 타입은 기본타입(primitive type)과 참조형타입(reference type)으로 나뉘는데 먼저 기본타입에 대해 알아보자.

1. 기본타입(Primitive type)

1) 기본타입표

1248
정수형byteshortintlong
실수형floatdouble
문자형char
논리형boolean
  • 기본타입은 하나의 데이터만 들어간다.
  • 기본타입은 총 8가지가 있는데 데이터의 종류에 따라 정수형, 실수형, 문자형, 논리형으로 나뉘고 메모리 사용크기에 따라 1byte, 2byte, 4byte, 8byte로 나뉜다.
  • 각 해당하는 메모리 사용크기를 넘는 데이터를 저장했을 때는 컴파일 에러를 발생시킨다.
  • int <<< double < 나머지 순으로 많이 쓰임
  • 소스코드에서 프로그래머에 의해 직접 입력된 값을 리터럴이라 부른다.

2) 정수형, 실수형, 문자형, 논리형

[ 정수형 ]

  • 정수타입을 저장할 수 있는 타입으로 byte, short, int, long + char까지 5가지가 있다.
  • 1byte는 -2^7 ~ 2^7-1(-127~127)까지의 데이터를 저장할 수 있으며 1byte가 올라갈수록 ^7을 더한 값을 저장할 수 있다.
  • 정수형에서 int형이 기본값이다. 다른 정수형 타입을 연산하면 결과값이 int형이 된다.
byte num1 = -10;
byte num2 = 200; //컴파일에러: 메모리사용크기 초과
int num3 = 200;
long num4 = 200;

[ 실수형 ]

  • 소수점이 있는 실수 리터럴을 저장할 수 있는 타입이다.
  • float과 double 2가지가 있다.
  • 자바에서은 실수 리터럴을 기본적으로 double타입으로 해석하기 때문에 실수는 double타입에 저장한다. 만약 float타입에 저장하고 싶다면 실수다음에 f를 붙이도록 한다.
float num5 = 3.14; //컴파일 에러: double로 인식하여 float에 저장할 수 없음
float num6 = 3.14f; 
double num7 = 3.14;

[ 문자형 ]

  • 문자형은 정수와 작은따옴표(’’)로 감싸진 문자리터럴을 유니코드로 변환하여 저장한다.
  • 문자리터럴은 유니코드로 변환되어 저장되는데 유니코드는 세계 각국의 문자를 2byte로 표현할 수 있는 숫자(0~65535)로 매핑한 국제 표준 규약을 말한다.
char num8 = 'a'; //유니코드: 97
char num9 = 97;
int num10 = 'a';
System.out.println(num8); // 소문자 a 출력
System.out.println(num9); // 소문자 a 출력
System.out.println(num10); // 숫자 97출력
  • 문자리터럴은 유니코드로 변환되기 때문에 int 타입에도 저장할 수 있다. char타입에서는 자동으로 매핑되어 저장되지만 int 타입에서는 유니코드 자체가 출력된다.

[ 논리형 ]

  • 논리형 즉, boolean은 true와 false을 반환한다.
  • 기본값은 false이다.
  • 논리형은 사실 2개의 데이터만 저장하면 되기 때문에 1bit면 충분하지만 메모리에 저장하는 데이터의 최소단위가 1byte이기 때문에 1byte인 것이다.

2. 참조형타입(Reference type)

앞서 자바의 타입 중 기본타입에 대해 알아보았다. 이번에는 참조형타입에 대해 알아보자.

참조형 타입은 객체의 번지를 참조하는 타입으로 String, 배열, 열거, 클래스, 인터페이스를 말한다.

참조형타입을 객체타입이라고도 한다.

1) 기본타입 VS 참조형타입

  • 기본타입 변수는 값을 직접 대입하고 하나의 값만 저장할 수 있다.
  • 참조타입 변수는 객체의 주소값을 대입하는데 이 변수를 객체참조변수라고도 한다.

❓ 기본타입과 참조형타입은 데이터를 저장하는 곳이 다르다. 각각 어디에 저장할까?

  • 위의 그림을 보면 변수는 스택에 객체는 힙영역에 저장되는 것을 볼 수 있다.

2) 객체생성연산자 new

  • new를 통해 메모리에를 저장할 수 있는 객체의 주소를 생성할 수도 있다.
  • new를 통해 객체를 생성하면 메모리 Heap영역에 데이터를 저장할 공간을 할당받고 그 공간의 참조값을 객체에게 반환한 뒤 생성자를 호출한다.
✅ **클래스 객체변수 = new 클래스( );**
  • 클래스: 자료형
  • 객체변수: 참조값 저장(인스턴스 핸들)
  • new: 메모리 Heap에 할당받고 인스턴스를 생성하여 참조값을 리턴
  • 클래스(); : 생성자 호출

🙋‍♂️ 값을 입력받을 수 있는 Scanner클래스 객체를 생성하는 예제

Scanner input = new Scanner([System.in](http://system.in/)); //new로 새로운 주소값 생성
System.out.println("권한을 입력하세요.");  //입력받을 수 있음
String role = input.next();  // 입력받은 값을 변수 role에 저장

3. 요약

자바에서는 타입을 크게 기본타입(Primitive type)과 참조형타입(Reference type)으로 나뉜다.

기본타입은 하나의 데이터가 스택영역에 저장되지만 참조형 타입은 힙영역에 객체를 생성하여 번지를 참조한다.

기본타입의 종류로는 byte, short, int, long, float, double, char, boolean으로 총 8가지가 있으며 저장할 수 있는 메모리의 크기를 초과하거나 다른 타입에 해당하는 값을 넣었을 때 컴파일 에러가 발생한다.

참조형타입의 종류로는 사실상 기본타입을 제외한 모든 것이라고 할 수 있다. 그 중 대표적으로 String, 배열, class, interface가 있는데 이는 다음에 다시 배우겠다.

profile
개발을 개발괴발하지 않기 위한 노력
post-custom-banner

0개의 댓글