지구정복

[JAVA] 메소드 본문

데이터 엔지니어링 정복/JAVA & JSP

[JAVA] 메소드

eeaarrtthh 2020. 10. 26. 23:10
728x90
반응형

ㅁ메소드

 

ㅇ메소드란

메소드는 객체의 동작에 해당하는 중괄호 블록을 의미한다.

 

메소드 선언은 선언부와 실행블록으로 구성. 메소드 선언부를 메소드 시그너처라고 한다.

메소드 선언부와 실행블록에는 다음 요소들을 포함한다.

리턴타입 메소드이름 ([매개변수선언, ...]) {
	
    실행코드
    
}

-리턴타입: 메소드가 리턴하는 결과의 타입을 표시

-메소드 이름: 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지음

-매개 변수 선언: 메소드를 실행할 때 필요한 데이터를 받기 위한 변수를 선언

-메소드 실행 블록: 실행할 코드를 작성

 

 

ㅇ메소드 선언

하나의 계산기가 있다고 하자. 이 계산기의 기능은 총 두 가지이다.

 

-리턴타입

하나는 전원을 키는 '전원 기능'

리턴값없음

 

다른 하나는 나눗셈을 하는 '나눗셈 기능'

리턴값은 나눗셈 결과 / 리턴 타입으로 double 지정

 

첫 번째 기능은 아래와 같다.

void powerOn() { ... }

 

두 번째 기능은 아래와 같다. 이때 리턴값이 저장되는 변수의 타입도 리턴값 타입과 일치시켜야 한다.

나눗셈의 결과는 double 이므로 똑같이 지정한다.

//메소드 선언
double divide(int x, int y);

//메소드 호출
double result = divide(10, 20);

 

 

-매개변수선언

매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용된다. 메소드에서 매개 변수가 필요한 

경우가 있고 필요 없는 경우가 있다.

 

위에 powerOn() 메소드는 매개변수가 필요없다. 단지 전원을 키기만하면 되기 때문이다.

하지만 divide(int x, int y) 메소드는 나눗셈을 하기 위해서는 매개변수 정수 x와 y가 필요하기 때문이다.

 

 

 

만일 매개 변수의 개수를 모를 경우에는 메소드를 어떻게 선언하는가?

이럴 경우 매개변수를 배열 타입으로 선언한다.

예를들면 아래 코드와 같다.

//더하기 메소드 선언
int sum1(int[] values) {
    int sum = 0;
    for(int i=0; i<values.length; i++) {
    	sum +=values[i];
    }
    return sum;
}


//메소드에 넣을 매개변수 배열 선언
int[] values = {1, 2, 3};
int result = sum1(values);

 

하지만 위 방법은 메소드를 호출하기 전에 배열을 생성해야되는 불편함이 있다.

그래서 배열을 생성하지 않고 값의 목록만 넘겨주는 방법도 있다.

메소드 선언 시 매개변수를 ... 으로 대체하면 된다. 아래 예시 참고

//메소드 선언
int sum2(int ... values) {
    int sum = 0;
    for(int i=0; i<values.length; i++) {
    	sum += values[i];
    }
    return sum;
}


//값의 목록을 매개변수로 해서 메소드 호출
int result = sum2(1, 2, 3, 4, 5);

 

 

 

 

-리턴 값이 없는 메소드(void)

리턴값이 없는 메소드는 리턴 타입으로 void를 사용한다. 그런데 void로 선언된 메소드에서도 return문을 사용가능하다.

이것은 리턴값을 지정하는 것이 아니라 메소드 실행을 강제 종료하는 역할을 한다.

아래 예시 확인

주석처리된 곳에서 return문을 만나고 메소드는 강제 종료된다.

 

a=5이고 반복문을 통해서 -1씩 줄어든다. a가 0보다 크지 않으면 조건문의 false로 이동하며 return문을 만나서 

메소드를 종료한다.

void sample() {
	int a = 5;
    while(true) {
    	if(a>0) {
    	    System.out.println(a);
            a -= 1;
        } else {
            return;    //여기서 메소드 강제 종료
        }
    }
}

 

 

 

 

ㅇ메소드 호출

같은 클래스에서 다른 메소드를 호출할 때에는 단순히 메소드 이름으로 호출하면 되지만

외부 클래스에서 호출할 경우에는 먼저 호출할 메소드가 정의된 객체를 생성한 뒤 호출해야 한다.

 

 

-객체 내부에서 메소드 호출

아래 예시 확인

//method2가 method1을 호출하는 상황

void method1(String name, int age) {
    System.out.println("호출한 사람의 이름은 "+name+"이고 나이는 "+age+"입니다.");
}


void method2() {
    method1("홍길동", 80);
}

 

 

 

-객체 외부에서 호출

간단하게 객체를 먼저 생성하고 메소드를 호출하면 된다.

아래 예시

public class MethodEX {
    void Print() {
        System.out.println("호출완료");
    }
}



public static void main(String[] args) {
    MethodEX a = new MethodEX();    //객체 생성
    a.Print();     //생성된 객체로부터 MethodEX클래스 접근해서 메소드 호출
}

 

 

 

 

ㅇ메소드 오버로딩

클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을 메소드 오버로딩이라고 한다.

오버로딩의 사전적 의미는 많이 싣는 것이다.

메소드 오버로딩의 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다.

메소드 오버로딩의 목적은 매개값을 다양하게 받아 처리할 수 있도록 하기 위함이다.

 

예를 들어 사격형의 넓이를 재는 메소드가 있다고 하자.

사격형에는 정사각형과 직사각형 두 개가 있다.

실제로는 정사각형이든 직사각형이든 가로 X 높이이지만

예제를 위해 정사각형은 한 변의 길이를 제곱한다고 하자

 

이름이 같은 메소드에서 두 개의 기능을 하게 하려면 메소드 오버로딩해서 두 번 선언하면 된다.

아래 예시

//정사각형 넓이 구하는 메소드
double areaRectangle(double width) {
    return width * width;
}


//직사각형 넓이 구하는 메소드
double areaRectangle(double width, double height) {
    return width * height;
}

 

 

 

 

[출처]혼자공부하는자바-신용권

728x90
반응형

'데이터 엔지니어링 정복 > JAVA & JSP' 카테고리의 다른 글

[JAVA] 패키지와 접근 제한자  (0) 2020.10.28
[JAVA] 인스턴스 멤버와 정적멤버  (0) 2020.10.27
[JAVA] 생성자  (0) 2020.10.26
[JAVA] 필드  (0) 2020.10.26
[JAVA] 객체와 클래스  (0) 2020.10.26
Comments