Java 기본 - 기본형/참조형

이유진·2024년 1월 6일
post-thumbnail

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

기본형

int, long, double, boolean 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입

특징

  • 해당 값을 바로 사용할 수 있다
  • 해당 값을 계산에 사용할 수 있다
  • 소문자로 시작한다!

변수 대입

  • 변수에 있는 "실제값"을 복사하여 대입
int a = 10;
int b = a; // 10을 복사해서 저장

그렇다변

int a = 10;
int b = a;

System.out.println("a = " + a); // 10
System.out.println("b = " + b); // 10

a = 20;
System.out.println("a = " + a); // 20
System.out.println("b = " + b); // 10

메서드 호출


public class MethodChange {
	public static void main(String[] args) {
      int a = 10;
      System.out.println("a = " + a); // 10
      changePrimitive(a);
      System.out.println("a = " + a); // 10
    }
    
    public static void changePrimitive(int x) {
      x = 20;
    }
}

changePrimitive 파라미터 x엔 "10"이 복사되어 전달된다
따라서 x의 값을 변환해도 a에는 영향이 없다.

참조형

Student student1, int[] students와 같이 데이터에 접근하기 위한 참조값(주소)을 저장하는 데이터 타입

특징

  • 객체와 배열이 있다
  • 계산을 하지 못한다
  • 대문자로 시작한다!
  • 개발자가 새로 정의할 수 있다

String도 참조형이다.
자주 사용하기 때문에 특별히 편의 기능(계산 등)을 제공한다

변수 대입

  • 참조값을 복사해서 대입한다
Student s1 = new Student(); // x001
Student s2 = s1; // x001
Student s1 = new Student(); // x001
Student s2 = s1; // x001

s1.value = 10;

System.out.println("s1.data = " + s1.data); // 10
System.out.println("s2.data = " + s2.data); // 10

s1.data == x001.data
s2.data == x001.data
이므로 같은 값을 가진다

메서드 호출


public class MethodChange {
	public static void main(String[] args) {
      Data a = new Data();
      a.value = 10;
      System.out.println("a.value = " + a.value); // 10
      changeReference(a);
      System.out.println("a.value = " + a.value); // 20
    }
    
    public static void changeReference(Data x) {
      x.value = 20;
    }
}

메서드 파라미터 x에는 주소가 복사되어 전달되기 때문에
a.value(x001.value) = 10
-> x001이 x로 전달
-> x.value(x001.value) = 20
이므로 a의 value(x001.value)도 20으로 출력된다

profile
BackEnd Developer

0개의 댓글