728x90
메서드?
- 메서드는 함수(function)의 한 종류입니다. 함수란 무엇인지 먼저 살펴보고, 자바에서 사용하는 메서드에 대해 자세히 알아보겠습니다.
함수란?
- 함수란 '하나의 기능을 수행하는 일련의 코드'를 말합니다.
- 예를 들어 1. 숫자 두 개를 입력 받아 더한다. 2. 가장 좋은 점수 두 개를 더한다. 와 같이 "더한다"는 중복되는 기능이 있는 경우, 해당 기능을 수행하는 코드를 묶어서 '더하기 함수'로 만들 수 있습니다.
- 그리고 더하기 기능이 필요할 때마다 이 함수를 불러서 연산을 하는 것입니다.
- 이처럼 함수는 어떤 기능을 수행하도록 어떤 기능을 수행하도록 미리 구현해 놓고 필요할 때마다 호출하여 사용할 수 있습니다.
함수의 입력과 반환
- 함수는 이름이 있고 입력 값과 결과 값을 갖습니다.
- 두 수의 합을 구하는 메서드에서 num1, num2 는 함수의 입력으로 받는 '매개변수'입니다.
- 그후 반환되는 결과 값인 result 를 '반환값'이라고 합니다.
함수 정의하기
- 더하기 함수 실제 코드를 작성해보면 다음과 같습니다.
int add (int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
- 이렇게 함수가 하는 일을 코드로 구현하는 것을 '함수를 정의한다'라고 합니다.
함수 반환형 int
- 제일 앞에 있는 int 는 함수 반환형으로, 함수의 반환값이 가져야 할 데이터 형식을 의미합니다.
함수 이름 add
- 함수 이름은 프로그래머가 임의로 만듭니다.
- 함수 기능과 관련 있게 만들어야 유용합니다.
매개변수 num1, num2
- add 함수는 두 값을 더하는 일을 합니다. 먼저 두 값이 입력되어야 합니다.
- 이 두 값은 함수를 호출할 때 괄호 안의 자료형에 맞게 함수에 전달됩니다.
- 함수는 넘겨받은 값으로 덧셈을 수행합니다.
- 이렇게 함수 내부에서 사용할 괄호 안의 변수를 매개변수라고 합니다.
- 매개변수는 필수가 아닙니다. 함수에 따라 매개 변수 없이 동작한 후 값을 반환하는 함수도 있습니다.
return 예약어와 반환형
- add( ) 메서드를 수행한 후 결과 값은 변수 result 에 저장됩니다.
- 그리고 해당 함수를 호출했을 때 반환되는 값으로 '반환 값'이라고 부릅니다.
- return 예약어를 사용하여 result 값을 반환하는 것입니다.
- 반환되는 갑의 자료형을 반환형이라고 하며 함수 정의에 처음에 적어줍니다.
- 반환 값은 매개변수처럼 필수가 아닙니다. 반환 값이 없는 함수도 있습니다.
- 함수 반환형 자리를 비어둘 수는 없으니 반환 값이 없을 때는 void 라고 씁니다.
- return 예약어는 함수 수행을 끝내고 해당 함수를 호출했던 곳으로 돌아가서 다시 실행하도록 할 때도 사용할 수 있습니다. 예를 들어, 수를 나누는 함수를 만들었다고 했을 때 나누는 값이 0이면 안되므로, 안내 메시지를 띄우고 return; 으로 함수 수행을 끝내도록 만들 수 있습니다. 함수 수행을 끝내는 목적일 때는 return 뒤에 반환 값을 적지 않아도 됩니다.
함수 호출하고 값 반환하기
- 직접 함수를 정의하고 결과 값을 돌려주는 함수를 사용해보겠습니다.
package exercise;
public class Ex11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1 = 10;
int num2 = 20;
int sum = add(num1, num2);
System.out.println(num1 + " + " + num2 + " = " + sum);
}
public static int add(int n1, int n2) {
int result = n1 + n2;
return result;
}
}
- 위 코드는 add( ) 함수를 구현했습니다.
- add( ) 함수는 두 개의 매개변수에 int형 값을 전달받아 두 수의 합을 둘려줍니다.
- 결과 값이 정수이기 때문에 반환형이 int 형입니다. 또한 해당 반환형의 결과를 담는 main 클래스의 sum 변수 또한 int 형을 앞에 써주었습니다.
매개변수 살펴보기
- main 메서드에서 add( ) 함수를 호출할 때 num1, num2 두 개의 인자(입력값)를 넘겼습니다.
- 함수를 구현하는 부분에서는 add(int n1, int n2) 와 같이 매개변수로 int n1 과 int n2 를 사용했습니다.
- 프로그래밍을 처음 공부하는 사람들은 함수를 호출할 때 넘겨주는 변수 이름과 함수를 구현할 때 사용한 매개변수 이름이 같아야 한다고 생각할 수 있습니다. 그런데, 이 둘은 전혀 상관이 없는 관계입니다. 왜냐하면 num1, num2 는 main( ) 메서드에서 선언한 변수로, add( ) 함수를 호출할 때 두 값을 넘겨주기 위해 사용했습니다. 반대로 n1, n2는 add( ) 메서드에서 선언한 새로운 변수입니다. 따라서 함수를 호출할 때 사용하는 변수 이름과 호출되는 함수에서 사용하는 변수는 서로 다른 변수이므로 이름이 같아도 되고 달라도 상관없습니다.
함수 호출과 스택 메모리
- 함수가 수행될 때 컴퓨터 메모리를 어떻게 사용하는지 살펴보겠습니다. (매우 중요한 내용입니다)
- 함수를 호출하면 그 함수만을 위한 메모리 공간이 할당되는데, 이 공간을 스택(stack)이라고 부릅니다.

