method(메소드)

JK·2022년 12월 17일
0

JAVA

목록 보기
7/28
post-thumbnail

메소드

  • 객체지향프로그램이 나오기 전 효율적인 프로그래밍을 위해 등장한 메소드

1. 객체지향 이전의 프로그래밍

<절차지향>
1. 1부터 10까지 정수의 합 구하기
2. 결과값이 짝수인지 홀수인지 파악
3. 홀수 짝수 값 출력

int tot=0;
		for(int i=1; i<11; i++){
			tot += i;
		}
		System.out.println("1~10까지 정수합은 "+tot+"입니다");
		System.out.println((tot%2==0)? "짝수입니다":"홀수입니다");
		tot=0;
		for(int i=10; i<100; i++){
			tot += i;
		}
		System.out.println("10~100까지 정수합은 "+tot+"입니다");
		System.out.println((tot%2==0)? "짝수입니다":"홀수입니다");
  • 절차지향은 위에서 아래로 순차적 실행
  • 1~10에서 10~100으로 변경시 코드를 수정해야 함
  • 기존의 로직을 다시 사용할 때, 다시 코딩을 하는 방법
    기존 코드를 카피해서 재사용 하는 방식 = 두 방법 모두 비효율적.
  • 두번째 방식으로 코딩을 하면 동일한 로직의 코드가 문서 내에 넘쳐나,
    코드의 양이 너무 길어져 추후에 유지보수가 어려워진다.
    그래서 등장한 방식이 메소드(method, 함수)이다
  • 위 코드 메소드로 수정하기
private static int sum(int from, int to) {
		int sum = 0; //누적할 변수
		for(int i=from ; i<=to ; i++) {
			sum+=i;
		}
		return sum;
	}
	private static String evenOdd(int total) {
		String result = total%2==0 ? "짝수입니다" : "홀수입니다";
		return result;
	}
	public static void main(String[] args) {
		int total = sum(1, 10);
		System.out.println("1~10까지 정수의 합은" + total);
		System.out.println(evenOdd(total));
		//-----------------------------------------------------
		total = sum(10, 100);
		System.out.println("10~100까지 정수의 합은" + total);
		System.out.println(evenOdd(total));
	}
  • 결과
1~10까지 정수의 합은55
홀수입니다
10~100까지 정수의 합은5005
홀수입니다
  • private(내 파일 내에서만 쓸 수 있는)
  • return sum; : sum 을 호출한 곳으로 가라는 뜻
  • private static String evenOdd(int total) : evenOdd 만든후 String으로 출력

2. 객체지향의 등장 배경과 이해

  • 메소드를 이용한 방식에도 한계가 있다.
  • 데이터가 많아지고 메소드도 많아짐에 코드의 양이 많아졌다.
  • 그래서 등장한 것이 객체지향 프로그래밍이다.
  • 객체란 동일한 성질의 데이터와 메소드를 한곳에 모아두고 필요한 곳에서 언제든지 이용할 수 있게 만들어 놓은 덩어리이다.

Arithmetic class

  • 산수 메소드를 모아놓은 class
public int sum(int from, int to) { //from~to까지 정수 누적 값(return)
		int result = 0; //누적변수
		for(int i=from ; i<=to ; i++) {
			result +=i;
		}
		return result;
	}//매개변수 2개인 sum
	public int sum(int to) {
		int result = 0;
		for(int i=1 ; i<=to ; i++) {
			result += i;
		}
		return result;
	}//매개 변수 1개인 sum
	public String evenOdd(int value) {  //evenOdd를 짝 홀로 출력해야 하니 String 사용
		return value%2==0 ? "짝수입니다" : "홀수입니다";  
	}//짝수 홀수 판단
	public static int abs(int value) { //절대값을 return. 
	//접근제한자(public 등) 생략할 경우 같은 패키지에서만 사용 가능 
		int result = value>=0? value : -value;
		return result;
	}//절대값

Main class

  • Arithmetic에 만들어놓은 함수를 호출하여 사용하기
public static void main(String[] args) {
		Arithmetic ar = new Arithmetic();
		int sum =ar.sum(1, 10);
		System.out.println("1~10까지 정수합은 "+sum+"입니다");
		System.out.println(ar.evenOdd(sum));
		System.out.println("-5의 절대값은 "+ar.abs(-5)+"입니다");
	}

3. 메소드의 이해

메소드란? 작업을 수행하기 위한 명령문의 집합

  • 어떤 값을 입력받아서 처리하고 그 결과를 돌려준다.
    (입력 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)
  • 장점, 작성지침 : 반복적으로 수행되는 여러 문장을 메소드로 작성할 수 있다.

1. 매개변수를 갖지 않는 메소드

public static void main(String[] args) {
		printCh();
		System.out.println("Hello, Java");
	}

	private static void printCh() {
		for (int cnt = 1; cnt <= 20; cnt++)
			System.out.print('*');
		System.out.println();
	}
  • 결과
********************
Hello, Java

2. 매개변수를 갖는 메소드

  • printCh() 안에 '■', 15 매개변수를 넣었다.
public static void main(String[] args) {
		printCh('■', 15);
		System.out.println("Hello, Java");
	}

	static void printCh(char ch, int i) {
		for (int cnt = 1; cnt <= i; cnt++)
			System.out.print(ch);
		System.out.println();
	}
  • 결과
■■■■■■■■■■■■■■■
Hello, Java

3. Return값을 갖는 함수

  • abs안에 result라는 변수 선언 후 return
public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("절대값을 원하는 수를 입력해주세요");
		int input = sc.nextInt();
		int inputAbs = abs(input);
		System.out.printf("입력하신수 %d의 절대값은 %d", input, inputAbs);
	}
	static int abs(int in){
		int result = (in<0)? -in : in;    
		return result;
	}
  • 결과
절대값을 원하는 수를 입력해주세요
-8
입력하신수 -8의 절대값은 8

4. 메소드의 재귀적 호출

  • factorial 이용
public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int num;
		do {
			System.out.print("몇!을 계산할까요? ");
			num = scanner.nextInt();
		}while(num<=0);			
		long result = factorial(num);
		System.out.println(num + "! =" + result);
	}
// s! = s*(s-1)!
// 1! = 1 (factorial 계산은 양수만 입력하는 것으로 한다)
	private static long factorial(int s) {
		if(s == 1) {
			return 1;
		}else {
			return s * factorial(s-1);
		}
	}

Quiz

  • 사용자로부터 원하는 단수(2~9) 구구단을 출력하는 프로그램을 구현하시오.
  • 단, 단수를 매개변수로 받아 해당 단수의 구구단을 출력하는 부분을 method로 처리한다.
  • 사용자가 2~9 사이의 수가 아닌 수를 입력할 시 2~9사이의 수를 입력할 때까지 계속 입력 받는다.
public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num;
		do {
			System.out.print("원하는 단 수를 입력하세요 : ");
			num = sc.nextInt();   //수 입력받기
		} while (num < 2 || num > 9);        //2~9사이의 수를 입력할 때 까지
		num2(num);
	}

	private static void num2(int a) {
		for (int i = 1; i <= 9; i++) {
			System.out.printf("%d * %d = %d\n", a, i, a * i);
		}
	}
profile
씨앗 개발자

0개의 댓글