1. sum method
package p01.basic;
// sum method 구현
// 1. method 선언
// - 프로그램에서 여러번 반복 사용되는 특정 코드 덩어리를 별도의 method로 정의
// 2. method 사용
// - 선언된 method 이름을 통해 method를 사용
// 3. method 사용 효과
// - 전체 소스코드 양이 대폭 줄일 수 있고, 프로그램 내에서 중복되는 코드 덩어리 제거 가능
// - 중복되는 코드 덩어리 수정할 경우, 메소드 내부에서만 수정하면 되어서 전체 코딩 속도 향상 가능
// 4. 회원가입 여부 check, 쇼핑물 상품 가격이 1000원 이상인 경우, 상품가격 입력시 상품가격 체크 등...
public class MethodBasic2 {
public static void main(String[] args) {
// 1, 10 => actual parameter list (arguments)
// sum(1, 10)을 기계어로 처리되는 명령어 리스트
// 1. 등록된 method list에서 sum이라는 이름을 가진 method signature를 찾음
// 2. 찾은 sum method를 호출하고, method의 formal 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인 method 선언
// method signature : sum(int startValue, int endValue)
// formal parameter : 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;
}
}
- sum method를 사용하기 위해서는 먼저 이름이 sum인 method를 선언해줍니다.
- 그리고 method 안에 자료형 변수를 지정해줍니다.
- int starValue는 시작지점이고, int endValue는 끝지점입니다.
- for 문을 사용하여 원하는 숫자부터 원하는 숫자까지 더해주는 코딩을 만들어줍니다.
- 그 다음 println을 이용하여 원하는 값을 출력합니다.
- 예) 1부터 10까지의 숫자의 합을 구하고 싶으면 System.out.println(sum(1,10));이라고 해주면 1부터 10까지의 순차적으로 더해진 값이 출력됩니다.
2. 최대 공약수를 구하는 method
package p02.practice_basic;
import java.util.Scanner;
// method의 제일 큰 장점
// 1. 한번 코딩해 놓으면, 다른 사람들에게도 공유 가능(더 이상 중복된 코딩할 필요 없음)
// 2. method를 사용하는 사람은 method의 실제 구현 code 내용을 이해하지 않아도 (몰라도) 얼마든지 사용 가능
// 3. 개발 생성선과 코드 재활용성(reusable)이 높아짐
public class GreatestCommonDivisor {
// main method
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("첫번째 정수를 입력하세요.");
int n1 = input.nextInt();
System.out.println("두번째 정수를 입력하세요.");
int n2 = input.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;
}
}
- 먼저 gcd라는 이름을 가진 메소드를 생성해줍니다.
- 2개의 정수를 입력해줘야 하기 때문에 scanner를 사용해줍니다.
- 2개의 입력 정수인 n1과 n2에 대해서 2부터 시작하여 1씩 증가시키면서 n1과 n2 모두 나머지가 0인지 확인하기 위해 while과 if문을 사용해줍니다.
- while 문의 조건으로는 n1과 n2가 2이상부터라는 조건을 해주고 if 문에는 n1과 n2를 2로 나눈 나머지가 0인지 확인해주는 조건을 넣어줍니다.
3. 점수 결과 확인하기 (return type이 void인 메소드 사용 사례)
package p02.practice_basic;
//return type이 void인 메소드 사용 사례
//- 정보 출력용으로 사용 (검사 결과 출력)
public class TestVoid {
public static void main(String[] args) {
System.out.println("78.5의 등급 : ");
printGrade(78.5);
System.out.println("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 {
System.out.println("F등급 입니다.");
}
}
}
- 먼저 printGrade라는 이름의 메소드를 선언해줍니다.
- 그리고 if ~ else if 문을 사용하여 90점 이상이면 A등급, 80점 이상이면 B등급, 70점 이상이면 C등급, 60점 이상이면 D등급, 그리고 나머지는 F등급이라고 해줍니다.
- 그 다음 main 메소드로 돌아가서 printGrade(); 괄호 안에 우리가 찾고 싶은 점수를 입력하면 무슨 등급인지 찾을 수 있습니다.
4. 최댓값 찾는 문제
package p03.practice_method_call_process;
// 1. JVM이 method 실행 : activation record를 메모리 stack 영역에 할당하는 방식
// 2. method 호출순서
// - JVM이 main() method 호출
// - => max method 호출
// 3. main method에서 max method를 호출할 때 actual parameter로 선언된 변수의 값이
// max method의 formal parameter로 선언된 변수로 복사(copy) => call by value라고 함
// 4. call by value의 정의 : method의 formal parameter를 호출(call)할 때 formal parameter의 변수로 값이 전달
// - 참고 : call by reference의 정의 : method의 formal parameter를 호출(call)할 때formal parameter의 변수로 주소가 전달
public class TestMax {
public static void main(String[] args) {
int i = 5;
int j = 12;
int k = max(i,j);
System.out.println(i + "와 " + j + "중 최댓값 : " + k);
}
// 2개 숫자중에 최대값 구하기
public static int max(int num1, int num2) {
int result;
if (num1 > num2) {
result = num1;
} else {
result = num2;
}
return result;
}
}
- 먼저 max 이름을 가진 method를 생성해줍니다.
- => 생성방법은 public static int max()로 생성해주면 됩니다.
- 그 다음은 main method에 비교할 정수 첫번째를 num1, 두번째를 num2라고 해줍니다.
- 다시 max method에서 if 문을 사용하여 num1이 num2보다 크면 num1이 출력하게 하고, num2가 크면 num2가 출력되는 코딩을 해줍니다.
- 마지막으로는 main method에서 println을 써서 최댓값을 출력합니다.
5. method overloading
package p05.practice_method_overloading;
// method overloading 정의
// 1. method이름이 동일하더라도 method signature가 다른 경우 JVM이 다른 method로 인식하는 것임
// 2. C language에서는 method overloading이 허용 안됨
// => C language의 method signature는 method 이름만 해당됨
public class TestMethodOverloading {
public static void main(String[] args) {
System.out.println("3과 4의 최대값 : " +max(3, 4));
System.out.println("3.2과5.4의 최대값 : " +max(3.2, 5.4));
System.out.println("3.2과 5.4와 10.4의 최대값: " +max(3.2, 5.4 ,10.4));
}
public static int max(int num1, int num2) {
if (num1 > num2) {
return num1;
}else {
return num2;
}
}
public static double max(double num1, double num2) {
if (num1 > num2) {
return num1;
}else {
return num2;
}
}
public static double max(double num1, double num2, double num3) {
double result;
result = max(max(num1, num2), num3);
return result;
}
}
- method overloading이란?
- => method 이름이 동일하더라도 method signature가 다른 경우 JVM이 다른 method로 인식하는 것
- 위의 코딩을 보면 모두 max라는 이름의 method이지만 method signature가 달라서 밑에 결과의 사진처럼 모두 다른 결과값이 출력되는 모습을 볼 수 있습니다.
오늘은 method에 대한 실습을 해보았습니다. method는 앞으로 코딩을 할 때 많이 쓰이기때문에 많이 연습해서 자신의 것으로 만들어두는 것이 좋다고 생각됩니다. 저도 지금보다 더 연습하여 좀 더 잘 쓸 수 있게 노력하겠습니다.^^
반응형