관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch6 - 14 ~ 19[메서드란? 메서드의 선언부와 구현부, 메서드호출,메서드의 실행 흐름] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch6 - 14 ~ 19[메서드란? 메서드의 선언부와 구현부, 메서드호출,메서드의 실행 흐름]

소소한나구리 2023. 11. 15. 16:59

1) 메서드 (함수와 의미가 거의 비슷함)

  • 문장들을 묶어놓은 것, 작업단위로 문장들을 묶어서 이름 붙인 것
  • 메서드는 객체지향 개념에서 함수와 비슷한 기능을하는데 메서드는 꼭 클래스 안에 있어야 하지만 함수는 클래스에 독립적임(제약이 없음)
  • 선언부 + 구현부로 구성됨

(1) 선언부 

  • 반환타입 메서드이름 (타입 변수명, 타입 변수명, ...) - 선언부
    • 반환타입 : 작업결과 타입
    • 메서드이름 
    • ( ) : 매개변수목록 입력(작업에 필요한 값) (0 ~ n개 까지 가능)
  • 반환할 값이 없을 시 반환 타입을 void로 작성

(2) 구현부

  • { - 구현부
        // 메서드 호출 시 수행될 코드, 즉 작업을 수행하는 코드를 작성
    }
    • 작업 결과는 반환 타입이 void일때는 0개 특정 타입인 경우 1개를 반환할 수 있지만 작업 결과가 여러개일 경우 반환 타입을 배열이나 객체로 설정하여 여러개를 반환할 수 있음
int add (int a, int b)	// 선언부
	{	// 구현부 시작
	int result = a + b;
	return result;
	}	// 구현부 끝

 

(3) 메서드의 장점

  • 코드의 중복을 줄일 수 있음 -> 프로그래밍에서는 필수
  • 코드의 관리가 쉬움
  • 코드를 재사용 할 수 있음
  • 코드가 간결해서 이해하기 쉬움

(4) 메서드 작성

  • 반복적으로 수행되는 여러 문장을 메서드로 작성
  • 반복되지 않더라도 여러 문장으로 구성된 하나의 작업을 메서드로 작성
  • 하나의 메서드는 한 가지의 기능만 수행 하도록 작성하는 것을 권장함 - 코드의 유지보수성이 더욱 높아지고 메서드의 재사용성도 훨씬 높아짐
  • 배열 초기화, 배열 출력의 2가지의 기능을 한가지의 메서드로 묶는 것보다 배열 초기화 메서드, 배열출력 메서드 2가지의 메서드를 작성 

(5) 지역변수(lv)

  • 메서드 영역 내에 선언된 변수(매개변수도 지역변수)
  • 각 메서드가 종료 될때까지만 유효함.
  • 각 메서드 영역이 겹치지 않으면 매개변수의 이름이 같아도 상관 없음

각 메서드의 영역이 다를 결우 매개변수 이름이 같아도 되는 예시


2) 메서드의 호출

  • 메서드이름(값1, 값2, ... );
  • 메서드 정의 시 작업에 필요한 값이 없으면 argument 없이 메서드 호출이 가능하며 메서드 작성 시 parameter를 작성했다면 메서드 호출시 꼭 작성한 parameter의 개수만큼 argument를 입력하여 메서드를 호출해야 함

(1) 반환타입이 없는 경우

  • print99danAll();
    • void print99danAll()을 호출
    • 반환 타입이 void이므로 메서드 실행 결과를 반환할 수 없음
    • 메서드가 동작하고 그 결과를 반환할 필요가 없을 때 사용

(2) 반환타입이 있는 경우

  • int result = add(3, 5);
    • 작업결과를 저장할 변수가 필요하며 변수에 결과를 담지 않았다고 에러가 나진 않지만 메서드의 결과를 사용할 수가 없음
    • int add(int x, int y)를 호출하고, 결과를 result에 저장
    • 인수(argument; 원본)로 3과 5를 입력하여 메서드를 호출
    • 메서드 수행 후 결과값을 result에 저장, 메서드의 반환타입이 int이므로 반환결과를 담은 result 변수도 int타입이여야 함
