Primitive 타입과 Reference 타입의 차이점은 무엇인가요?
Primitive
타입과 Reference
타입은 자바에서 변수 데이터 타입의 종류이며 기본형과 참조형이라고 한다.
변수란 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다.
데이터 타입은 이 변수에 적재될 데이터가 메모리에 어떻게 저장되고 프로그램에서 어떻게 처리해야할지 명시적으로 알려주는 키워드이다.
기본형은 계산을 위해 실제 값이 저장된다.
종류에는 논리형 boolean, 문자형 char, 정수형 byte, short, int, long, 실수형 float, double 이 있다.
종류 | 1 byte | 2 byte | 4 byte | 8 byte |
---|---|---|---|---|
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
선언과 동시에 메모리에 할당
된다.스택
에 저장된다.실제 값
을 가지고 있다.public class Primitive {
boolean boolean_result = false;
byte byte_min = Byte.MIN_VALUE; // -128
byte byte_max = Byte.MAX_VALUE; // 127
short short_min = Short.MIN_VALUE; // -32768
short short_max = Short.MAX_VALUE; // 32767
int int_min = Integer.MIN_VALUE; // -2147483648
int int_max = Integer.MAX_VALUE; // 2147483647
long long_min = Long.MIN_VALUE; // -9223372036854775808L
long long_max = Long.MAX_VALUE; // 9223372036854775807L
float float_min = Float.MIN_VALUE; // 1.4E-45f
float float_max = Float.MAX_VALUE; // 3.4028235E38f
double double_min = Double.MIN_VALUE; // 4.9E-324
double double_max = Double.MAX_VALUE; // 1.7976931348623157E308
char c = 'A';
}
위의 코드를 통해 범위를 찍어보았다. 기본형은 데이터를 찍었을때 실제 값이 나타난다.
참조형은 객체의 주소를 저장한다.
또한 위의 기본형 타입을 제외한 나머지를 말한다. 기본적으로 제공하는 클래스, 프로그래머가 직접 만든 클래스, 배열, 열거, 인터페이스 등이 있다.
값의 주소
가 저장된다.주소를 참조
하여 값을 가지고 온다.힙 영역
에 저장하며, 그 참조값을 갖는 변수는 스택
에 저장한다.public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void sayHello() {
System.out.println("안녕하세요. 제 이름은 " + this.name + "이고, 제 나이는 " + age + "살입니다.");
}
}
public class Main {
public static void main(String args[]) {
Person person = new Person("hmmini", 28);
System.out.println("person = " + person);
String name = person.getName();
int age = person.getAge();
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
person.sayHello();
person.setName("mini");
person.setAge(29);
person.sayHello();
}
}
person = Person@28a418fc
이름 : hmmini
나이 : 28
안녕하세요. 제 이름은 hmmini이고, 제 나이는 28살입니다.
안녕하세요. 제 이름은 mini이고, 제 나이는 29살입니다.
위의 코드를 살펴보면, Person
이라는 객체를 만들고 실제로 그 값을 찍었을때는 Person@28a418fc
와 같이 실제 값이 아닌 객체의 주소 값이 찍힌다.
객체의 값을 가져오려면 객체의 주소값을 참조해서 실제 값을 가져와야 한다.