안녕하세요~ 

이번 시간에는 매개변수의 유형에 따른 차이점에 대해 알아보려고 하는데요.

상당히 중요한 개념이니 꼭 알아두고 갑시다!

같은 듯 다른 듯 매개변수에 따라 달라지는 메소드 사용법

class Data {
	int x;
}

public class Main {
	public static void main(String[] args) {
		int x = 10;
		
		Data data = new Data();
		data.x = 100;
		
		System.out.println("x : " + x);
		System.out.println("method1 x : " + method1(x));
		System.out.println("data.x : " + data.x);
		System.out.println("method2 data.x : " + method2(data));
        System.out.println("data.x : " + data.x);
	}
	
	int method1(int x) {
		x = 1000;
		return x;
	}
	
	int method2(Data d) {
		d.x = 1000;
		return d.x;
	}
}

 기본형 매개변수를 사용한 method1 메소드, 참조형 매개변수를 사용한 method2 메소드를 사용하는 코드.

 main 메소드에서 method1과 method2를 호출할 때 오류가 발생했네요. 그 이유를 같이 찾아볼까요?!

오늘의 핵심 키워드

1.  static(정적)이 붙는 곳은 변수뿐만 아니라 메소드 앞에서도 가능하다. 따라서 main메소드에서 다른 메소드를 사용하고자 할 때는 같은 시점에 인식할 수 있도록 static을 붙여줘야 한다. 

2. 기본형 매개변수는 값을 가지고 있어 해당 메소드 안에서 변경되면 그 안에서만 적용된다.

3. 참조형 매개변수는 주소를 가지고 있어 해당 메소드 안에서 변경이 되어도 객체에 존재하는 필드값 자체가 변경되어 적용된다.


먼저 method1, method2에 static을 붙여서 오류를 없애고 실행하게 되면 다음과 같이 출력됩니다.

 

[1] 맨 위에 출력된 x는 main메소드에서 선언된 x의 값 10이 출력됩니다.

[2] method1 메소드를 호출하면서 x에 있는 값 10이 넘어갔지만 메소드 내에서 x의 값은 1000이라고 정의되어 method1에서 리턴되는 값 x는 1000이 나오게 됩니다.

[3] Data 클래스 객체 생성된 변수 data에는 객체의 주소가 담겨있고 그 주소에 있는 필드 x의 값은 저장되어 있는 값 100이 출력됩니다.

[4] method2 메소드를 호출하면서 data에 담긴 객체의 주소가 넘어갔고 메소드 내에서 주소에 있는 필드 x의 값을 1000으로 변경하여 리턴값은 1000이 출력됩니다.

[5] data에는 객체 주소가 담겨있고 주소에 있는 필드 x의 값 1000이 출력됩니다. 

최종 완성본

class Data {
	int x;
}

public class Main {
	public static void main(String[] args) {
		int x = 10;
		
		Data data = new Data();
		data.x = 100;
		
		System.out.println("x : " + x);
		System.out.println("method1 x : " + method1(x));
		System.out.println("data.x : " + data.x);
		System.out.println("method2 data.x : " + method2(data));
        System.out.println("data.x : " + data.x);
	}
	
	static int method1(int x) {
		x = 1000;
		return x;
	}
	
	static int method2(Data d) {
		d.x = 1000;
		return d.x;
	}
}


꼭 봐야되는 마무리 꿀팁!

  • 같은 클래스 안에서 선언한 메소드를 main 메소드에서 사용할 때는 static을 붙이거나 객체 생성​​하기!
  • 매개변수의 타입이 기본형(int, float, double, boolean 등)일 때, 참조형(String, 클래스 등)일 때 구분하여 사용하기!

 

▲영상으로 한번 더 복습하세요 :)