본문 바로가기
👨‍🏫Study/JAVA

[JAVA] 06 - 4 메소드

by 코푸는 개발자 2021. 8. 6.
728x90

용어정리

  • 선언부 : 리턴타입, 메소드 이름, 매개 변수 선언
  • void : 리턴값이 없는 메소드는 리턴 타입으로 void
  • 매개 변수 : 메소드 호출 시 제공되는 매개값이 대입되어 메소드 블록 실행 시 이용됨
  • 리턴문 : 메소드의 리턴값을 지정하거나 메소드 실행 종료를 위해 사용할 수 있음
  • 호출 : 메소드를 실행하려면 ‘메소드 이름(매개값,…)’ 형태로 호출
  • 오버로딩 : 클래스 내에 같은 이름의 메소드 여러 개 선언하는 것을 말함
메소드 선언부
  • 리턴 타입 : 메소드가 리턴하는 결과의 타입 표시
  • 메소드 이름 : 메소드의 기능이 드러나도록 식별자 규칙에 맞게 지음
  • 매개 변수 선언 : 메소드 실행할 때 필요한 데이터를 받기 위한 변수 선언
  • 메소드 실행 블록 : 실행할 코드 작성

형식

리턴타입 메소드이름 (매개변수선언){
    메소드 실행 블록, 실행할 코드 작성
}

 

메소드 선언과 호출

리턴 타입

  • 메소드를 싱행한 후의 결과값 타입
  • 리턴값 없을 수도 있음
  • 리턴값이 있는 경우 리턴 타입이 선언부에 명시
  • 리턴값 존재 여부에 따라 메소드 호출 방법이 다르다.
  • 리턴값이 void로 선언된 메소드에서 return은 메소드 실행 종료에 사용된다.
void poweron(){...} // 결과값이 없을 때
double divide(int x, int y){...} // 결과값이 있을 때

// 리턴값이 없을 때
poweron(); // 그냥 사용

// 리턴값이 있을 때
double result = divide(10,20); // 결과값을 받을 변수를 선언하고 받아야 한다.

메소드 이름

  • 숫자로 시작하면 안되고 $ _ 를 제외한 특수문자 사용 불가
  • 메소드 이름은 관례적으로 소문자로 작성
  • 서로 다른 단어가 혼합된 이름의 경우 뒤이어 오는 단어의 첫 글자를 대문자로 작성
void run()
void startEngine()

매개 변수 선언

  • 메소드 실행에 필요한 데이터를 외부에서 받아 저장할 목적

메소드 사용 예시

// 클래스 파일
package sec03.exam02;

public class Math {
	
	double divide(int x,int y) {
		return (double)x/y;
	}
}

// 메인 파일
package sec03.exam02;

public class runstatementexample {

	public static void main(String[] args) {
		Math a = new Math();
		double result = a.divide(5, 10);
		System.out.println("result = " + result);
	}

}

만약 인자 타입이 int인데 int보다 작은 byte 타입 등을 넣으면 자동으로 변환되서 진행되지만 int 초과 타입을 넣으면 컴파일 에러가 발생한다.

매개 변수의 개수를 모를 경우

매개 변수를 배열 타입으로 선언

// 메소드
타입 메소드명(배열타입 배열인자명)
int sum1(int[] value){..}

// 메인에서 사용
int[] value = {1,2,3};
int result = sum1(value); // 객체를 만들고 매개로 
int result = sum1(new int[] {1,2,3,4,5}); // 바로 배열객체를 만들어 매개로

 

배열을 생성하지 않고 값의 목록만 넘겨주는 방식

타입 메소드명(인자타입 ... 배열인자명) // 점 3개

// 메소드
int sum2(int ... values){}

int result = sum2(1,2,3);

int[] values = {1,2,3,4,5};
int result = sum2(values);
int result = sum2(new int[] {1,2,3,4,5});

선언은 맨 처음 방법과 다르게 … 을 사용해서 해도 자바는 배열로 인식하기 때문에 배열을 매개값으로 제공해도 똑같이 동작한다. 즉, 첫 번재 방법은 반드시 배열 객체를 인자로 줘야하고, 두 번째 방법는 그냥 값을 주나, 배열을 주나 상관없다.

 

메소드 오버로딩
  • 같은 이름의 메소드를 여러 개 선언
  • 매개값을 다양하게 받아 처리할 수 있도록 하기 위해서 사용
  • 매개 변수의 타입, 개수, 순서 중 하나가 달라야 함
    • 매개 변수의 이름은 오버로딩과 상관없음을 주의
  • 리턴타입은 같으나 다르나 상관 없고, 메소드의 이름은 동일해야 함
class 클래스명{
  리턴타입 메소드이름 (타입변수,....){
    // 실행문    
  }

  리턴타입 메소드이름 (타입변수,....){
    // 실행문
  }
}

// 예시
// 클래스 파일
class plus{
  int plus(int x,int y){
    int result = x+y;
    return result;
  }
  double plus(double x,double,y){
    double result = x+y;
    return result;
  }
}

// 메인파일
plus(10,20); // 첫 번째 메소드 실행
plus(10.1,20.1); // 두 번째 메소드 실행
plus(10,20.1); // double이 int보다 크므로 자동변환되어 두 번재 메소드 실행
728x90

댓글