클라우드 낚시꾼

[JAVA 자바] 기본형과 참조형 + Call by Value 본문

Programming Language/JAVA

[JAVA 자바] 기본형과 참조형 + Call by Value

KanuBang 2023. 12. 29. 23:13
728x90

많은 사람들이 기본형과 참조형에 대해서는 다 알고 있다고 생각하여 휙휙 넘어간다. 하지만, 그대는 정말 다 알고 있는가? 필자는 확신이 없기에 이 글에서 기본형과 참조형에 대해 최대한 간단하고 명료하게 핵심만 짚고 넘어가볼라고 한다. 


기본형 VS 참조형 - 무엇을 저장하는가?

기본형과 참조형

  1. 기본형: int, long, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라 한다.
  2. 참조형: Movie movie1, Movie[] movies와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다. 객체와 배열이 대표적인 참조형이다.
    • 객체는 .(dot)을 통해서 메모리 상에 생성된 객체를 찾아간다.
    • 배열은 []을 통해서 메모리 상에 생성된 배열을 찾아간다.

기본형 VS 참조형 - 계산이 가능한가?

boolean a = true;
boolean b = false;
boolean result = a && b; // 결과는 false

Student s1 = new Student();
Student s2 = new Student();
s1+s2//오류 발생

 

  1. 기본형은 연산이 가능하다.
    • int나 double 같은 수들은 직관적으로도 사칙연산이 가능하다는 것을 알 수 있다.
    • boolean 타입끼리는 사칙연산(+, -, * , /)이 되지 않지만, and와 or 같은 논리연산은 가능하다.
  2. 참조형은 연산이 불가능하다.
    • 참조값(주소)은 당연히 연산이 불가능하다.
    • "서울특별시 blabla + 울산광역시 blabla" -> 주소끼리 연산은 굉장히 어색하다.

기본형 VS 참조형 - 대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.

//기본형 대입
int a = 10;
int b = a;

//참조형 대입
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA;

 

기본형이든 참조형이든 모든 대입(할당)은 값의 복사로 이루어진다. 특히, 참조변수 같은 경우에는 참조값(주소)이 복사되기 때문에 하나의 인스턴스를 여러 참조변수가 참조할 수 있게 된다.


기본형 vs 참조형 - 자바 메서드 호출의 대원칙 Call by Value

메서드에서 외부로부터 값을 전달받는 매개변수(파라미터)는 복사된 값을 전달받는다. 이런방식을 Call by Value라고 부른다. 다시 한번 설명하자면, Call by Value는 함수나 메소드로 값이 복사되어 전달되는 방식을 의미한다. 참고로, Call by Reference는 자바에서 지원되지 않는 기능이다. 이제는 기본형과 참조형의 메서드 호출 차이점을 알아보자.

  • 기본형: 메서드로 기본형 데이터를 전달하면, 해당 값이 복사되어 전달된다. 이 경우, 메서드 내부에서 매개변수(파라미터)의 값을 변경해도, 호출자의 변수 값에는 영향이 없다.
  • 참조형: 메서드로 참조형 데이터를 전달하면, 참조값이 복사되어 전달된다. 이 경우, 메서드 내부에서 매개변수(파라미터)로 전달된 객체의 멤버 변수를 변경하면, 호출자의 객체도 변경된다.

메서드에 참조값이 복사되어 전달되었을 때, 메서드 내부에서 호출자의 객체 정보를 변경할 수 있기 때문에 메서드 작업 단위로 객체를 초기화, 생성, 반환하는 작업을 할 수 있다. 이에 대한 예시 코드를 제공함으로써 이 글을 마무리하겠다!


메서드 내부에서 객체 초기화 및 객체 반환

다음은 메서드에 참조값을 전달하고, 메서드 내부에서 객체에 대한 작업을 처리하는 모습이다. 호출하는 메서드가 호출되는 메서드들에게 객체 작업 처리를 위임하는 것으로 생각할 수 있다. 

메서드 내부에서 객체 초기화
메서드 내부에서 객체 생성 후 반환

출저 및 참고


이 글은 김영한 님의 "실전 자바 - 기본편"을 참고해서 작성하였다. 

 

김영한의 실전 자바 - 기본편 강의 - 인프런

실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다

www.inflearn.com

 

728x90