728x90
메소드
package chap_06;
public class _01_Method {
// 메소드 정의
public static void sayHello() {
System.out.println("안녕하세요? 메소드입니다.");// sayHello(메소드 이름)
}
public static void main(String[] args) {
// 메소드: 기능을 하는 코드들의 묶음(동작)
// 메소드 호출: 메소드를 사용하는 것.
// 다른곳에서 만든 메소드를 실행시키는 것.
System.out.println("메소드 호출 전");
sayHello(); // 메소드 호출(원하는만큼 호출 가능)
sayHello();
sayHello();
System.out.println("메소드 호출 후");
}
}
전달값 (Parameter)
package chap_06;
public class _02_Parameter {
// 전달값이 있는 메소드
public static void power(int number) {
// 순서3) 2라는 값이 number에 저장, number는 parameter 또는 매개변수라고 한다
int result = number * number; //int result 에다가 결과값 저장하기
System.out.println(number + "의 2 승은 " + result);
}
//void 위치에는 반환형태가 들어감
public static void main(String[] args) {
// 전달값,parameter
// 2 -> 2 * 2 = 4
// 3 -> 3 * 3 = 9
// 순서1) 메소드 호출
// 순서2) 이 때 2라는 값을 인수라고 함 (argument)
power(2); // 2의 2승 호출
power(3); // 3의 2승 호출
}
}
package chap_06;
public class _02_Parameter {
// 전달값이 있는 메소드
// 전달값 2개를 받는 메소드
public static void powerByExp(int number, int exponent) {
int result = 1; // 초기값을 먼저 설정(계산 결과를 저장하기 위해서는 먼저 그 결과를 담을 수 있는 공간이 필요)
for (int i = 0; i < exponent; i++) {
result = result * number; // result *= number;
} // i가 0이면 result = 1 이니까 1 * 2 돼서 result = 2가 된다.
System.out.println(number + "의" + exponent + "승은" + result);
}
// number가 2고 , exponent가 3이다 라고 치면
// i 는 0,1,2 일 때 총 3번동안 result=1 이라는 값에다가 number을 곱해줌
// number가 2라고 치면 1*2 = 2 / 2*2 = 4 / 4*2 = 8
public static void main(String[] args) {
powerByExp(2, 3); // 2 * 2 *2 = 8
powerByExp(3, 3); // 3 * 3 * 3 = 27
powerByExp(10, 0); // 10의 0승 = 1
}
}
반환값 (Return)
package chap_06;
public class _03_Return {
// 호텔 전화번호
public static String getPhoneNumber() {
String phoneNumber = "02-1234-5678";
return phoneNumber;
};
// void: 반환값이 없는 메소드라서 아무런 값을 반환하지 않음.
// 호텔 전화번호라는 문자열을 반환하도록 하기위해 String을 사용해준다.
// 메소드이름: getPhoneNumber
// 반환하려면 return 써주고 return 하려는 값을 옆에 적어준다.
// 호텔 주소
public static String getAddress() {
return "서울시 어딘가";
}
//바로 값 자체를 반환할 수 있음
public static void main(String[] args) {
// String phoneNumber = getPhoneNumber();
// 여기의 phoneNumber와 위의 phoneNumber은 완전 다름
// 헷갈리니 다른 이름으로 설정해놓고 출력하기.
String contactNumber = getPhoneNumber(); //문자열 변수로 받아서 사용
System.out.println(contactNumber); //02-1234-5678
System.out.println(getAddress());//서울시 어딘가
// 이렇게 사용할 수도 있음.
}
}
반환형태는 다양하게 사용 가능
1. 왜 앞에 get을 쓰는 건지
2. return을 쓰는 이유. 왜 꼭 써야하는지
3. 왜 문자열 변수로 받아서 사용하는지
-> String contactNumber = getPhoneNumber(); //문자열 변수로 받아서 사용 이 부분
전달값과 반환값
package chap_06;
public class _04_ParameterAndReturn {
/*
* public static void power(int number) { int result = number * number;
* System.out.println(number + "의 2승은" + result); } void 위치에는 반환형태가 들어감
*
* public static void powerByExp(int number, int exponent) { int result = 1; for
* (int i = 0; i < exponent; i++) { result = result * number; }
* System.out.println(number + "의" + exponent + "승은" + result); }
*/
// 전달값과 반환값 같이 사용하기
public static int getPower(int number) {
int result = number * number; // 2) 2를 전달받아서 2*2인 4를
return result; //3) 반환해준다.
// return number * number; 이렇게 2줄을 1줄로 생략 가능
} // number * number 값이 저장된 result를 return문을 통해 반환
public static void main(String[] args) {
int retVal = getPower(2); // number가 2니까 2 * 2 = 4
// 반환값을 받기위한 (저장하기 위한) 변수가 정의돼야 함
// 1) 이 메소드를 호출하면서 2라는 값을 전달하고
// 4) 그 반환된값을 retVal 에다가 전달받아서
System.out.println(retVal); //4
// 5) 출력해준다
}
}
1. int retVal = getPower(2);
여기에서 왜 반환값을 받기위한 (저장하기 위한) "변수가 정의"돼야 하는지
package chap_06;
public class _04_ParameterAndReturn {
// 전달값과 반환값 같이 사용하기
public static int getPowerByExp(int number, int exponent) {
int result = 1;
for (int i = 0; i < exponent; i++) {
result *= number; // result = result * number;
}
return result;
}
public static void main(String[] args) {
int retVal = getPowerByExp(3,3); // 3의 3승
System.out.println(retVal);
System.out.println(getPowerByExp(3,3));
//이렇게도 표현 가능
}
}
// number - 숫자
// exponent - 숫자를 몇 번 곱해줄 지
메소드 오버로딩
package chap_06;
public class _05_Overloading {
public static int getPower(int number) { // int라서 전달값을 정수로 받았음
int result = number * number;
return result; // return number * number;
}
// 전달값을 문자열로 받기
// 문자열을 정수로 바꿔주는 역할 하기 - int number 라는 정수형 변수 만들기 -> strNumber을 정수로 바꿔주기(형변환)
public static int getPowerStr(String strNumber) {
int number = Integer.parseInt(strNumber);
return number * number;
}
public static int getPowerByExp(int number, int exponent) {
int result = 1;
for (int i = 0; i < exponent; i++) {
result = result * number;
}
return result;
}
public static void main(String[] args) {
// 메소드 오버로딩: 이름이 같은 메소드 여러개를 만드는 것
System.out.println(getPower(3)); // 3 * 3 = 9
System.out.println(getPowerStr("4")); // 4 * 4 = 16 // 큰따옴표 붙이는거 잊지말기
// 그런데 String 같은 문자열 말고도 boolean이나 double 같은게 올 수 있다
// 그때마다 서로 다른 메소드 이름으로 만들게 되면
// 메소드 호출(사용) 하는 입장에서는 어떤 메소드를 사용해야할지 난감함
// 그럴떄 사용하는 것 : 메소드 오버로딩 - 이름을 똑같이 주면 되는 것
// str 붙인 부분을 없애보자
}
}
package chap_06;
public class _05_Overloading {
public static int getPower(int number) { // int라서 전달값을 정수로 받았음
int result = number * number;
return result; // return number * number;
}
public static int getPower(String strNumber) {
int number = Integer.parseInt(strNumber);
return number * number;
}
public static void main(String[] args) {
// 메소드 오버로딩: 이름이 같은 메소드 여러개를 만드는 것
System.out.println(getPower(3)); // 3 * 3 = 9
System.out.println(getPower("4")); // 4 * 4 = 16
// str을 지운다해도 똑같이 9와 16이 잘 출력된다!
// 똑같이 getPower라는 메소드를 호출하는데, 전달값은 서로 다르게 줬었다 (int 정수 /string 문자열)
// 전달되는 자료형에 따라서 메소드 이름은 똑같지만, 전달값의 자료형이 다르므로
// 전달값이 다른 메소드를 각각 호출하게 되는 것
// 메소드 오버로딩: 전달값의 타입이 다르거나, 자료형이 다르거나 또는
// 전달값의 갯수가 다르면, 똑같은 이름의 메소드를 얼마던지 중복해서 선언할 수 있다.
}
}
package chap_06;
public class _05_Overloading {
public static int getPower(int number) { // int라서 전달값을 정수로 받았음
int result = number * number;
return result; // return number * number;
}
public static int getPower(String strNumber) {
int number = Integer.parseInt(strNumber);
return number * number;
}
// getPowerByExp 얘 또한 getPower로 이름을 중복해서 써보자 - 똑같이 잘나온다
public static int getPower(int number, int exponent) {
int result = 1;
for (int i = 0; i < exponent; i++) {
result = result * number;
}
return result;
}
public static void main(String[] args) {
// 메소드 오버로딩: 이름이 같은 메소드 여러개를 만드는 것
System.out.println(getPower(3)); // 3 * 3 = 9
System.out.println(getPower("4")); // 4 * 4 = 16
//System.out.println(getPowerByExp(3, 3)); // 3 * 3 * 3 = 27
System.out.println(getPower(3, 3)); // 3 * 3 * 3 = 27
}
}
// 메소드 오버로딩: 같은 이름의 메소드를 여러번 선언
// 1. 전달값의 타입이 다르거나
// 2. 전달값의 갯수가 다르거나
package chap_06;
public class _05_Overloading {
public static int getPower(int number) {
int result = number * number;
return result;
}
public static double getPower(int number) {
return 0.0;
}
// 반환형은 중복 정의 불가
메소드가 필요한 이유
package chap_06;
public class _06_WhenToUse {
public static void main(String[] args) {
// 메소드가 필요한 이유 : 코드의 중복을 줄일 수 있다.
// 2의 2승을 구하기
int result = 1;
for (int i = 0; i < 2; i++) {
result *= 2;
// 0 - 1 * 2 = 2
// 1 - 2 * 2 = 4
// 2의 2승 구하기 끝
}
System.out.println(result); // 2 * 2 = 4
// 3의 3승을 구하기
result = 1;
for (int i = 0; i < 3; i++) {
result *= 3; // 27
}
System.out.println(result);
// 4의 2승을 구하기
result = 1;
for (int i = 0; i < 2; i++) {
result *= 4; // 16
// 0 - 1 * 4 = 4
// 1 - 4 * 4 = 16
// 4의 2승 구하기 끝
}
System.out.println(result);
}
}
package chap_06;
public class _06_WhenToUse {
// 메소드가 필요한 이유 : 코드의 중복을 줄일 수 있다.
public static int getPower(int number, int exponent) {
int result = 1;
for (int i = 0; i < exponent; i++) {
result *= number;
}
return result;
}
public static void main(String[] args) {
System.out.println(getPower(2, 2)); // 2의 2승 호출 // 4
}
}
1. 리턴 반환할 때 위치를 어디에 둬야하는지 헷갈림.
// 내가 헷갈렸던 리턴문 위치
package chap_06;
public class _06_WhenToUse {
public static void main(String[] args) {
// 메소드가 필요한 이유 : 코드의 중복을 줄일 수 있다.
public static int getPower(int number, int exponent) {
int result = 1;
for (int i = 0; i < exponent; i++) {
result *= number;
return result;
}
}
}
변수의 범위 (scope)
package chap_06;
public class _07_VariableScope {
public static void methodA() {
System.out.println(number);
System.out.println(result);
}
public static void methodB() {
int result = 1; // 지역변수
}
// result 출력 안됨
// 해당 메소드 영역 내에서만 출력 가능
// 지역변수: 변수가 선언된 영역내에서만 사용할 수 있는 변수.
public static void main(String[] args) {
int number = 3;
// 메인 메소드에 있는 number를 methodA 에 출력하기 => 불가능
System.out.println(result); // result 출력 안됨
}
}
package chap_06;
public class _07_VariableScope {
// 지역변수: 변수가 선언된 영역내에서만 사용할 수 있는 변수.
public static void main(String[] args) {
int number = 3;
// 선언된 변수는 그 변수를 둘러싸고 있는 중괄호 속에선 얼마든지 가능. 벗어나면 쓸 수 없음.
for (int i = 0; i < 5; i++) {
System.out.println("i");
int j = 0;
System.out.println(j);
System.out.println(number); // 메소드영역 내부라 출력 가능
}
System.out.println(number); // 메소드영역 내부라 출력 가능
}
}
Main 메소드
728x90
'> 프로그래밍 언어 > JAVA' 카테고리의 다른 글
[나도코딩] 자바기본편 - 섹션 8 (2) (0) | 2023.04.15 |
---|---|
[나도코딩] 자바기본편 - 섹션 8 (1) (4) | 2023.04.12 |
[나도코딩] 자바기본편 - 섹션 1, 2 (0) | 2023.04.06 |
[그림으로 배우는 자바, part2]: 03 레퍼런스와 스태틱 (0) | 2023.02.27 |
[그림으로 배우는 자바, part2]: 02 생성자 (0) | 2023.02.27 |