일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- geometry
- hash table
- SQL
- Binary Tree
- database
- simulation
- Matrix
- Binary Search
- 구현
- string
- 자바
- Number Theory
- greedy
- Data Structure
- dynamic programming
- 파이썬
- bit manipulation
- java
- Method
- Math
- array
- sorting
- Stack
- two pointers
- Tree
- Class
- 코테
- implement
- Counting
- 코딩테스트
- Today
- Total
코린이의 소소한 공부노트
메서드의 매개변수 본문
메서드의 매개변수는 메서드 선언 시 입력값으로 작성하는 변수로, 메서드가 호출되면 콜러(caller)에서 넘겨준 값을 매개변수에 복사(대입)한 후 메서드 구현부를 실행하게 된다.
일반 변수도 그렇듯 매개변수도 기본형과 참조형으로 구분된다.
1. 기본형 매개변수
- 정수형(byte, short, int, long), 실수형(double, float), 논리형(boolean), 문자형(char)
- 콜러에서 넘겨준 변수의 값을 읽기만 할 수 있고 변경할 수 없다.(=read only)
2. 참조형 매개변수
- 문자열형(String), 배열, 기타 사용자 정의 객체
- 콜러에서 넘겨준 변수의 값을 읽고 변경할 수 있다.(=read & write)
매개변수로 넘기는 것이 기본형일 때와 참조형일 때 어떤 차이가 생기는지 확인해보려 한다.
1. 예시 코드가 하는 일 확인
2. 각각의 코드를 읽고 결과 예측
3. 실제 결과와 호출 스택의 흐름 확인
1) 예시 코드는 다음과 같은 일을 한다.
메인 메서드에서 객체를 생성하고 객체의 멤버변수 값을 println문으로 확인한다.
-> change 메서드를 호출해 객체의 멤버변수 값을 매개변수로 넘기고, 그 값을 변경한다.
-> change 메서드 내에서 변경한 값을 println문으로 확인한다.
-> 메인 메서드로 돌아와 객체의 멤버변수 값을 println문으로 다시 한번 확인한다.
2) 기본형 매개변수 - read only
- 예시 코드
class Data { int x; }
class Ex_1 {
public static void main(String[] args) {
Data d = new Data();
d.x = 4;
System.out.println("main: x = " + d.x);
change(d.x);
System.out.println("change() 호출 후");
System.out.println("main: x = " + d.x); }
static void change(int x) {
x = 2;
System.out.println("change: x = " + x); }
}
- 메서드 호출 스택 흐름
3) 참조형 매개변수 - read & write
- 예시코드
class Data2 { int x; }
class Ex_2 {
public static void main(String[] args) {
Data2 d = new Data2();
d.x = 4;
System.out.println("main: x = " + d.x);
change(d);
System.out.println("change() 호출 후");
System.out.println("main: x = " + d.x); }
static void change(Data2 d) {
d.x = 2;
System.out.println("change: x = " + d.x); }
}
- 메서드 호출 스택 흐름
change 메서드를 호출할 때
1) 기본형 매개변수: 변수 값을 복사해 넘기기 때문에 메인에서 만든 객체 d의 변수 x와 다른 변수가 생성됨
2) 참조형 매개변수: 객체의 주소값을 복사해 넘기기 때문에 change 메서드에서 만든 객체 d도 메인에서 만든 객체 d의 변수 x를 가리키게 됨
이 때문에 기본형에서는 read only, 참조형에서는 read&write가 되는 것이다.
여기까지 이해가 됐다면, 반환타입이 참조형인 메서드를 호출했을 때의 흐름도 잘 이해할 수 있다.
- 예시 코드
class Data3 { int x; }
class Ex_3 {
public static void main(String[] args) {
Data3 d = new Data3();
d.x = 10;
Data3 d2 = copy(d);
System.out.println("d.x = " + d.x);
System.out.println("d2.x = " + d2.x); }
static Data3 copy(Data3 d) {
Data3 tmp = new Data3();
tmp.x = d.x;
return tmp; }
}
- 메서드 호출 스택 흐름
-> 반환타입이 참조형인 메서드는 구현부 수행 후 객체의 주소를 반환한다.
# 같은 클래스 내에 선언된 메서드 / static메서드는 객체 생성 없이 호출 가능
-> 추후 업로드 예정
'Java' 카테고리의 다른 글
메서드 오버로딩 (0) | 2022.03.09 |
---|---|
스태틱/인스턴스 메서드 (0) | 2022.03.07 |
메서드의 호출 스택 (0) | 2022.03.05 |
메서드의 생성(선언)과 사용(호출) (0) | 2022.03.04 |
선언 위치에 따른 변수의 종류 (0) | 2022.03.03 |