Post

[JAVA Questions] 기본형과 참조형 예상질문

기본형과 참조형에 대한 자주 나오는 질문 정리

[JAVA Questions] 기본형과 참조형 예상질문

🔗 정리 글 바로가기: 기본형과 참조형

1. 기본형과 참조형의 차이

Q. 기본형과 참조형의 가장 큰 차이점은 무엇인가요?

기본형은 값을 직접 변수에 대입하는 것이고, 참조형은 참조값(주소값)을 변수에 대입하는 것입니다.

2. String은 기본형? 참조형?

String은 클래스 이기 때문에 참조형 입니다. `hello` 처럼 간단히 쓸 수 있지만 실제로는 객체로 처리되며, 내부 메서드와 필드를 가진 참조형 입니다.

3. 변수 복사 시 메모리 동작

Q. int a = 10; int b = a; 이 코드에서 a와 b가 메모리 상에서 어떻게 동작하나요?

`a`와 `b`는 모두 스택 영역에 저장되고, `b`는 `a`의 값을 복사해 저장합니다. 두 변수는 독립적인 공간을 갖습니다.

4. 기본형 전달과 메서드 내부 변화

1
2
3
4
5
6
7
int a = 5;
changeValue(a);
System.out.println("a = " + a);

public static void changeValue(int x) {
    x = 10;
}
5가 출력 됩니다. a가 매개변수로 changeValue의 x로 들어가도 x의 값이 10으로 바뀌는 것 뿐이지 a의 값을 바꾸라는 코드는 없습니다.

5. 참조형 전달과 객체 내부 변경

1
2
3
4
5
6
7
8
9
Box box1 = new Box();
box1.size = 100;
modifyBox(box1);

System.out.println(box1.size);

public static void modifyBox(Box b) {
    b.size = 200;
}
200이 출력됩니다. box1의 참조값을 매개변수로 modifyBox의 b로 전달하더라도 같은 주소값을 참조하기 때문에 200이 출력됩니다.

6. 참조형을 전달해도 원본 값이 바뀌지 않게 하려면?

Q. 참조형을 전달했는데 원본 값이 바뀌지 않게 하려면 어떻게 해야 하나요?

새로운 객체를 생성하고 기존 객체의 깊은 복사를 사용하면 원복 객체는 영향을 받지 않습니다.

7. 맴버변수 vs 지역변수

Q. 맴버변수와 지역변수의 차이는 무엇인가요?

맴버변수는 클래스 내에서 사용하는 변수이고, 지역변수는 매서드 내에서 사용하는 변수입니다.
변수 종류 선언 위치 저장 영역 생명 주기
멤버변수 클래스 내부 힙 영역 객체가 GC에 의해 제거될 때까지
지역변수 메서드 내부 스택 영역 메서드가 종료될 때 바로 소멸

8. 자바에서 참조형 변수에 null을 대입하면 메모리에는 어떤 변화가 일어나나요?

null을 대입하면 해당 변수는 더이상 참조 하지 않게 되고, 이 객체가 다른 참조에서도 사용하지 않게 되면 GC에 의해 정리됩니다.

9. 메서드 안에서 새 객체를 생성해 참조형 매개변수에 할당하면 호출자에게 영향이 갈까요?

1
2
3
4
void change(Data data) {
    data = new Data();
    data.value = 999;
}
영향이 가지 않습니다. 왜냐하면 매개변수로 전달하더라도 new Data() 로 새로운 참조값을 data에 대입하기 때문입니다.

10. 기본형 변수도 힙 영역에 저장되는 경우가 있을까요?

기본형은 스택에 저장됩니다. 하지만 객체의 맴버변수로 선언될 경우 객체와 함께 힙에 저장됩니다.
This post is licensed under CC BY 4.0 by the author.

Trending Tags