클래스의 멤버함수이고, 앞에 접근 지정자(public, private, protected, default)가 붙습니다.
- 접근 지정자 : 해당 메소드가 다른 클래스에서 호출될 수 있는지 지정하기 위해 사용
자바에서 메소드 호출시 인자전달 방식은 '값에 의한 호출' 입니다.
이때, 값에 의한 호출이란 호출된 실인자 값이 복사되어 메소드의 매개변수에 전달되는 것을 의미합니다.
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의 공백문자를 ','로 변경하는 것이 가능합니다.