0. 메서드란?
① 메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것
② 수학의 함수와 유사하지만 자바의 메서드는 입력값, 출력값이 없을 수도 있음.
1. 메서드를 사용하는 이유
(1) 높은 재사용성(reusablility)
① 한 번 만들어 놓은 메서드는 다른 프로그램에서도 사용이 가능하다.
(2) 중복된 코드의 제거
① 반복되는 문장들을 하나의 메서드로 작성
② 전체 소스 코드의 길이도 짧아지고 수정해야할 코드의 양이 줄 수 있다.
// 같은 내용의 코드가 반복됨.
// 변경할 때도 두 곳을 모두 수정해야 함.
public static void main (String args[]){
for(int i = 0; i < 10 ; i++){
numArr[i] = (int)(Math.random() * 10);
}
for(int i = 0; i < 10 ; i++){
System.out.printf("%d", numArr[i]);
}
System.out.println();
for(int i = 0; i < 10 ; i++){
System.out.printf("%d", numArr[i]);
}
}
//printArr이라는 메서드 생성
static void printArr(int[] numArr){
for(int i = 0 ; i <10 ; i++){
System.out.printf("%d", numArr[i]);
}
System.out.println();
}
//반복되는 코드 대신 메서드를 호출
public static void main(String args[]){
for (int i = 0; i < 10 ; i++){
numArr[i] = (int)(Math.random() * 10);
}
printArr(numArr); //배열을 출력
.
.
.
printArr(numArr); //배열을 출력
}
(3) 프로그램의 구조화
① main 메서드는 프로그램의 전체 흐름이 한눈에 들어올 정도로 구조화 하는 연습을 해야 함.
② 처음에 프로그램을 설계할 때
→ 내용이 없는 메서드를 작업단위로 만들어 놓고, 하나씩 완성해가는 것도 좋은 방법
//프로그램의 구조를 단순화시키는 예제
public static void main(String args[]){
int[] numArr = new int[10];
initArr(numArr); // 1. 배열을 초기화
printArr(numArr); // 2. 배열을 출력
sortArr(numArr); // 3. 배열을 정렬
printArr(numArr); // 4. 배열을 출력
}
//내용이 없는 메서드 단위를 만든 후, 하나씩 완성해 나가는 예시
static int showMenu() { /* 나중에 내용을 완성한다. */}
static void inputRecord() { /* 나중에 내용을 완성한다. */}
static void changeRecord() { /* 나중에 내용을 완성한다. */}
static void deletRecord() { /* 나중에 내용을 완성한다. */}
static void searchRecord() { /* 나중에 내용을 완성한다. */}
static void showRecordList() { /* 나중에 내용을 완성한다. */}
public static void main(String args[]){
switch(showMenu()){
case 1: inputRecord(); break; //데이터를 입력받는 메서드
case 2: changeRecord(); break; //데이터를 변경하는 메서드
case 3: deletRecord(); break; //데이터를 삭제하는 메서드
case 4: searchRecord(); break; //데이터를 검색하는 메서드
defalt: showRecordList(); break; //데이터의 목록을 보여주는 메서드
}
}
2. 메서드의 선언과 구현
▶메서드의 구성 : 선언부 (header , 머리) / 구현부 (body, 몸통)
반환타입 메서드이름(타입이름, 타입 변수명, ... ){
//메서드 호출 시 수행될 코드
}
int add(int a, int b){
int result = a + b;
return result;
}
(1) 메서드의 선언부 (method declaration, method header)
① 메서드 선언부 : 메서드 이름, 매개변수 선언, 반환타입
int add (int X, int y){ //반환타입 메서드이름 (매개변수 선언(입력))
int result = x + Y;
return result; // 결과값을 반환
}
(2) 매개변수 선언(parameter declaration)
① 매개변수 : 메서드가 작업을 수행하는데 필요한 값을 제공 받기 위한 변수
② 일반적인 변수선언과 달리 두 변수의 타입이 같아도 변수의 타입을 생략할 수 없다.
int add(int x, int y){ ... } // OK
int add(int x, y){ ... } // 에러. 매개변수 Y의 타입이 없다.
(3) 메서드의 이름(method name)
① 메서드는 특정 작업을 수행하므로 메서드의 이름은 동사인 경우가 많음
② 이름만으로도 메서드의 기능을 쉽게 알 수 있도록 함축적이면서도 의미있는 이름을 짓도록 노력해야 함.
(4) 반환타입(return type)
① 메서드의 수행 결과(출력)인 '반환 값'의 타입을 작성
② 반환값이 없는 경우 : void (아무 것도 없음을 의미)
(5) 메서드의 구현부(method body, 메서드 몸통)
① 메서드의 구현부 : 메서드의 선운부 다음에 오는 괄호 {}
② 메서드를 호출할 때 수행될 문장을 넣음
(6) return 문
① 반환타입이 void가 아닌경우, 구현부 안에 return 반환값이 반드시 포함되어 있어야 함.
② 작업을 수행한 결과인 반환값을 호출한 메서드로 전달 함
③ 반환하는 값의 타입은 반환타입과 일치하거나 적어도 자동 형변환이 가능해야 함.
④ 단 하나의 값만 반환할 수 있음
int add(int x , int y){
int result = x + y;
return result ; // 작업 결과(반환값)을 반환한다.
}
// 밑줄 친 부분이 일치해야한다.
(7) 지역변수(local variable)
① 메서드 내에 선언된 변수들은 해당 메서드 안에서만 사용가능함.
② 서로 다른 메서드라면 같은 이름의 변수를 선언해도 가능
③ 지역변수 : 메서드 내에 선언된 변수
int add(int x, int y){
int result = x + y;
return result;
}
int multiply(int x, int y){
int result = x * y;
return result;
}
3. 메서드의 호출
메서드이름(값1, 값2, ...); //메서드를 호출하는 방법
print99danAll(); //void print99danAll()을 호출
int result = add(3,5); //int add(int x, int y)호출하고, 결과를 result에 저장
(1) 인자(argument) 매개변수(parameter)
① 인자 : 메서드를 호출 할 때 괄호 () 안에 지정해준 값들을 인자 또는 인수라고 함.
② 인자의 개수와 순서는 호출된 메서드의 매개변수와 일치해야 함
(2) 메서드의 실행흐름
① 같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않고도 서로 호출 가능
② static 메서드는 같은 클래스 내의 인스턴스 메서드를 호출 할 수 없음
③ 메서드 호출 → 지금까지 실행 중이던 메서드 실행 멈춤 → 호출된 메서드의 문장 실행
'programming language > Java' 카테고리의 다른 글
[Java] 02. 변수 (0) | 2021.11.28 |
---|---|
[Java] 01.클래스와 객체 (0) | 2021.11.28 |
[Java] PrepareSatement (0) | 2021.11.05 |
[Java]데이터 베이스 연결 예제 (0) | 2021.11.05 |
[Java] 1. 자바를 시작하기 전에 (2) | 2021.10.05 |
댓글