sum method 구현
1. method 선언
-프로그램에서 여러번 반복 사용되는 특정 코드 덩어리를 별도의 method로 정의
2. method 사용
-선언된 method 이름을 통해 method를 사용
3. method 사용 효과
-전체 소스코드 양을 대폭 줄일 수 있고, 프로그램 내에서 중복되는 코드 덩어리 제거 가능
-중복되는 코드 덩어리를 수정할 경우 , method 내부에서만 수정하면 되어서 전체 코딩 속도 향상 가능
public class MethodBasic {
public static void main(String[] args) {
/*
* (1,10) => actual paramter list(argument)
* sum(1,10)을 기계어로 처리되는 명령어 리스트
* 1. 등록된 method list에서 sum이라는 이름을 가진 method signature를 이용하여 찾음
* 2. 찾은 sum method를 호출하고, method의 foraml parameter 인 startValue 변수의 메모리방에 1의 값을 넣고
* endValue 변수에는 메모리방에 10의 값을 넣음
* 3. result라는 변수에 대하여 메모리 방을 잡고 method body의 명령어 실행
* 4. 최종 결과값을 갖고 있는 result 변수의 값을 sum method를 호출한 곳으로 넘겨줌
* -최종 결가 값을 넘겨주기 전에 method 의 내부 변수인 startValue , endValue ,result 변수의 메모리 방은 삭제됨
*/
System.out.println("1부터 10까지의 합 = "+sum(1,10));
// System.out.println("27부터 37까지의 합 = "+sum(27,37));
// System.out.println("35부터 49까지의 합 = "+sum(35,49));
sum(1,10);
}
//이름이 sum인 method 선언
//parameter variable : int startValue , int endValue
// method signature : sum(int startValue , int endValue)
// foraml parameter list : int startValue , int endValue
public static int sum(int startValue , int endValue) { //메소드 헤더
int result = 0; //메소드 바디
for(int i = startValue; i<=endValue; i++) {
result +=i;
}
return result;
}
}
- 한번 코딩 해 두면 다른 사람들에게도 공유 가능(더 이상 중복된 코딩할 필요 없음)
- 메소드를 사용하는 사람은 메소드의 실제 구현 코드내용을 이해하지 않고 얼마든지 사용가능 하다.
- 개발 생산성과 코드 재활용성이 높아진다.
public class GreatestCommonDivisor {
//main method
public static void main(String[] args) {
Scanner S = new Scanner(System.in);
System.out.println("첫번째 정수를 입력해 주세요");
int n1 = S.nextInt();
System.out.println("두번째 정수를 입력해 주세요");
int n2 = S.nextInt();
System.out.println("입력된 정수 '" +n1 +"' 부터 '"+n2+"' 까지의 최대 공약수 = "+gcd(n1,n2));
}
//최대공약수 구하기 메소드
//2개의 입력 정수 n1,n2에 대하여 2부터 시작해 1씩 증가하면서 n1,n2 모두 나머지가 0인지 확인
public static int gcd(int n1, int n2) {
int gcd = 1;
int k = 2;
while(k<=n1 && k<=n2) {
if( n1%k == 0 && n2%k==0) {
gcd = k;
System.out.println("임시 gcd = " + gcd);
}
k++;
}
return gcd;
}
}
return 타입이 void인 메소드 사용 사례
-정보 출력용으로 사영됨
public class Grade {
public static void main(String[] args) {
System.out.print("78.5의 등급 : ");
printGrade(78.5);
System.out.println();
System.out.print("59.5의 등급 : ");
printGrade(59.5);
}
public static void printGrade(double score) {
if(score>90) {
System.out.println("A등급입니다.");
}else if(score>80) {
System.out.println("B등급입니다.");
}else if(score>70) {
System.out.println("C등급입니다.");
}
else if(score>60) {
System.out.println("D등급입니다.");
}else if(score>50) {
System.out.println("F등급입니다.");
}
}
}
call by value의 정의 : method의 formal parmeter를 호출할 때 formal parmeter의 변수로 값이 전달
-참고 :call by reference의 정의 : method의 formal parmeter를 호출할 때
formal parmeter의 변수로 주소가 전달
public class CallByValue {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
System.out.println("swap method - swap전 num1 :"+num1+" num2 "+num2);
swap(num1, num2);
//값을 넘겨준게 아닌 복사이기 때문에 num1 과 num2 가 원래의 수로 돌아옴
System.out.println("swap method - swap후 num1 :"+num1+" num2 "+num2);
}
public static void swap(int n1, int n2) {
System.out.println("swap method - swap전 n1 :"+n1+" n2 "+n2);
int temp = n1;
n1 = n2;
n2 = temp;
System.out.println("swap method - swap후 n1 :"+n1+" n2 "+n2);
}
}