본문 바로가기

카테고리 없음

Method 실습

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까지의 순차적으로 더해진 값이 출력됩니다.

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.



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인지 확인해주는 조건을 넣어줍니다.

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.



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(); 괄호 안에 우리가 찾고 싶은 점수를 입력하면 무슨 등급인지 찾을 수 있습니다.

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.


 


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을 써서 최댓값을 출력합니다.

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다. ( i가 5이고 j가 12인 정수에서 최댓값을 찾은 결과입니다.)



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가 달라서 밑에 결과의 사진처럼 모두 다른 결과값이 출력되는 모습을 볼 수 있습니다.

위 사진은 위 코딩의 결과를 Console 창에 나타낸 것이다.



오늘은 method에 대한 실습을 해보았습니다. method는 앞으로 코딩을 할 때 많이 쓰이기때문에 많이 연습해서 자신의 것으로 만들어두는 것이 좋다고 생각됩니다. 저도 지금보다 더 연습하여 좀 더 잘 쓸 수 있게 노력하겠습니다.^^

반응형