- 기본적인 개념은 함수(메서드)가 호출되면 그 함수가 사용할 메모리 공간이 스택(stack)에 생성된다는 것입니다.
- 프로그램을 시작할 때 main( ) 메서드부터 호출되기 때문에 가장 먼저 main( ) 메서드에 포함된 변수 num1, num2, sum 을 저장할 메모리 공간이 stack 안에 생성됩니다. 그리고 main( ) 메서드에서 add( ) 함수를 호출하면 add( ) 함수를 저장할 메모리 공간이 스택에 새롭게 생성됩니다.
- main( ) 메서드에서 호출되었던 add( ) 메서드의 함수 수행이 끝나고 결과 값이 반환되면 add( ) 메서드에서 사용하던 메모리 공간은 자동으로 사라집니다.
- 프로그램에서 여러 함수를 사용하는 경우에 함수를 호출한 순서대로 메모리 공간이 만들어지고 맨 마지막에 호출한 함수부터 반환됩니다. 따라서 메모리 공간도 맨 마지막에 추가된 것부터 스택에서 사라집니다.
- 이런 이유로 main( ) 메서드에서 사용하는 num1, num2 변수와 add( ) 메서드에서 사용하는 n1, n2 변수는 서로 다른 메모리 공간을 사용하므로 이름이 같든 다르든 상관없습니다.
- 이렇게 함수 내부에서만 사용하는 변수를 지역 변수라고 합니다. 지역 변수는 스택 메모리에 생성됩니다.
함수의 장점
- 함수의 장점은 무엇일까요?
- 첫 째, 함수를 사용하면 기능을 나누어 코드를 효율적으로 구현할 수 있습니다. 이런 상황이 있을 수 있습니다. 계산기를 구현할 때, 계산기라는 프로그램을 한 번에 구현하는 것 보다, 덧셈기능&나눗셈기능 등으로 기능별로 나누어 작성한 다음 필요할 때마다 꺼내서 쓸 수 있습니다. 이렇게 기능을 분리해서 구현하면 프로그램 코드의 가독성이 좋아집니다. 너무 긴 코드가 main( ) 함수에 들어 있으면 이해하기 어렵기 때문입니다.
- 둘 째, 기능별로 함수를 구현해 놓으면 같은 기능을 매번 코드로 만들지 않고 그 기능의 함수를 호출하면 되니까 편리합니다. 또 중복되는 코드를 막을 수도 있습니다.
- 셋 째, 프로그램을 실행할 때 생긴 오류를 수정하는 디버깅 작업을 할 때도 편리합니다. 하나의 기능이 하나의 함수로 구현되어 있기 때문에 오류가 난 기능만 찾아서 수정하면 되기 때문입니다.
하나의 함수에 하나의 기능 구현하기
- 앞에서 우리는 add( ) 메서드를 만들었습니다. 이 함수가 해야하는 기능은 무엇인가요? '더하기'입니다.
- 만약 하나의 함수에 여러 기능이 섞여 있으면 앞에서 이야기한 함수의 장점을 활용할 수 없습니다.
- 또한 무조건 모든 소스코드를 나누어 호출한다고 해서 함수를 구현하는 것이 아닙니다.
- 함수 코드의 행 수가 길고 짧고가 중요한 것도 아닙니다.
- 필요한 기능 함수를 만들고, 그 이름에 맞는 하나의 기능을 구현하는 것이 중요합니다.
클래스 기능을 구현하는 메서드
- 자바 프로그램에는 클래스 내부에서 사용하는 멤버 함수가 있습니다.
- 자바에서는 이 멤버 함수를 메서드 라고 합니다.
- 즉 메서드는 함수에 객체 지향 개념이 포함된 용어로 이해하면 됩니다.
- 앞서 설명한 함수의 스택 메모리 사용 방법과 함수의 장점 등도 모두 메서드에 동일하게 적용됩니다.
메서드 구현하기
- 학생 이름을 반환하는 메서드를 구현해보겠습니다.
class Student {
int studentID;
String studentName;
int grade;
String address;
public String getStudentName(String name) {
return studentName;
}
}
- 메서드 이름은 해당 클래스를 사용하는 코드의 입장에서 짓는 것이 좋습니다.
- 예를 들어, 학생 이름을 가져오는 기능을 제공하는 메서드는 getStudentName 으로 짓습니다.
- 이 메서드의 반환 값은 studentName 인데 studentName 자료형이 String 이므로 반환형도 String 입니다.
- 학생 이름을 멤버 변수에 대입하는 setStudentName( ) 메서드를 만들어 봅시다.
class Student {
int studentID;
String studentName;
int grade;
String address;
public String getStudentName(String name) {
return studentName;
}
public void setStudentName(String name) {
studentName = name;
}
}
- setStudentName( ) 메서드는 Student 클래스를 사용하는 다른 코드에서 학생 이름을 새로 지정하거나 바꾸어 줍니다. 그래서 이름을 set 을 붙여서 지어주었습니다.
- 이 메서드는 이름을 전달받아 지정하는 것이기 때문에 매개변수 String name 이 필요합니다.
- 반환 값은 없으므로 반환형은 void로 지정합니다.
자바의 이름 짓기 규약
- 클래스 이름은 대문자로 시작합니다.
- 하나의 자바 파일에는 클래스가 여러 개일 수 있지만, public 클래스는 단 하나이다.
- public 클래스 이름과 자바 파일 이름은 같아야 합니다.
- 패키지 이름은 모두 소문자로 만듭니다.
- 변수와 메서드 이름은 소문자로 시작하며, 이름이 길어지는 경우에는 중간에 새 단어로 바뀔 때마다 대문자를 써 줌으로써 가독성을 좋게 합니다. (이런 표기법을 낙타 표기법 camel notation 이라고 합니다)
'[그린컴퓨터] Server > JAVA(객체 지향 프로그래밍)' 카테고리의 다른 글
| 참조 자료형 {참조 자료형이란, 헷갈렸던 점(전반부), 헷갈렸던 점(후반부), 추가 이해 자료} (0) | 2023.05.17 |
|---|---|
| 생성자 {생성자란, 생성자 만들기, 생성자 오버로드} (0) | 2023.05.17 |
| 클래스와 인스턴스 {main 함수, main 함수를 사용하는 두 가지 방법, new 예약어로 클래스 생성하기, 인스턴스와 참조변수, 인스턴스와 힙 메모리, 객체 지향 프로그램 관점 용어 정리} (0) | 2023.05.17 |
| 클래스 살펴보기 {클래스 속성을 구현하는 멤버 변수, 클래스 기능을 구현하는 메서드, 패키지란?} (0) | 2023.05.15 |
| 객체 지향 프로그래밍과 클래스 {객체란, 생활 속 예시, 클래스란?} (0) | 2023.05.15 |