Programming

; develop a program

Back-End/Java

[Java] 메서드(Method)

Clloud_ 2023. 1. 31. 11:57
반응형

이번 포스팅에서는 자바(Java)에서 함수(function)의 한 종류인 메서드(Method)에 대하여 공부를 해보고자 한다.

 


메서드(Method)

자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메서드(method)를 가진다.

그중에서 메서드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있다.

 

클래스에서 메서드를 작성하여 사용하는 이유

  • 중복되는 코드의 반복적인 프로그래밍을 피할 수 있다.
  • 모듈화로 인해 코드의 가독성도 좋아진다.
  • 프로그램에 문제가 발생하거나 기능의 변경이 필요할 때, 손쉽게 유지보수를 할 수 있다.
메서드를 작성할 때는 되도록 하나의 메서드가 하나의 기능만을 수행하도록 작성하는 것이 좋습니다.

 

메서드는 함수(function)의 한 종류다.

함수란 '하나의 기능을 수행하는 일련의 코드'를 말한다.

 

예를 들어 두 숫자를 더하는 세 가지 경우가 있을 때, 각각의 더하는 경우는 다르지만 모두 '두 수를 더해서 결과 값을 보여준다'는 기능이다.

이런 경우에 더하기 기능을 수행하는 코드를 묶어서 '더하기 함수'로 만들 수 있다.

이처럼 함수는 어떤 기능을 수행하도록 미리 구현해 놓고 필요할 때마다 호출하여 사용할 수 있다.

 

 


함수의 입력과 반환

함수는 이름이 있고 입력 값과 결과 값을 갖는다.

위에서 예로 든 '두 수를 더하는 함수'를 그림으로 나타내면 다음과 같다.

 

 

두 수를 입력받아서 '더하기 함수'를 거치면 두 수의 합을 반환한다.

오른쪽은 이 내용을 간단한 코드형식으로 나타낸 것이다.

  • 함수의 이름을 'add'라고 짓고 더할 두 수는 각각 num1, num2라고 정한다.
    num1, num2를 '매개변수'라고 하며, 매개변수는 함수의 입력으로 받는 변수다.
  • 두 수를 더한 결과 값을 result 변수에 저장하여 돌려준다.
    이를 '결과를 반환한다'라고 하고, 함수를 수행한 후 되돌려 주는 값인 result를 '반환 값'이라고 부른다.
함수에 이름을 붙일 때는 의미를 알 수 있는 단어를 사용하는 것이 좋다.

 


함수 정의하기 

더하기 함수를 실제 코드로 작성해보려 한다.

이렇게 함수가 하는 일을 코드로 구현하는 것을 '함수를 정의한다'라고 한다.

 

  1. 함수 이름을 적는 부분으로, 함수 이름은 변수 이름처럼 임의로 만든다.
    함수 이름은 함수 기능과 관련 있게 만드는 것이 나중에 호출하거나 이해하기 좋다.
  2. 값이 입력되는 부분으로, 함수 내부에서 사용할 괄호 안의 변수를 매개변수라고 한다.
    이 두 값은 함수를 호출할 때 괄호 안의 자료형에 맞게 함수에 전달된다.
  3. 값을 반환하는 부분으로, return 예약어를 사용하여 result 값을 반환한다.
    함수를 수행한 후 결과 값은 변수 result에 저장되고, 저장된 결과 값은 함수를 호출했을 때 반환되는 값이다.
  4. 반환 값의 자료형을 적는 부분으로, 이 함수에서 변수 result의 반환형은 정수형이므로 int라고 적는다.

 

매개변수가 필요 없는 함수

다음 예제처럼 매개변수가 필요 없는 함수도 있다.

int getTenTotal(){	
    int i;
    int total = 0;
    for(i = 1; i <= 10; i++){
    	total == i;
    }
    return total;	//1부터 10까지 더한 값을 반환
}
  • 1부터 10까지 더한 값을 반환하므로 함수에 전달할 값이 필요하지 않다.
  • 이런 경우 함수는 매개변수가 필요 없고 함수를 수행한 결과 값만 있게 된다.

 

반환 값이 없는 함수

다음 예제처럼 반환 값이 없는 함수도 있다.

void printGreeting(String name) {	
    System.out.println(name + "님 안녕하세요");
    return;	//반환 값 없음
}
  • 반환 값이 없다고 해서 반환형을 쓰는 위치를 비워두면 오류가 발생한다.
  • 이 때는 반환형을 쓰는 위치에 void라고 쓴다.

 


함수 호출하고 값 반환하기 

