1. 메소드
메소드
- 메소드: 특정 기능을 수행하기 위한 코드 묶음
- 메소드명();
- 메소드 호출
- 메소드는 한 번 정의해 두면 필요한 만큼 얼마든지 사용할 수 있음
// 메소드 형태
접근제어나 반환형 메소드명(전달값) {
명령문1
명령문2
...
}
// 예제1 (안녕? 문자열을 출력하는 print 메소드)
public static void print() {
System.out.println("안녕?");
}
public static void main(String[] args) {
print(); // 메소드를 사용하기 위해선 메소드명(print)을 호출해야 함
print();
print();
}
전달값
- 전달값: Parameter, 메소드 호출 시 전달하는 값
- 메소드 호출 시
- 메소드명(): 괄호를 비워두면 전달값이 없는 것
- 메소드명(전달값): 값을 정의해 두면 메소드 호출 시 전달하려는 값을 보내줄 수 있는 것
- 전달값의 개수
- 전달값이 한 개 있는 메소드
- print(int a): 정수 a를 전달값으로 하는 메소드 print
- print(3); print(10);처럼 메소드에 전달값 정수 3, 10을 입력함
- 전달값이 여러 개 있는 메소드
- add(int a, int b): 정수 a, b를 전달값으로 하는 메소드 add
- add(1, 2); add(3, 5);처럼 메소드에 전달값 정수 1, 2와 3, 5를 각각 입력함
- 전달값이 한 개 있는 메소드
// 예제1 (전달값이 없는 메소드)
public static void print() { // 전달값이 없음
System.out.println("안녕?");
}
public static void main(String[] args) {
print(); // 메소드를 사용하기 위해선 메소드명(print)을 호출해야 함
print();
print();
}
// 예제2 (전달값이 한 개 있는 메소드)
public static void print(int a) { // 전달값이 정수 a인 메소드
System.out.println(a);
}
public static void main(String[] args) {
print(3); // 메소드에 전달값 입력: 3
print(10); // 메소드에 전달값 입력: 10
}
// 예제3 (전달값이 여러 개 있는 메소드)
public static void add(int a, int b) { // 전달값이 정수 a, b인 메소드
System.out.println(a + b);
}
public static void main(String[] args) {
add(1, 2); // 3
add(3, 5); // 8
}
반환값
- 반환값: Return, 메소드 실행 결과를 반환해 주는 값
- 반환값 유무
- 無: void, 반환값 없음
- 有: 메소드는 반드시 return 반환값;이 나와야 함
- 접근제어자 반환형 메소드명() {
명령문1
명령문2
...
return 반환값;
}
// 반환값 형태
접근제어자 반환형 메소드명() {
명령문1
명령문2
...
return 반환값;
}
// 예제1
public static int getMaxLottoNumber() { // 반환형 int
return 45; // 반환값 return 45;
}
public static void main(String[] args) {
int num = getMaxLottoNumber(); // 위에서 적은 반환형 int와 동일하게 int num
System.out.println(num); // num에는 메소드의 반환값이 들어가 있기에 45가 출력됨
}
전달값과 반환값
- 전달값과 반환값: 전달값과 반환값이 모두 있는 경우
- 접근제어나 반환형 메소드명(전달값) {
명령문1
명령문2
...
return 반환값;
}
// 전달값과 반환값이 모두 있는 형태
접근제어나 반환형 메소드명(전달값) {
명령문1
명령문2
...
return 반환값;
}
// 예제1
public static int add(int a, int b) { // 반환형: int, 전달값: int a, int b
return a + b; // 반환값: a + b
}
public static void main(String[] args) {
int result = add(1, 2); // 위의 반환형 int와 동일한 int result
System.out.println("1 + 2 =" + result);
}
메소드 오버로딩
- 메소드 오버로딩: 같은 메소드 이름을 가지면서 매개변수 또는 매개변수의 자료형을 다르게 정의하여 여러 버전의 메소드를 만드는 것 (= 같은 메소드명, 다른 매개변수)
- 접근제어자 반환형 메소드명(정수 전달값) {}
- 접근제어자 반환형 메소드명(정수 전달값1, 정수 전달값2) {}
- 접근제어자 반환형 메소드명(실수 전달값) {}
// 메소드 오버로딩
public static int add(int a, int b) {
return a + b;
}
public static int add(int a, int b, int c) {
return a + b + c;
}
public static int add(double a, double b) {
return a + b;
}
// add 메소드 호출하기 (매개변수: 정수 두 개, 세 개, 실수 두 개)
public static void main(String[] args) {
System.out.println(add(1 ,2));
System.out.println(add(1, 2, 3));
System.out.println(add(5.3, 3.8));
}
변수의 범위
- 변수의 범위: 변수가 유효한 영역(사용할 수 있는 영역)
- a 변수의 범위
public static void scope() {
System.out.println(a); // 사용 불가
}
public static void main(String[] args) {
int a = 10; // int a는 변수가 선언되어 있는 {} 중괄호 내에서만 사용할 수 있음
System.out.println(a);
} - b 변수의 범위
public static void scope() {
int b = 20; // scope 메소드 내에서 변수 b를 선언함, int b는 변수가 선언되어 있는 {} 중괄호 내에서만 사용할 수 있음
System.out.println(b);
}
public static void main(String[] args) {
System.out.println(b); // 사용 불가
} - d 변수의 범위
public static void main(String[] args) {
int c = 30;
if (c > 10) {
int d = 40; // int d 변수는 if문 내에서만 사용할 수 있음
System.out.println(d);
}
System.out.println(d); // 사용 불가
}
// a 변수의 범위
public static void scope() {
System.out.println(a); // 메인 메소드 외 영역에서는 a 변수를 사용할 수 없음
}
public static void main(String[] args) {
int a = 10; // int a는 변수가 선언되어 있는 {} 중괄호 내에서만 사용할 수 있음
System.out.println(a);
}
// b 변수의 범위
public static void scope() {
int b = 20; // scope 메소드 내에서 변수 b를 선언함
System.out.println(b);
}
public static void main(String[] args) {
System.out.println(b); // 사용 불가
}
// d 변수의 범위
public static void main(String[] args) {
int c = 30;
if (c > 10) {
int d = 40; // int d 변수는 if문 내에서만 사용할 수 있음
System.out.println(d);
}
System.out.println(d); // 사용 불가
}
참고 영상: 나도코딩 - 자바 무료 강의 2시간 완성(1분 자바)
https://youtu.be/DNCBaeCoMug?si=VM02QD9igeT561pp
반응형