공부/Java

자바 기본형과 참조형

Stair 2024. 8. 28. 13:23
반응형

변수의 데이터 타입을 가장 크게 보면 기본형과 참조형으로 분류할 수 있다.

 

사용하는 값을 변수에 직접 넣을 수 있는 기본형, 그리고 이전에 본 Student student1과 같이 객체가 저장된 메모리의 위치를 가르키는 참조값을 넣을 수 있는 참조형으로 분류할 수 있다.

 

기본형 : int double long boolean처럼 변수에 사용할 값을 직접 넣음

참조형 : Student student1, int[] students와 같이 데이터에 접근하기 위한 참조를 저장하는 데이터 타입을 참조형이라 한다. 참조형은 객체 또는 배열에 사용된다.

 

기본형 변수에는 직접 사용할 수 있는 값이 들어있지만 참조형 변수에는 위치가 들어가 있다.

참조형은 실제 사용하는 값을 변수에 담는 것이 아니다. 이름 그대로 실제 객체의 위치(참조, 주소)를 저장한다. 참조형에는 객체와 배열이 있다.

객체는 . 을 통해서 메모리 상에 생성된 객체를 찾아가야 사용할 수 있다.

배열은 []를 통해서 메모리 상에 생성된 배열을 찾아가야 사용할 수 있다.

 

기본형은 들어있는 값을 그대로 계산에 사용할 수 있지만 참조형은 주소지에 가야한다.

**기본형을 제외한 나머지는 모두 참조형이다.

 

기본형은 모두 소문자로 시작한다. 이러한 기본형은 개발자가 새로 정의할 수 없다.

참조형은 대문자로 시작한다. 클래스는 모두 참조형이다.

 

자바에서 String은 특별하다. String은 사실 클래스이다. 따라서 참조형이다. 그러나 기본형처럼 문자 값을 바로 대입할 수 있다.. 문자는 매우 자주 다루기 때문에 자바에서 특별하게 편의 기능을 제공한다.

 

 

 

 

**자바는 항상 변수의 값을 복사해서 대입한다**

 

int a = 10;

int b = a;

 

Student s1 = new Student(); // 0x0100이라고 할때

Student s2 = s1; //0x0100이 그대로 복사되어 들어간다.

 

 

같은 값을 참조하고 있기에 동일한 결과값들이 출력된다.

 

여기서 핵심은 Data dataB = dataA라고 했을 때 변수에 들어있는 값을 복사해서 사용한다는 점이다. 그런데 그 값이 참조값이다. 따라서 dataA와 dataB는 같은 참조값을 가지게 되고, 두 변수는 같은 객체 인스턴스를 참조하게 된다.

 

 

 

메서드 호출도 마찬가지이다. 메서드를 호출할 때 사용하는 매개변수도 결국 변수일 뿐이다. 따라서 메서드를 호출할 때 매개변수에 값을 전달하는것도 앞서 설명한 내용과 같이 값을 복사해서 전달한다.

 

 

 

위 식과 마찬가지로 그저 a를 복사해서 메서드에 집어넣은 것이기 때문에 a는 여전히 10이다.

 

이처럼 메서드에서 참조값을 변경할때는 참조형으로 넘겨서 값을 바꿔야한다.

 

 

자바에서 메서드의 파라미터는 항상 값에 의해 전달된다. 그러나 이 값이 실제 값이냐, 참조 값이냐에 따라 동작이 달라진다.

기본형 : 메서드로 기본형 데이터를 전달하면, 해당 값이 복사되어 전달된다.

참조형 : 메서드로 참조형 데이터를 전달하면, 참조값이 복사되어 전달된다.

반응형

'공부 > Java' 카테고리의 다른 글

자바 Null  (0) 2024.08.28
자바 참조형과 메서드 호출 활용  (0) 2024.08.28
자바 클래스를 활용한 여러 예제  (0) 2024.08.28
자바 클래스에 배열 도입하기  (0) 2024.08.27
자바 클래스, 객체, 인스턴스 정리  (0) 2024.08.27