Search

메소드

메소드 (method)

특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것
메소드가 작업을 수행하는 데에는, 입력출력값만 알면 됨.
내부적으로 어떻게 동작하는 지는 몰라도 사용에 지장 전혀 X

메소드의 사용 이유

1. 높은 재사용성 (Reusability)

한번 만들어 놓은 메소드는 몇 번이고 호출 가능하며, 다른 프로그램에서도 사용 가능

2. 중복된 코드의 제거

반복되는 문장들을 묶어서 하나의 메소드로 작성하여 코드를 한줄로 대체 가능
→ 전체 소스 코드 길이도 짧아지고, 수정할 때도 간편해져 오류 발생 위험도 줄어듦.

3. 프로그램의 구조화

큰 규모의 프로그램에서는 문장들을 작업 단위로 나눠 여러 개의 메소드에 담아 프로그램을 단순화 시키는 것이 필수.
// 메소드 별로 문장을 분류해서 따로 담으면 main 안에 모든 문장을 넣을 필요 없다! public static void main(String args[]) { int[] numArr = new int[10]; initArr(numArr); // 배열을 초기화 printArr(numArr); // 배열을 출력 sortArr(numArr); // 배열을 정렬 printArr(numArr); // 배열을 출력 }
Java
처음 프로그램을 설계할 때 내용이 없는 메소드를 작업 단위로 만들어 놓고, 하나씩 완성해가는 것도 프로그램 구조화에 좋은 방법
static int showMenu() { } static void inputRecord() { } static void changeRecord() { } static void deleteRecord() { } static void searchRecord() { } static void showRecordList() { } public static void main(String args[]) { switch(showMenu()) { case 1: inputRecord(); break; case 2 : changeRecord(); break; case 3 : changeRecord(); break; case 4 : changeRecord(); break; default : showRecordList(); } }
Java

메소드의 선언과 구현

메소드 : 선언부(header) + 구현부(body)
반환타입 메소드이름 (타입 변수명, 타입 변수명, ...) // 선언부 { // 메소드 호출 시 수행될 코드. 구현부 { int add(int a, int b) { int result = a + b; return result; // 호출한 메소드로 결과를 반환 }
Java

메소드 선언부(method declaration, method header)

메소드의 이름 + 매개변수 선언 + 반환 타입
메소드가 작업을 수행하는 데 어떤 값들이 필요하고, 작업 결과로 어떤 타입의 값을 반환하는지에 대한 정보를 제공

매개변수 선언(parameter declaration)

매개변수 : 메소드가 작업을 수해앟는 데 필요한 값들(입력)을 제공받기 위한 것
필요한 개수만큼 변수를 선언하고, 변수 간 구분은 ,로.
값 입력이 필요 없으면, 괄호 안을 공백으로

메소드 이름(method name)

특정 작업을 수행하므로 동사인 경우가 많음
이름만으로 메소드의 기능을 쉽게 알 수 있게 네이밍 센스가 중요.

반환 타입(return type)

메소드의 작업 수행 결과(출력)인 반환값(return value)의 타입을 작성
반환 값이 없는 경우는 void

메소드 구현부(method body)

메소드를 호출했을 때 수행될 문장들 작성

return문

메소드 반환타입이 void가 아닌 경우, 반드시 구현부 { } 안에 return 반환값; 필수
반환값은 반환 타입과 일치하거나 자동 형변환이 가능한 값으로
단 하나의 값만 반환 가능

지역 변수(local variable)

지역 변수 : 메소드 내에 선언된 변수
메소드 내 선언된 변수들은 메소드 내에서만 사용하므로, 메소드가 다르다면 변수들의 이름은 서로 겹쳐도 됨.

메소드 호출

메소드 이름(1,2, ...) // 메소드 호출 print99danAll(); // void print99danAll() 호출 int result = add(3, 5); // int add(int x, int y)를 호출하고, 결과를 result에 저장
Java

인자(argument)와 매개변수(parameter)

인자(인수) : 메소드를 호출할 때 괄호()안에 지정해준 값들
인자의 개수와 순서는 호출된 메소드에 선언된 매개변수와 일치해야 함.
메소드가 호출 시 매개변수에 대입되므로, 매개변수 타입과 일치하거나 자동 형변환이 가능해야 함.
반환 타입이 void가 아닌 경우, 메소드 작업 수행 후, 반환값을 변수에 저장하는 것이 일반적 저장 안해도 문제는 없음.
int result = add(3, 5); add(3, 5);
Java

메소드의 실행 흐름

MyMathTest.java

return 문

현재 실행 중인 메소드를 종료하고 호출한 메소드로 복귀
모든 메소드에 반환값 유무에 관계없이 return;이 필요
void의 경우 컴파일러에 의해자동으로 return;이 추가되는 것임.

반환값(return value)

return의 반환값으로 변수 외에 수식이 올 수도 있음
int add(intx, int y) { int result = x + y; return result; } int diff(int x, int y) { int resut = abs(x-y); return result; } int abs(int x) { if (x >= 0) { return x; } else { return -x; } } // 위 식들의 간편화 버전 int add(int x, int y) { return x + y; // 얼밀히는 수식이 계산된 결과가 반환 된 것임. } int diff(int x, int y) { return abs(x-y); } int abs(int x) { return x >= 0 ? x : -x; }
Java

매개변수의 유효성 검사

매개변수 값이 적절한 것인지 확인하는 게 구현부 작성에서 가장 먼저
float divide(int x, int y) { // 작업 전 나누는 수(y)가 0인지 확인 // 반환타입이 float이기 때문에 0으로 나눌 수 없음 if (y == 0) { System.out.println("0으로는 나눌 수 없습니다."); return 0; // 매개변수가 유효치 않으므로 메솓 ㅡ종료 } return x / (float)y; }
Java
적절치 않은 값이 매개변수를 통해 넘어온다면,,
매개변수 값 보정
보정이 불가능하면 return문을 사용해 작업 중단 후 메소드로 복귀

참고 자료