두 정수를 더한 후 결과 값을 돌려주는 함수를 만들고 사용해보려 한다.

이렇게 함수를 사용하는 것을 '함수를 호출한다'라고 한다.

public class FunctionTest {
	public static void main(String[ ] args) {
    	int num1 = 10;
        int num2 = 20;
        
        int sum = add(num1, num2);	//add() 함수 호출
        System.out.println(num1 + " + " + num2 + " = " + sum + "입니다");
    }
    
    public static int add(int n1, int n2) {	//add() 함수
    	int result = n1 + n2;
        return result;	//결과 값 반환
    }
}
  • add( ) 함수는 두 개의 매개 변수에 int형 값을 전달받아 두 수의 합을 돌려준다.
  • 결과 값이 정수이기 때문에 반환 형이 int 형이기 때문에 결과 값이 저장되는 sum 변수 앞에 int라고 적는다.

 

출력 결과

10 + 20 = 30입니다.

 

매개변수 살펴보기

  • add( ) 함수를 호출할 때 num1, num2 두 개의 변수를 넘겼다.
  • 함수를 구현하는 부분에서는 add(int n1, int n2)와 같이 n1, n2를 사용했다.
  • 이를 통해 변수 이름과 매개변수 이름이 달라도 된다는 것을 알 수 있다.

 


함수 호출과 스택 메모리

함수를 호출하면 그 함수만을 위한 메모리 공간이 할당되는데, 이 메모리 공간을 스택(stack)이라고 부른다.

스택은 자료가 상자처럼 쌓이는 자료구조를 말한다.
스택은 마지막에 추가된 자료부터 순서대로 꺼내서 사용할 수 있으며 LIFO(Last In First Out) 구조라고 부른다.

 

다음은 add( ) 함수를 호출하면서 메모리를 생성하는 과정을 나타낸 그림이다.

  • 함수가 호출되면 그 함수가 사용할 메모리 공간이 스택에 생성된다.
  • 프로그램이 시작할 때 main( ) 함수부터 호출하기 때문에 가장 먼저 main( ) 함수에 포함된 변수 num1, num2, sum을 저장할 메모리 공간이 생성된다.
  • main( ) 함수에서 add( ) 함수를 호출하면 add( ) 함수를 저장할 메모리 공간이 스택에 새롭게 생성된다.

 

다음은 add( ) 함수 수행이 끝나고 함수에 할당했던 메모리 공간을 해체하는 과정을 나타낸 그림이다.

 

  • add( ) 함수 수행이 끝나고 결과 값이 반환되면 add( ) 함수가 사용하던 메모리 공간은 자동으로 사라진다.
  • 여러 함수를 사용하는 경우에 함수를 호출한 순서대로 메모리 공간이 만들어지고 맨 마지막에 호출한 함수부터 반환된다.
  • 따라서 메모리 공간도 맨 마지막에 추가된 것부터 스택에서 사라진다.

 


클래스 기능을 구현하는 메서드

자바 프로그램에서는 클래스 내부에서 사용하는 멤버 함수가 있다.

이를 메서드(method)라고 하는데 메서드는 멤버변수를 사용하여 클래스의 기능을 구현한다.

즉, 메서드는 함수에 객체 지향 개념이 포함된 용어로 이해할 수 있다.

 

메서드 구현

학생 이름을 반환하는 메서드

public class Student{
	int studentID;
    String studentName;
    int grade;
    String address;
    
    public String getStudentName(){	//학생의 이름을 반환하는 메서드
    	return studentName;
    }
}
  • 메서드 이름은 해당 클래스를 사용하는 코드의 입장에서 짓는 것이 좋다.
  • 반환 값이 studentName인데 studentName 자료형이 String이므로 반환형도 String이다.

 

학생 이름을 부여하는 메서드

	...
	public void setStudentName(String name) {
		studentName = name;
	}
}
  • setStudentName( ) 메서드는 Student 클래스를 사용하는 다른 코드에서 학생 이름을 새로 지정하거나 바꾸어준다.
  • 이 메서드는 이름을 전달받아 지정하는 것이기 때문에 매개변수 name이 필요하다.
  • 반환값은 없으므로 반환형은 void로 지정한다.

 


반응형

'Back-End > Java' 카테고리의 다른 글

[Java] 생성자(Constructor)  (0) 2023.02.01
[Java] 클래스와 인스턴스  (0) 2023.01.31
[Java] 객체 지향 프로그래밍과 클래스  (0) 2023.01.30
[Java] 반복문  (0) 2023.01.29
[Java] 조건문  (0) 2023.01.29