본문 바로가기
programming language/Java

[Java] 03.메서드

by NOHCODING 2021. 11. 28.
반응형

 

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

댓글