✔ 메소드
main 메소드
- 자바 프로그램은 main이라는 이름의 메소드에서부터 시작을 한다는 약속을 가짐
public static void main(String[] args) {
}
다른 이름의 메소드
- main 메소드가 아닌, 추가로 정의하게 될 메소드의 이름은 직접 결정하면 됨
- 메소드의 오른편에 위치한 소괄호에는 변수 선언이 위치하게 됨
- 정의된 메소드는 메소드의 실행을 명령하는 문장인 메소드 호출문을 통해 실행됨
- 메소드 호출 시 변수가 전달되며, 전달되는 값을 받기 위해 선언된 변수를 가리켜 매개변수라고 함
- 매개변수는 메소드 호출 시 선언되어, 전달되는 값을 저장함
- 매개변수는 선언된 메소드 내에서만 유효한 변수
- 메소드 정의에 매개변수 선언은 둘 이상도 될 수 있음
- 메소드를 호출할 때는 매개변수의 수와 자료형이 일치하는 값을 전달해야 함
- 값의 전달이 불필요한 경우에는 메소드의 매개변수 선언을 생략할 수 있음
class MethodDef {
public static void main(String[] args) {
...
hiEveryone(12);
}
public static void hiEveryone(int age) {
...
System.out.println("제 나이는 " + age + "세 입니다.");
}
}
값을 반환하는 메소드
- 메소드 호출 시 값을 전달할 수 있는 것처럼, 메소드 내에서 메소드를 호출한 영역으로 값을 전달하는 값의 반환이 가능함
- 메소드의 이름 왼편에는 메소드가 반환하는 값의 자료형 정보가 삽입되게 됨
- void 키워드의 경우는 값을 반환하지 않는다는 의미를 가짐
- 메소드 내에 존재하는 return 키워드는 값의 반환을 명령하는 키워드로 오른 편에 등장하는 값을 반환함
- return 키워드는 메소드를 호출한 영역으로 값을 반환하는 것 뿐만 아니라 메소드의 종료도 의미함
class MethodReturns {
public static void main(String[] args) {
....
result = adder(4, 5);
....
}
public static int adder(int num1, int num2) {
int addResult = num1 + num2;
return addResult; // 값 반환 및 종료
}
Class onlyeExitReturn {
public static void main(Strings[] arg) {
divide(4, 2);
}
public static void divide(int num1, int num2) {
if(num2 == 0) {
System.out.println("0으로 나눌 수 없습니다.");
return; // 값의 반환 없이 종료
}
System.out.println("나눗셈 결과: " + (num1/num2));
}
}
✔ 변수의 스코프
변수의 스코프란?
- 임의의 변수에 대한 변수의 접근 가능 영역 또는 변수가 소멸되지 않고 존재할 수 있는 영역을 의미
지역변수
- 중괄호로 특정 영역을 감싸면, 해당 영역은 변수에 관한 별도의 스코프를 형성하게 되며 중괄호 내에서만 접근이 가능
- 하지만 중괄호를 벗어나는 순간 소멸되어 접근이 불가능한 변수가 됨
- 이렇게 중괄호 내에 선언된 변수들을 가리켜 지역변수라고 하며 선언된 지역을 벗어나면 메모리 공간에서 소멸되게 됨
- 중괄호 내에 선언된 변수, for문의 초기화 부분에 선언되는 변수, 매개변수까지도 모두 지역변수의 범주에 포함
class LocalVariable {
public static void main(String[] args) {
...
{
int num1 = 33; // 지역변수
num1++;
System.out.println(num1);
}
}
}
✔ 메소드의 재귀 호출
메소드의 재귀적 호출
- 자바는 메소드의 재귀적 호출을 지원
- 메소드가 호출되면 해당 메소드의 바이트 코드가 부분적으로 복사가 되어 실행되게 됨
- 그러므로 아직 실행이 완료되지 않은 메소드를 다시 호출하여 재귀적으로 메소드 호출이 가능해짐
- 재귀 메소드를 정의할 때는 스스로 종료가 되도록 재귀의 고리가 끊어지도록 해야 함
class ReculFactorial {
public static void main(String[] args) {
System.out.prinln("3 factorial: " + factorial(3));
}
public static int factorial(int n) {
if (n == 1)
return 1;
else
return n * factorial(n - 1);
}
}