728x90
1. 호출 스택 (Call stack)
호출 스택은 위가 뚫린 상자 모양의 메모리라 생각하면 된다. 메서드가 호출되면 호출 스택에 메서드 실행을 위한 공간이 스택(책) 형식으로 쌓이며, 실행이 끝나면 반환값을 아래 메서드에게 주며 비워진다. 이때, 스택이 2개 이상이면 최상단 스택만 실행 중이며 밑에 있는 모든 스택은 대기 중이다. 그리고 실행 중인 메서드 스택 바로 밑 스택의 메서드가 실행 중인 메서드를 호출한 것이다. 정리하면 다음과 같다.
(1) 메서드가 호출되면 메모리를 스택에 할당 받는다.
(2) 메서드가 종료되면 할당 받은 메모리를 반환, 스택에서 제거된다.
(3) 최상단 메서드만 실행 중이다.
(4) 메서드 바로 밑 메서드가 그 위 메서드를 호출한 것이다.
[참고] 힙 영역은 인스턴스 멤버, 호출 스택은 메서드와 지역 변수의 자리이다.
2. 매개변수의 종류
매개변수에는 다음과 같이 두 종류가 있다.
매개변수 | 변수의 값 읽기 | 변수의 값 쓰기 |
기본형 (8개) | O | X |
참조형 (그 외) | O | O |
기본형과 참조형 매개변수의 값 쓰기에서 차이가 나는 이유는 참조형의 반환타입이 생성된 객체의 주소이기 때문이다.
[예 1] 기본형 매개변수
class Data { int x; }
class PrimitiveParameter {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d.x);
System.out.println("After change(d.x)");
System.out.println("main() : x = " + d.x);
}
static void change(int x) {
x = 1000;
System.out.println("change() : x = " + x);
}
}
```
결과
main() : x = 10
change() : x = 1000
After change(d.x)
main() : x = 10
```
[예 2] 참조형 매개변수
class Data { int x; }
class ReferenceParameter {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d);
System.out.println("After change(d)");
System.out.println("main() : x = " + d.x);
}
static void change(Data d) {
d.x = 1000;
System.out.println("change() : x = " + d.x);
}
}
```
결과
main() : x = 10
change() : x = 1000
After change(d)
main() : x = 1000
```
두 예시의 과정을 메모리의 호출스택과 힙을 단계별로 표현할 수 있어야 한다.
[참고] 배열 또한 변수 묶음의 객체, 참조형이라는 것을 유념하자.
3. 반환타입의 종류
반환 타입 | 반환값 |
기본형 | 기본형 값 (리터럴) |
참조형 | 객체의 주소 (객체 그 자체) |
[예 3] 참조형 반환 타입
class Data { int x; }
class ReferenceParameter {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
Data d2 = copy(d);
System.out.println("d.x = " + d.x);
System.out.println("d2.x = " + d2.x);
}
static Data copy(Data d) {
Data tmp = new Data();
tmp.x = d.x;
return tmp;
}
}
```
결과
d.x = 10
d2.x = 10
```
[참고] 8번째 줄에서 copy 메서드를 참조 변수 없이 호출 가능한 이유는 같은 패키지 안에 있고 static 메서드이기 때문이다.
반응형
'자바 (Java) > 요약' 카테고리의 다른 글
Chpt 6. 객체 지향 프로그래밍 - 주제 5. 생성자는 변수 초기화 메서드이다. (0) | 2023.10.24 |
---|---|
Chpt 6. 객체 지향 프로그래밍 - 주제 4. 메서드에는 static과 인스턴스 메서드가 있다. (0) | 2023.10.24 |
Chpt 6. 객체 지향 프로그래밍 - 주제 2. 클래스는 변수와 메서드의 묶음이다. (1) | 2023.10.23 |
Chpt 6. 객체 지향 프로그래밍 - 주제 1. 클래스와 객체 (0) | 2023.10.23 |
Chpt. 5 배열 - 주제 2. 2차원 배열은 배열의 배열이다. (1) | 2023.10.21 |