Java Mid 02 - Primitive Type, Reference Type
in Programming Language on Java
기본형과 참조형
자바의 데이터 타입은 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나눌 수 있다. 이 두 가지 타입은 메모리 할당 방식과 데이터 저장 방식에서 큰 차이가 있다.
기본형 (Primitive Type)
기본형 데이터 타입은 값 자체를 저장하며, 각 변수는 고유한 값을 가진다. 따라서 하나의 값을 여러 변수에서 절대로 공유하지 않는다. 기본형 데이터 타입에는 다음과 같은 종류가 있다.
- 정수형 (Integer Types):
byte,short,int,long - 실수형 (Floating Point Types):
float,double - 문자형 (Character Type):
char - 논리형 (Boolean Type):
boolean
예시코드
java코드 복사
int a = 5;
int b = a; // b는 a의 값을 복사. 이후 a와 b는 서로 독립적인 변수가 된다.
a = 10; // a의 값을 변경해도 b의 값은 영향을 받지 않는다.
참조형 (Reference Type)
참조형 데이터 타입은 실제 데이터 값이 아닌 데이터가 저장된 메모리 주소(참조값)를 저장한다. 따라서 하나의 객체를 여러 변수에서 공유할 수 있다. 참조형 데이터 타입에는 다음과 같은 종류가 있다. → 참조값을 전달한다.
- 클래스 (Classes)
- 인터페이스 (Interfaces)
- 배열 (Arrays)
- 열거형 (Enums)
예시코드
java코드 복사
class MyObject {
int value;
}
MyObject obj1 = new MyObject();
obj1.value = 5;
MyObject obj2 = obj1; // obj1과 obj2는 같은 객체를 참조한다.
obj1.value = 10; // obj1을 통해 객체의 값을 변경하면 obj2에서도 변경된 값을 볼 수 있습니다.
System.out.println(obj2.value); // 출력: 10
// obj에 참조값 x001이 저장이 되었디고 한다면 obj1의 참조값을 obj2에도 저장하기 때문에 결국에는 같은 메모리 주소값을 참조하게 되는 매커니즘이다.
사이드 이펙트
- 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수효과를 일으키는 것을 말한다.
- 공유 참조를 예시로 생각할 수 있는데 위에 코드처럼 obj1을 변경했는데 obj2까지 의도치 않게 변경됨을 말한다.
- 프로젝트나 코드가 복잡해지면 디버깅이 어려워지고 코드의 안정성이 저하된다.
사이드 이펙트 해결 방안
MyObject obj1 = new MyObject(); //x001
MyObject obj2 = new MyObject(); //x002
- 해결방안은 아주 단순하다. 처음부터 서로 다른 인스턴스를 참조하면 된다.
- 처음부터 서로 다른 인스턴스를 참조하기 때문에 ob2를 변경해도 obj1에 영향을 주지 않는다.
Reference
인프런 김영한님의 실전 자바 강좌