🔎클래스 사용 전 함수 사용
public static int add(int a, int b) {
int r = a + b;
return r;
}
public static void changeUpper(String name) {
name = name.toUpperCase();
}
public static void swap(int c, int d) {
int t = c; //지역변수 t라서 swap의 기능이 제대로 안된다.
c = d;
d = t;
System.out.println("c=" + c + ",d=" + d);
}
이때 스택은 각 함수마다 따로 있으며 리턴문은 변수 하나만 리턴할 수 있다.
c=5
d=8
swap 메서드에서는 이렇게 swap이 된 상태로 나온다.
public static void main(String[] args) {
int a = 7, b = 2;
int result1 = add(a, b);
System.out.println(result1); //9
// ---------------------------------
int c = 8, d = 5;
System.out.println("c=" + c + ",d=" + d); //c=8,d=5
swap(c, d); //메인 변수를 지정해 swap메서드에 파라미터c,d전달
System.out.println("c=" + c + ",d=" + d); //c=8,d=5
// ---------------------------------
String name = "Tony Stark";
System.out.println(name); //Tony Stark
changeUpper(name);
System.out.println(name); //Tony Stark
}
c=5, d=8 이렇게 나올 것 같지만 실제로는
c=8
d=5
이렇게 초기설정 그대로 나오게 된다.
- swap과 main의 값만 전달되며, 주소(reference)는 상이하다.
∵ t가 swap메서드의 지역변수로 설정되있기 때문 - 또한, 함수가 끝나면 스택이 사라지기 때문에 main에서 swap메서드와 chageUpper메서드가 전달이 되지않아 함수가 적용이 되지 않는다.
🔎클래스 사용 후 함수 사용
class Data {
int c; int d;
@Override public String toString() {
return "Data [c=" + c + ", d=" + d + "]";
}
}
클래스를 사용하는 이유는 함수(swap)에서 변경된 값을 객체에서 메인으로 돌려받기 위한 것이다.
public class ParamTest02 {
public static void swap(Data data) {
int t = data.c; //main함수에서 data객체에 c를 담은 것을 t로 정의한다.
data.c = data.d;
data.d = t;
System.out.println(data); //c=5, d=8
}
public static void main(String[] args) {
Data data = new Data();
data.c=8;
data.d=5;
System.out.println(data); //c=8, d=5
swap(data);
System.out.println(data); //c=5, d=8
}
}
- Data data = new Data(); : 인스턴스 변수data는 스택에 생성된다.
- 이때, new는 heap에 생성되며 data.c는 heap에 있는 data가 가리키는 c를 의미하며 그 c에 8을 입력하는 것이다.
- Data 클래스를 설정해두었기 때문에 main함수의 data나 swap함수의 data나 동일한 것이 된다.
- swap(data): 메인변수 data를 불러와서 swap메서드에게 파라미터 c,d를 전달한다.
'JAVA' 카테고리의 다른 글
[java]접근제어자 (0) | 2024.08.26 |
---|---|
[java]InetAddress(컴퓨터 주소 찾기), InetSocketAddress(단방향 채팅프로그램)=>TCP통신 (0) | 2024.08.26 |
[java]Thread(스레드) (0) | 2024.08.26 |
[java] 외부파일을 읽어서 출력하기(FileReader,BufferedReader,FileWriter,BufferedWriter) (0) | 2024.08.24 |
[java]Collection Framework (3) | 2024.08.22 |