안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
메소드란?
클래스의 기능에 해당하는 요소
메소드의 정의
☞ 자바제어자 리턴타입 메소드명 (입력매개변수) { ~ }
- 리턴타입 : 메소드 종료 이후 변환(반환) 되는 값의 자료형
- 메소드명 : 변수명 선정 규칙과 동일, 관계적으로 소문자 시작
- 입력매개변수 : 메소드를 호출할 때 전달되는 값의 자료형과 전달받은 값을 저장할 지역 변수명 정의
- { ~ } : 메소드가 수행해야할 기능
자바제어자는 추후 다뤄보도록!!
메소드를 사용하는 이유?
① 중복 코드 재사용에 용이
② 코드의 모듈화를 통해 코드 가독성 향상
매개변수가 없고, 리턴 값도 없는 메소드
public class MethodStudy {
public static void main(String[] args) {
MethodStudy study = new MethodStudy();
//클래스 외부에서 메소드 호출 -> 객체 생성 필요!
study.test1();
study.test2();
}
public void test1() {
String name = "홍길동";
int age = 23;
System.out.println("이름 : " + name + ", 나이 : " + age);
}
public void test2() {
String name = "심사임당";
int age = 25;
System.out.println("이름 : " + name + ", 나이 : " + age);
}
}
@콘솔출력값
이름 : 홍길동, 나이 : 23
이름 : 심사임당, 나이 : 25
만약 각자 자기 소개를 출력해주는 메소드들을 만들어봤다고 가정하자.
그렇다면 위 처럼 각 메소드들에 이름, 나이, 출력문이 있을 것입니다. 근데.. 갑자기 자기소개를 영어로 바꿔야한다고 해보자!
그럼 출력문 내에 한글을 영어로 바꾸면 됐었습니다.
하지만.. 수정해야할 메소드들이 2개가 아니라 1000개라고 가정해보자...
그렇다면 1000개의 메소드들을 하나하나 다 수정해야할 것입니다......(퇴사각)
이런 상황이 벌어지지 않도록 이용하는 것이 메소드 입니다.
매개변수가 있는 메소드
//test1, test2는 매개변수, 리턴값이 없는 메소드
public void test1() {
String name = "홍길동";
int age = 23;
//클래스 내부에 있으므로 객체 생성 X
print(name, age);
}
public void test2() {
String name = "심사임당";
int age = 25;
//클래스 내부에 있으므로 객체 생성 X
print(name, age);
}
//매개변수(Strint name, int age)가 있는 메소드
public void print(String name, int age) {
System.out.println("이름 : " + name + ", 나이 : " + age);
}
이렇게 중복 되는 코드를 별도 메소드로 정의하고 매개변수로 각 이름, 나이를 받아 출력해주는 메소드를 만들어보았습니다.
이렇게 되면 문장이 영어로 변경되었다고 해도 print메소드 하나만 수정하면 되겠죠?
public void test1() {
String name = "홍길동";
int age = 23;
print(name, age);
}
public void test2() {
String name = "심사임당";
int age = 25;
print(name, age);
}
public void print(String name, int age) {
System.out.println("My name : " + name + ", My age : " + age);
}
@콘솔출력값
My name : 홍길동, My age : 23
My name : 심사임당, My age : 25
메소드 선언부 → 매개변수
메소드 호출부 → 매개인자(인수) 라고 부릅니다.
* 매개변수 (parameter)
public void print(String name, int age)
public void print(매개변수, 매개변수)
호출 시 전달된 값(매개인자)를 매개변수 공간에 대입합니다.
* 매개인자 (argument)
print(name, age)
print(매개인자, 매개인자)
※ 매개인자와 매개변수의 자료형, 개수가 다 올바르게 맞아야 정상 실행되며, 그렇지 않으면 오류 발생!
리턴 값이 있는 메소드
//test3는 매개변수, 리턴 값이 없는 메소드
public void test3() {
Scanner sc = new Scanner(System.in);
System.out.print("> 정수 입력 : ");
int a1 = sc.nextInt();
System.out.print("> 정수 입력 : ");
int a2 = sc.nextInt();
System.out.printf("%d와 %d의 합은 %d입니다.\n", a1, a2, a1+a2);
}
@콘솔출력값
> 정수 입력 : 10
> 정수 입력 : 20
10와 20의 합은 30입니다.
정수 2개를 입력 받아 합을 구하는 메소드를 만들어보았습니다만, 정수 100개 입력을 해야하는 상황이라면.. 정수를 입력 받는 메소드를 하나 만들어서 중복을 제거하는 것이 좋을 것 같습니다.
이 때! 리턴 값을 받아서 중복을 제거해줄 수 있습니다.
public void test3() {
int a1 = userPrint();
int a2 = userPrint();
System.out.printf("%d와 %d의 합은 %d입니다.\n", a1, a2, a1+a2);
}
//리턴 값(int)이 있는 메소드
public int userPrint() {
Scanner sc = new Scanner(System.in);
System.out.print("> 정수 입력 : ");
int a = sc.nextInt();
return a;
}
@콘솔출력값
> 정수 입력 : 10
> 정수 입력 : 20
10와 20의 합은 30입니다.
test3에서 메소드를 call (int a1 = userPrint()) 하였고, userPrint 메소드가 실행될 것입니다.
Scanner를 통하여 사용자의 입력 값을 a에 담아주었고, 그 값을 다시 return 해줍니다.
userPrint 메소드는 int를 리턴해주는 메소드이므로 반드시 int를 리턴해줘야 합니다. (return a;)
그렇다면 a1에는 리턴 받은 a (사용자 입력값) 이 저장될 것이고 그를 출력해주면 위와 동일한 결과를 출력해줍니다.
동일한 코드이지만 확실히 간결해지고, 가독성도 좋아졌죠?
그렇다면 만약, 정수를 입력할 때마다 "정수1 입력 : ", "정수2 입력 : " ...으로 몇 개의 정수를 입력하였는지 표시해주고 싶다면?
아래와 같이 해결해 줄 수 있을 것 입니다.
매개변수가 있고, 리턴 값이 있는 메소드
public void test3() {
int a1 = userPrint(1); //기본자료형이므로 실제 값이 매개변수로 전달
int a2 = userPrint(2);
System.out.printf("%d와 %d의 합은 %d입니다.\n", a1, a2, a1+a2);
}
//매개변수(int count)있는, 리턴 값(int)있는 메소드
public int userPrint(int count) {
Scanner sc = new Scanner(System.in);
System.out.printf("> 정수%d 입력 : ", count);
int a = sc.nextInt();
return a;
}
@콘솔출력값
> 정수1 입력 : 10
> 정수2 입력 : 20
10와 20의 합은 30입니다.
입력한 정수의 수만큼을 매개변수로 받아서 출력해줄 수 있습니다.
'Java > Java' 카테고리의 다른 글
제어문) switch문, switch문 fall-through (0) | 2022.03.04 |
---|---|
제어문) if문, if-else문, if- else if문, 중첩 if문 (0) | 2022.03.04 |
난수란?, Random 클래스, Math.random (0) | 2022.03.03 |
연산자(Operator)란?, 이항연산자, 삼항연산자, 대입연산자 (0) | 2022.03.02 |
Scanner 클래스란?, next()메소드, nextLine()메소드 (0) | 2022.03.01 |