오늘은 가장 기본이 되는
메서드에 대해서 알아보겠습니다.
목차
1)메서드
1-1)메서드사용예시
1-2)메서드선언
1-3)메서드호출 , 용어정리
1-4)반환타입,매개변수 없는 사용 예
1-5) 반환타입
1-6)메서드호출과 값 전달
1-7) 메서드 오버로딩
1-8) 예제1
1-9) 예제 (심화)
1) 메서드란?
자바에서는 함수를 메서드(Method)라고 한다.
더하기 등의 같은 코드가 반복되는 구간을 함수로 정의해 두고
간편하게 써보자.
1-1) 메서드 사용 예시
(변경 전)
(변경 후)
너무 수학적으로 생각하진 말고
단순히 무언가를 불러서 사용한다고 생각하자.
1-2) 메서드 선언
private static int add(int a, intb)
제어자 반환타입 메서드이름(매개변수 목록)
{메서드 본문}
이에 대해 설명해 볼게요
1)private :
접근제어자로써
다른클래스에서 사용불가능하단 의미
2)static :
객체를 생성하지않고
사용하는 정적메서드라는 의미
3)int add(inta, intb)
int :
반환타입 지정
void(반환값x) , String , double 등 존재
add :
메서드이름
(int a , int b):
메서드 호출 시 전달받는 인자
return :
실행결과 반환
(void타입이 아니라면 필수)
1-3)메서드 호출과 용어정리
메서드를 호출할 때는 다음과 같이 메서드에 넘기는 값과
매개변수(파라미터)의 타입이 맞아야 한다.
물론 넘기는 값과
매개변수(파라미터)의 순서와 갯수도 맞아야 한다.
```
호출: call("donggon", 25)
메서드 정의: int call(String name, int age)
@ 인수와 매개변수의 타입이 맞아야함 @
인수 ( 인자) |
매개변수(파라미터) |
"donggon" , 25 |
String name, int age |
메서드호출 시 인수를 넘기면
파라미터에 대입.
1-4) 반환타입,매개변수 없는 경우의 예
위에서 void타입은 return값을 반환하지 않는다했고,
매개변수는 굳이 선언하지않고
선언부분을 비워두고 정의.
출력결과)
1-5) 반환 타입
반환타입이 있다면
반드시 값을 반환해야 함..!!
다음과같은경우는 두개의 반환값이 있어야하는것이다
true or false;
return 을 만나면 즉시 메서드를 종료하게 됨
1-6) 메서드호출과 값 전달 **
자바는 변수의값을 복사해서 대입한다는 것을 기억하자!!
int num1 = 5;
System.out.println("1. changeNumber 호출 전, num1: " + num1);
changeNumber(num1);
System.out.println("4. changeNumber 호출 후, num1: " + num1);
}
public static void changeNumber(int num2) {
System.out.println("2. changeNumber 변경 전, num2: " + num2);
num2 = num2 * 2;
System.out.println("3. changeNumber 변경 후, num2: " + num2);
}
위에 빨간글씨를 꼭 생각해서!!!
출력이 어떻게 나올지 생각해보세요!!!!!!
@@정답@@
1. changeNumber 호출 전, num1: 5
2. changeNumber 변경 전, num2: 5
3. changeNumber 변경 후, num2: 10
4. changeNumber 호출 후, num1: 5 왜 num1이 바뀌지않았을까요??
위 코드에서 num1 을 복사해서 num2매개변수에 전달했을 뿐이에요.
num1에는 전혀 영향이 없습니다.
num1에도 영향을 주고싶다면 반환값을 받아 num1에 대입해야합니다!!!
(이게 무슨말인지 잘 모르시겠죠?? 코드로 보여드릴게요)
num1에 영향을 주는 코드
int num1 = 5;
System.out.println("1. changeNumber 호출 전, num1: " + num1);
num1 = changeNumber(num1); //변경3
System.out.println("4. changeNumber 호출 후, num1: " + num1);
}
public static int //변경2 changeNumber(int num2) {
System.out.println("2. changeNumber 변경 전, num2: " + num2);
num2 = num2 * 2;
System.out.println("3. changeNumber 변경 후, num2: " + num2);
return num2; //변경1
}
1. changeNumber 호출 전, num1: 5
2. changeNumber 변경 전, num2: 5
3. changeNumber 변경 후, num2: 10
4. changeNumber 호출 후, num1: 10. // num1에도 영향이 있다.!
3가지의 변경포인트를 주석으로 달아놨어요.
1) int 반환타입을 가지는 메서드로 변경
2) 내부에서 return (num2*2); 을 해준 후
3) num1 에 반환된값을 (복사)대입을 해줍니다!!!
1-7)메서드 오버로딩
두수를 곱하는 메서드 , 3개의수를 곱하는 메서드
둘다 곱한다는 의미가 같으므로 sqrt로 만들고 싶다
이럴때 메서드명은 똑같지만
매개변수만 다르게 선언 가능.
(오버로딩)
오버로딩규칙:
반환타입은 신경x
매개변수의 갯수,순서,타입이
무조건 달라야 오버로딩 성립
코드로 보자...!!
public static void main(String[] args) {
int result1 = sqrt(1,4);
int result2 = sqrt(1,4,3);
System.out.println(result1);
System.out.println(result2);
}
private static int sqrt(int a , int b) { //(매개변수2개)
return a*b;
}
private static int sqrt(int a , int b,int c) { //메서드 오버라이딩 (매개변수가 3개)
return a*b*c;
}
이렇게 이름은같지만 매개변수가 다른 메서드를 생성할 수도 있어요!!
매개변수가 아예 똑같은 경우는 컴파일오류!!
int add(int a , int b)double add(int a , int b)
반환타입이 달라도매개변수(갯수 순서)가 같으면컴파일오류가 발생합니다!!!
이거는 오버로딩이 성립하지 않아요!!!
1-8) 예제1
간단하게 메시지(String), 숫자(int)
매개변수로 받고. 메시지를 숫자만큼
반복해서출력해주는 메서드 만들자
tip) void 타입으로 반환값없이 출력만!
public static void main(String[] args) {
String a = "안녕!";
String b = "반복문!!";
message_for(a, 5);
message_for(b,3);
}
private static void message_for(String message,int a) {
for (int i = 0; i < a; i++) {
System.out.println(message);
}
// 이런 형식으로 void타입으로 (반환값없이) 출력문을 내보낼수가있다!!!!}
출력결과 :
안녕!
안녕!
안녕!
안녕!
안녕!
반복문!!
반복문!!
반복문!!
1-9)예제 (심화)
입출금에 관한 메서드를 생성해Atm기기느낌으로 만들어보자
입출금 시 --> 입출금 금액과 잔액 출력
** 출금은 잔액 > 출금액 이여야만 할수있음 **
잔액확인 시 --> 현재잔액 표시
public static void main(String[] args) {
int balance = 0;
Scanner scan = new Scanner(System.in);
System.out.println("## ATM ##");
while(true) { //false 가될때까지 반복
System.out.println("1.입금 | 2.출금 | 3.잔액확인 | another key:종료 ");
System.out.print("입력한 키 : ");
int key = scan.nextInt();
if(key == 1 ) { //1번을 누를 시
System.out.print("입금 금액 : ");
int money = scan.nextInt();
balance = deposit(balance, money);
System.out.println("현재잔액 : "+balance);
}
else if(key == 2) { //2번을 누를 시
System.out.print("출금 금액 : ");
int money = scan.nextInt();
// 위에도money가 있지만 전역변수라 if문을 나가면 없애지는것임 (중복가능)
balance = withdraw(balance, money);
}
else if(key == 3) { //3번을 누를 시
System.out.println("현재잔액 : "+balance);
}
else {
//1 ,2 ,3 번이 아닌 다른키를 눌렀을 시
System.out.println("시스템종료 ");
break;
}
}
//////////. 메서드 부분 !!!!!!!!!!!!!!
}
private static int withdraw(int balance, int money) { //출금메서드
if(money <= balance) {
System.out.println(money+"를 출금 ㅣ");
balance -= money;
return balance;
}
else {
//가진돈보다 잔액이 적을경우 잔액부족 출력 후
잔액그대로 반환
System.out.println("잔액 부족 |");
System.out.println("잔액 : "+balance+" | 출금액 : "+money);
return balance;
}
}
private static int deposit(int balance , int money) {
System.out.print(money+"를 입금 | ");
balance += money;
return balance;
}
'Java공부(코딩)' 카테고리의 다른 글
코딩초보의 Java(자바)공부 6일차-2 { 기본형과 참조형 } (0) | 2024.12.12 |
---|---|
코딩 초보의 Java(자바)공부 6일차 -클래스와 데이터- (2) | 2024.12.11 |
코딩초보의Java (자바)4일차-2 (배열) (4) | 2024.12.10 |
코딩초보의 Java(자바) 공부 4일차( 훈련과 Scanner ) (2) | 2024.12.09 |
코딩초보의 Java(자바)공부 3일차-2 (스코프와 형변환) (1) | 2024.12.08 |