TIL 33 | [Java] 자바의 메소드와 인자전달

Yoonsik·2022년 8월 13일
0

JAVA

목록 보기
7/11

자바의 메소드

클래스의 멤버함수이고, 앞에 접근 지정자(public, private, protected, default)가 붙습니다.

	- 접근 지정자 : 해당 메소드가 다른 클래스에서 호출될 수 있는지 지정하기 위해 사용

자바의 인자 전달방식

자바에서 메소드 호출시 인자전달 방식은 '값에 의한 호출' 입니다.
이때, 값에 의한 호출이란 호출된 실인자 값이 복사되어 메소드의 매개변수에 전달되는 것을 의미합니다.


기본타입의 값(int, char, double ...)이 인자로 전달되는 경우

public class Circle {
    static void increase(int r) {
		r += 1;
    }
}

public static void main(String[] args) {
	int n = 10;
    increase(n);
    System.out.println(n);
}

다음과 같이 기본타입의 값 n(10)이 메소드의 매개변수로 전달되는 경우, 그 값은 복사되어 매개변수로 전달되기 때문에, increase(n); 메소드를 호출한 후 n을 출력해보면, 11이 아닌 10이 출력되는 것을 알 수 있습니다.


객체가 인자로 전달되는 경우

public class ObjectEx {
	int radius;
	public ObjectEx(int radius) {
		this.radius = radius;
	}
	
	static void increase(ObjectEx m) {
		m.radius++;
	}
    

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ObjectEx pizza = new ObjectEx(10);
		
		increase(pizza);
		
		System.out.print(pizza.radius);
	}
}

다음과 같이 메소드의 매개변수가 클래스타입(객체)인 경우, 객체의 레퍼런스가 복사되어 전달되게 됩니다.

increase(pizza); 에서 pizza 객체를 매개변수로 둔 increase(ObjectEx m) 메소드를 호출하게 되고, pizza 객체의 레퍼런스가 복사되어 메소드의 매개변수 ObjectEx m에 전달되게 됩니다.

이때, pizza 객체의 레퍼런스가 복사되어 전달되었기 때문에 m 도 pizza가 가리키는 객체를 가리키게 됩니다.

이 상태에서 레퍼런스 m이 직접 pizza 객체의 멤버변수 radius값을 변경(m.radius ++)하였기 때문에 System.out.print(pizza.radius) 의 결과는 11이 됩니다.


배열이 인자로 전달되는 경우

public class ObArrayEx {
	static void replaceSpace(char a[]) {
		for (int i = 0; i < a.length; i++) {
			if (a[i] == ' ') {
				a[i] = ',';
			}
		}
	}
	
	static void printArray(char a[]) {
		for (int i = 0; i < a.length; i++) 
				System.out.print(a[i]);
		System.out.println(); // 배열의 원소 모두 출력 후 줄바꿈
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char Exarray[] = {'H', 'e', 'l', 'l', 'o', ' ', 'Y', 'o', 'o', 'n', 's', 'i', 'k'};
		
		replaceSpace(Exarray); // Exarray 배열을 인자로 갖는 메소드 replaceSpace를 호출하여 배열안의 공백분자를 ',' 로 바꿈
		printArray(Exarray);
	}
}

배열이 인자로 전달되는 경우도 객체가 인자로 전달되는 경우와 마찬가지로 배열의 레퍼런스가 복사되어 메소드의 매개변수로 전달됩니다.

따라서 다음과 같이 배열a의 공백문자를 ','로 변경하는 것이 가능합니다.


profile
꾸준함의 힘

0개의 댓글