int add(int x, int y) // 인수를 매개변수(parameter,복사본)에 대입
{

int result = x + y;  // 대입한 수를 계산하여 result에 저장
return result;       // result의 결과를 add에 반환

}

 

(3) 예제

  • 사칙연산을 하는 메서드가 담긴 MyMath클래스를 작성
  • main 메서드에서 MyMath객체를 생성하고 인스턴스 메서드를 사용
  • 모든 메서드 정의 시 파라미터를 작성하였으므로 메서드를 호출할 경우 꼭 인자를 입력해야함
  • 각 메서드를 호출하여 얻은 연산 결과를 각 메서드의 반환타입과 동일한 변수를 선언하여 결과를 담음
class ex6_4 {
	public static void main(String args[]) {
		// 2. 객체 생성
		MyMath mm = new MyMath();
		
		// 3. MyMath객체 사용
		long result1 = mm.add(5L, 3L);	// add 매서드 호출
		long result2 = mm.subtract(5L, 3L);	// subtract 매서드 호출
		long result3 = mm.multiply(5L, 3L);	// multiply 매서드 호출
		double result4 = mm.divide(5L, 3L);	// divide 매서드 호출
		long Max = mm.Max(5 , 3);	// Max 메서드 호출
		long Min = mm.Min(5 , 3);	// Min 메서드 호출
		
		System.out.println("add(5, 3) = "+result1);
		System.out.println("subtract(5, 3) = "+result2);
		System.out.println("multiply(5, 3) = "+result3);
		System.out.println("divide(5, 3) = "+result4);
		System.out.println("Max(5, 3) = "+Max);
		System.out.println("Min(5, 3) = "+Min);
	}
}		
// 1. 사칙연산 클래스 MyMath클래스 작성(매서드 작성)
class MyMath {
	long add(long a, long b) {	// add 메서드
		long result = a + b;
		return result;
//		return a + b;	// 위의 두 줄을 한 줄로 간단히
	}
	long subtract(long a, long b) {return a - b;}	// subtract 메서드
	long multiply(long a, long b) {return a * b;}	// multiply 메서드
	double divide(double a, double b) {	// divide 메서드
		return a / b;
	}
	// 추가 - 두 값을 받아서 둘 중에 큰 값을 반환하는 메서드를 작성
	long Max(long a, long b) { 
//		long result = 0;
//		if(a>b) {
//			result = a;
//		} else {
//			result = b;
//		} 
//		return result;
	return a > b ? a : b ;	// 3항 연산자로 간단히 변경
	}
	// 추가 - 둘 값중 작은 값을 반환하는 메서드 작성
	long Min(long a, long b) {
		return a < b ? a : b;
	}
}

출력값

add(5, 3) = 8
subtract(5, 3) = 2
multiply(5, 3) = 15
divide(5, 3) = 1.6666666666666667
Max(5, 3) = 5
Min(5, 3) = 3

 

(4) 메서드의 실행 흐름

  1. 객체(인스턴스 생성)
  2. 메서드 호출
  3. 메서드를 수행하기 위해 인수를 매개변수에 대입
  4. 대입한 값으로 계산 후 result에 저장
  5. 결과값 반환
  6. 메서드를 수행 한 결과 값을 변수에 저장
MyMath mm = new MyMath[];	// 1. 인스턴스 생성

long value = mm.add(1L, 2L);	//2. 메서드를 호출, // 6. result의 값을 value에 저장

long add(long a, long b) {	// 3. 매개변수에 대입
	long result = a + b;	// 4. 대입한 값으로 계산 후 result에 저장
	return result;	// 5. 결과값을 반환
	}

 

** 출처 : 남궁성의 정석코딩_자바의정석