Java 메소드 사용
메소드 정의
함수는 값을 입력하면, 함수 내부에서 연산 처리하고 결과를 반환한다.
그리고 자바에서는 함수와 같은 역할을 해주는 것이 메소드(Method)이다.
x + y 를 계산하는 add 메소드를 정의해서 사용해보도록 한다.
Java 코드
public class Sum {
public static void main(String[] args) {
int sum1 = add(5, 3);
System.out.println("5 + 3 합계 출력 " + sum1);
int sum2 = add(9, 12);
System.out.println("9 + 12 합계 출력 " + sum2);
}
// add 메소드
public static int add(int x, int y) {
return x + y;
}
}
Java 출력
5 + 3 합계 출력 8
9 + 12 합계 출력 21
- add 라는 메소드를 정의하였고, 호출하여 x + y 를 계산하는 모습을 볼 수 있다.
코드 개선으로 println
인자 값으로 "5 + 3", "9 + 12" 직접 적는 것보다 메소드 정의로 전달되는 숫자대로 출력해보도록 한다.
Java 코드
public class Sum {
public static void main(String[] args) {
int sum1 = add(15, 13);
System.out.println("합계 출력 " + sum1);
int sum2 = add(33, 44);
System.out.println("합계 출력 " + sum2);
}
// add 메소드
public static int add(int x, int y) {
System.out.print(x + " + " + y + " ");
return x + y;
}
}
Java 출력
15 + 13 합계 출력 28
33 + 44 합계 출력 77
"15 + 13"
, "33 + 44"
직접 입력할 필요 없이 add 메소드에서 들어오는 값 출력한다.- 코드 재 사용이 가능하여 중복 코드를 제거할 때도 유용하다.
메소드는 메소드 선언과 메소드 본문을 나누고 있다.
메소드 선언(Method Declaration)
public static int add(int x, int y)
메소드 선언하는 방법은 코드에서 메소드 이름 add
과 반환 타입 int
, 파라미터 목록 (int x, int y)
을 포함한다.
💡
파라미터는 매개체를 연결하여 전달하는 의미를 갖고 있다.
add
라는 이름의 메소드를 사용하겠다고 선언한 것이다. 이러한 메소드는 다른 곳에서도 사용할 수 있다.
메소드 선언 정리
public static
public
접근제어자가 설정되면 다른 클래스에서 사용할 수 있다.static
객체를 생성하지 않고 호출할 수 있는 정적 메소드.
int add(int x, int y)
int
반환 타입을 정의. 메소드 실행 결과를 예측할 수 있도록 타입을 지정해주어야 한다.add
메소드에 이름을 지정한다. 이 이름으로 사용하면 해당 메소드를 호출 할수 있다.(int x, int y)
메소드 호출할 때 전달하는 입력 타입을 지정한다. 해당 메소드에서만 사용한다.
💡
어떤 용도로 사용하는 메소드인지 직관적 이름을 지정해주도록 한다.
메소드 본문(Method Body)
{
System.out.print(x + " + " + y + " ");
return x + y;
}
- 해당 메소드 호출시 실행되는 코드 블록이다.
- 본문 순서대로 코드를 실행한다.
- 본문은 블랙박스 코드로 호출하는 곳에서 메소드 선언은 알지만 메소드 본문을 알지 못한다.
return x + y;
메소드 선언에서 정한 int 형 반환 타입으로 반환해야 한다.
💡
반환이 필요 없는 경우 메소드 선언에서 void 타입을 지정하고 본문에 return 없이 사용할 수 있다.
메소드 호출
앞에서 정의한 메소드를 호출해서 실행하려면 메소드 이름에 값을 전달한다.
int sum1 = add(15, 13);
int sum2 = add(33, 44);
add
메소드에서15 + 13
를 더한 결과 값을sum1
으로 int형으로 할당한다.add
메소드 사용이 끝나면 내부로직에 사용한int x, int y
는 메모리로 반환한다.int sum2 = add(33,44);
코드에서add
다시 호출하면 새로운 메소드를 생성하고 반환하고 메모리도 반환한다.
메소드 용어 정리
call("hello", "world", 10); // 호출자
int call(String str1, String str2, int num) // 메소드 정의
- 메소드를 호출할 때 사용하는 입력 값은 메소드를 정의한 파라미터와 타입와 갯수가 맞아야한다.
용어 Argument
- 메소드 call 호출할 때 입력한 hello, world, 10처럼 넘기는 값을 Argument이다. 한국에서는 인수, 인자라 부른다. 메소드 내부로 들어가는 입력 값이다.
용어 Parameter
- 메소드 정의한 선언부에서 파라미터 String str1, String str2, int num 를 가리킨다. 호출에서 들어온 Argument를 중간에서 전달하는 변수라고 보면 된다.
변수와 메서드 이름 짓기
변수 이름은 명사로, 메소드는 동작을 나타내는 동사로 시작하는 암묵적인 규칙이 있다.
이름 예시
- 변수명: total, employee, count, isAvailable, customerName, adminName, City, Street
- 메소드명: printReport(), addCustomer(), getEmployee(), setEmployee(), calculatorSum()
메소드 사용시 장점
- 코드 재사용
- 메소드는 기능을 캡슐화하여 코드를 다시 작성할 필요없이 호출만 하면된다.
- 코드 가독성
- 이름을 부여해 메소드의 목적과 작업을 명확하게 나타낸다.
- 모듈성
- 큰 프로그램을 작은 단위로 관리할 수 있다. 이는 디버깅이 가능해지고 가독성 향상된다.
- 코드 유지 관리
- 업데이트 하거나 픽스가 필요한 경우 해당 메소드만 수정하여 코드 베이스에 영향을 받지 않고 변경사항을 적용할 수 있다.
- 재사용성
- 선언한 메소드는 다른 프로그램, 프로젝트에서도 사용할 수 있다.
- 확장성
- 선언한 메소드를 기능 추가 및 확장이 가능하다.
- 추상화
- 메소드를 호출하는 사용자는 메소드 내부 로직을 알 필요없이 사용가능하다.
- 디버깅과 테스트 용이성
- 각 메소드마다 독립적으로 테스트할 수 있고, 디버깅으로 문제를 신속하게 해결할 수 있게 해준다.