자바 공부기록 27 - 메소드
●메소드란
Method : Function이라고도 부르며,
간헐적으로 반복되는 코드단위를 별도로 정의해놓고,
그 이름으로 코드를 실행하는 단위실행코드입니다.
Java에서는 Function이라는 말보다 Method라는 표현을 주로 사용합니다
메소드의 생성 : 반드시 클래스의 내부에서만 만들 수 있습니다
main메서드 위쪽 또는 아래쪽에 만들 수 있습니다.
●목적
소정의 값을 연산하기 위한 명령들의 반복실행
예 : 사각형의 넓이를 계산하는 메서드, 삼각형의 넓이를 계산하는 메서드
성적표를 양식에 맞게 출력하는 메서드, 달력을 양식에 맞게 출력하는 메서드
이 목적으로 함수를 만들려면 필요한 값들을 함수에 전달하고 실행되게 해야합니다.
●매개 변수의 선언
public static void 메서드이름( 자료형 매개변수이름, 자료형 매개변수이름 ...){
}
-괄호 안에 변수를 선언하고 쓰는 형식
-매개변수 또한 필요한 갯수만큼 선언해서 사용할 수 있습니다.
-myPrint 메소드 만들기
1
2
3
|
public static void myPrintWith2Int(int n1, int n2) {
System.out.println("전달받은 매개변수의 값 n1 ->" + n1 + " ,n2 ->" +n2);
}
|
cs |
동일한 타입이라도 자료형의 생략은 허용되지 않습니다. (int n1, n2)로 생략해서 쓰면 안됨
●전달인수로 넣은 변수의 이름과 매개변수의 이름은 반드시 같지 않아도 됩니다. (이름이 같아도 되긴함, 그치 만 엄연히 다른 변수임) 메서드의 매개변수 이름은 d이고 전달인수로 넣은 변수의 이름은 dan인것처럼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static void googoodan(int d) { // int d = dan; 와 비슷한 형식의 값의 전달
for(int i=1; i<10; i++) {
System.out.printf("%d x %d = %d\n", d, i, d*i);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.printf("출력할 구구단의 단을 입력하세요");
int dan = Integer.parseInt(sc.nextLine());
googoodan(dan); //전달인수로 변수를 넣으면 변수에 저장된 값이 매개변수로 전달됩니다.
}
|
cs |
- main 메서드 안에 있는 정수 dan의 값이 복사되어 googoodan 메서드에 값이 입력되어 출력되는 형식
● 1.메서드 호출할때 전달인수로 넣어주는 변수와 메서드 영역의
매개변수로 쓰이는 변수의 이름이 같아도 상관없습니다.
위에서 언급한 두변수는 지역변수라고 부르며, 서로 다른 변수로 사용됩니다.
2. 전달인수의 변수값이 매개변수 변수로 "값"만 전달되는 방식을 Call by Value라고 부릅니다.
● Call by Reference
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) {
int [] a = {111,222,333};
updateValue(a); //전달인수로 참조값을 전달합니다
}
public static void updateValue(int [] b) {
System.out.println("\nupdateValue에서 출력 : ");
for(int i=0; i<b.length; i++)
System.out.printf("b[%d] = %d\t",i, b[i]); }
|
cs |
전달인수가 참조값이라면, 매개변수도 참조값 형식이어야 한다.
이는 앞서 봤던
int [] a = {1,2,3,4,5};
int [] b;
b = a;
처럼 배열의 데이터는 1개인데 그 데이터의 주소를 두 개의 참조변수가 공유하고 있는 것이다.
따라서 main 메소드 안의 배열 a의 값이 바뀌거나 updateValue 안의 배열 b의 값이 바뀌면
서로의 값도 따라서 바뀐다.