자바를 공부해 보자

[배열과 메소드] 메소드의 개요

자바

1. 메소드의 개요

1) 메소드를 사용하는 이유

 

만약 전교생 10000명의 국어 점수를 입력해야 한다면?

코드가 굉장히 지저분해 질것임

 

 

[1] 코드를 간결하게 만들고자 할 때

여러번 실행해야 하는 코드가 있다면 메소드를 만들어 놓고 호출하여 사용

 

[2] 기능을 만들고자 할 때

기능별로 나누어서 프로그램을 작성하면, 나중에 그 기능별로 따로 가져다 사용 할 수 있음

 

2) 메소드의 형식

 

[접근제한자 ]    [지정예약어]    반환형    메소드명    (매개변수)

예외전가{.....} -> throws IOException

 

 

[1] 접근 제한자

private (자신의 클래스에서만 사용되도록 제한)

default(동일한 폴더에서만 사용되도록 제한)

protected (동일한 폴더 + 상속받은 클래스로 제한)

public (객체가 선언된 곳이면 어디에서든 사용)

 

 

 

[2] 지정예약어

class편에서 자세히 알아보자

static : 지금 수업에선 static만 알아두자

final

static final

abstract

synchronized

native

 

[3] 반환형

기본자료형            int     double

참조자료형            class를 객체화 -> class 보고 나서

void - 반환형이 없을 때 사용

 

 

[4] 메소드명

사용자 정의 명칭으로 형식에 맞게 입력

첫글자는 영문 소문자,_,$

 

[5] 매개변수

메소드 사용시 필요한 값을 받을 수 있는 곳

 

[6] 예외전가        throws IOException

예외가 발생하여 전가를 시키고자 할 때

 

 

 

 

3) 메소드 사용 예

 

 

 

 

 

4) 메소드의 4가지 형식

 

 

5) main 메소드 구성

 

main=> public static메소드만 호출 가능

 

6) 메소드 예제

두수를 입력 받아 그 합을 구하는 프로그램

 

package aaa;
import java.io.IOException;
import java.util.*;
public class methodTest1 {
 public static void main(String[] args) throws IOException{
  int su1 = input();        //input 매개변수 없었음
  int su2 = input();
  int sum = plus (su1,su2);    //두 수의 합이니깐 두수를 넣어 주어야 함
  output(sum);
 }
  public static int input() {
   Scanner sc = new Scanner(System.in);
   System.out.print("임의의 수를 입력:");
   int su = sc.nextInt();
   return su;
  }
  public static int plus(int su1, int su2) {
   return su1+su2;
 }
  public static void output(int sum) {
   System.out.println("입력하신 수의 합:"+sum);
  }

}

 

 

 

^메인을 복잡하게 만들지 않습니다

 

7) 메소드 오버로드

메소드 오버로드 : 메소드의 이름을 여러번 사용 할 수 있는 기능

 

메소드의 이름이 같고, 매개변수가 틀린 메소드 집합

매개변수가 틀린다는 말은, 자료형이 다르거나, 매개변수의 개수가 다르거나, 자료형 순서가 다른 것을 말함

반환형은 조건에 해당하지 않음

 

 

 

 

c언어 함수이름

객체지향 언어 함수이름+매개변수

 

 

 

 

 

 

 

 

8) 메소드 오버로딩

두 수를 입력 받아 그 합을 알려주는 프로그램

 

 public byte add(byte a, byte b) {
  return (byte)(a+b);
 }
 public int add (int a, int b) {
  return a+b;
 }
 public double add(double a, double b) {
  return a+b;
 }
}

 

 

 

 

9) 메소드 재귀호출

-> 메소드 내에서 자신을 또 호출 할 때 주의 할점은 반드시 종료 시점이 있어야 함

 

 

public static void disp(){

disp();

}

 

단점 : 끝나는 시점이 없음 , 오버플로우가 됨

 

 

 

팩토리얼 계산 프로그램

5! =120 이라는 결과가 나올 수 있도록 메소드 작성

 

 

 

(사람풀이) 5! = 5 *4 *3 *2 *1 =120

(컴퓨터의 풀이) 5! = 5*4!; 4!=4*3! = 3*2! ; 2! = 2*1! ; 1!=1

 

실습 : 피보나치 수열을 알아보고 프로그램을 작성

 

 

package aaa;
import java.util.*;
import java.io.*; // 한글자 입력
public class dd43 {
 public static void main(String[] args)throws IOException {
  // 두개의 수와 한개의 산술연산자를 입력받아 그 연산자 대로 하는 프로그램
  //단, 연산자가 뺼셈일 떄는 큰수에서 작은 수를 빼서 결과를 알려주세요
  //단, 나눗셈일 때는 2번째 수가 0이면 1로 고쳐서 결과를 알려주세요
  
  //메소드를 이용하여 만들기
  Scanner sc = new Scanner(System.in);
  
  int su1 = input();
  int su2 = input();
      System.out.print("산술연산자를 입력:");
          char op =(char)System.in.read(); //한글자 입력
  int result =0;
      switch(op) {
          case '+':
               result = plus(su1,su2);
               break;
              case '-':
           result = min(su1,su2);
                   break;
          case '*':
              result = mul(su1,su2);
               break;
          case '/':
               result = div(su1,su2);
                   break;
   
       default :
            System.out.println("연산자를 잘못 입력 하셨습니다." );
  }
  System.out.println("결과:"+result);
 }
 public static int plus(int a ,int b) {
  return a+b;
 }
 public static int min(int a, int b) {
  if(a>b) return a-b;
  else return b-a;   //큰수에서 작은 수 빼야하니깐
 }
 
 
 public static int mul (int a, int b) {
  return a*b;
 }
 public static int div(int a, int b) {
  if(b==0) b=1; //만약 b가 0이면 b를 1로 바꿔줘라
  return a/b;
 }
 public static int input() {
  Scanner sc = new Scanner(System.in);
  System.out.print("임의의 수를 입력:");
  int su = sc.nextInt();
  return su;
  
  
  
 }
}

 

 

----------------------------------------------

 

package aaa;
import java.util.*;
public class Exam_02 {
 public static void main(String [] args) {
  //팩토리얼 구하기
  Scanner sc =new Scanner(System.in);
  System.out.print("팩토리얼의 수를 입력:");
  int facSu = sc.nextInt();
  
  System.out.printf("%d의 팩토리얼 결과값은 %d입니다.\n", facSu , factorial(facSu));
  
 }
 public static int factorial(int n) {
  if(n==1) return 1;
  return n* factorial(n-1);
  
 }
}

 

 

 

 

팩토리얼의 수를 입력:5
5의 팩토리얼 결과값은 120입니다.

 

 

--------------------------------------

 

package aaa;

public class Exam_03 {
  public static void main(String[] args) {
   //피보나치 수열 구하기
   //1,1,2,3,5,8,13,21,34,55,89,........
   
   for ( int i =1 ; i <10 ; ++i) {
      System.out.print(Pivo(i)+" , ");
   }
   System.out.println(Pivo(10));
   
  }
  public static int Pivo(int n) {
   if(n<=2) return 1;
   return Pivo(n-2) + Pivo(n-1);
  }
}

 

 

1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55