Java/제대로 파는 자바
[제대로 파는 자바 (Java)-by 얄코] 메소드
- -
해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.
- 타 언어의 함수 function 과 같은 개념
- 자바는 모든 것이 클래스의 요소이므로 메소드 method 라 부름
메소드의 의미 1. 반복을 최소화
한 번 이상 실행될 수 있는 일련의 작업들을 묶어두는 것
public class Ex01 {
public static void main(String[] args) {
double xx = 3, yy = 4;
addSubtMultDiv(xx, yy);
xx = 10; yy = 2;
addSubtMultDiv(xx, yy);
xx = 7; yy = 5;
addSubtMultDiv(xx, yy);
}
// ⭐️ 메인 메소드 외부에 선언할 것
static void addSubtMultDiv (double a, double b) {
System.out.printf("%f + %f = %f%n", a, b, a + b);
System.out.printf("%f - %f = %f%n", a, b, a - b);
System.out.printf("%f * %f = %f%n", a, b, a * b);
System.out.printf("%f / %f = %f%n", a, b, a / b);
}
}
메소드의 의미 2. 값을 받고 연산하여 결과값을 반환 - 함수
static : 정적 메소드 (클래스 메소드) 에서 호출하려면(main 등) 붙어야 함
(정적이 아닌 메소드 (인스턴스 메소드) 는 객체지향 섹션에서 배울 것)
매개변수 parameter : 각각 자료형과 변수명을 적음. 없을 시 빈 괄호
인자 argument : 호출할 때 넣는 값 (add(3, 4) 의 3과 4)
return : 반환하는 값이 있을 때, 맨 마지막에 붙임
public class Ex02 {
public static void main(String[] args) {
// ⭐️ 반환한다는 것: 바꿔 쓸 수 있다는 것
// 메서드 실행문을 메서드의 반환값으로 치환
int int1 = add(2, 3);
System.out.println(int1);
System.out.println(add(4, 5));
int int2 = add(add(6, 7), add(8, 9));
System.out.println(int2);
}
static int add (int num1, int num2) {
return num1 + num2;
}
}
public class Ex02 {
public static void main(String[] args) {
//방법1
if (
checkIfContain(
"Hello World",
"hello"
)
) {
System.out.println("포함됨");
} else {
System.out.println("포함 안 됨");
}
//방법2
System.out.println(
checkIfContain(
"Hello World",
"hello"
) ? "포함됨" : "포함 안 됨"
);
}
static boolean checkIfContain (String text, String token) {
return text.toLowerCase().contains(token.toLowerCase());
}
}
다양한 용례
public class Ex03 {
public static void main(String[] args) {
sayHello();
}
// 매개변수도, 반환값도 없는 메소드
static void sayHello () {
System.out.println("안녕하세요!");
}
}
public class Ex03 {
public static void main(String[] args) {
int count1 = getCount();
int count2 = getCount();
int count3 = getCount();
int count4 = getCount();
}
static int count = 0;
// 매개변수 없이 값만 반환하는 메소드
// 외부 변수 값을 변화시킴 (static이므로 static 변수만 가능)
static int getCount () {
System.out.println("카운트 증가");
return ++count;
}
}
- return 을 println 윗줄로 옮겨 볼 것
- return 은 블록을 종료하므로 이후의 코드 무효화 - 컴파일 에러 발생
- 반환값의 자료형을 바꿔 볼 것 *(short, long, 기타…)
- 반환값이나 인자의 자료형에 어긋날 경우 컴파일 에러 발생
- ⚠️ 외부의 변수 값을 바꾸는 것은 좋은 메서드가 아님
public class Ex04 {
public static void main(String[] args) {
double avg = getAverage(new int[] {3, 5, 4, 13, 7});
}
static double getAverage (int[] nums) {
double sum = 0;
for (int num : nums) {
sum += num;
}
return sum / nums.length;
}
}
public class Ex04 {
public static void main(String[] args) {
int[] numbers = {3, 5, 9, 2, 8, 1, 4};
// 변수에 담아 보다 효율적으로 바꿔볼 것
int maxOfNumbers = getMaxAndMin(numbers)[0];
int minOfNumbers = getMaxAndMin(numbers)[1];
}
// 자바의 메소드는 하나의 값만 반환 가능
// 여러 값을 반환하려면 배열 또는 이후 배울 객체를 활용
static int[] getMaxAndMin (int[] nums) {
int max = nums[0];
int min = nums[0];
for (int num : nums) {
max = max > num ? max : num;
min = min < num ? min : num;
}
return new int[] {max, min};
}
}
⭐ 디버그시 스텝인투와 스텝아웃 사용해보기
Step over / Step into / Step out
Step over 사용 시 → 메소드를 사용하는 코드가 있더라도 메소드 내부 진행 과정은 패스하고 결과만!
Step into 사용 시 → 코드 상 메소드를 사용하면 메소드 내부 진행 과정까지 다 보여주고
Step out 사용 시 → 과정을 보는 것을 중단하고 빠져나올 수 있음
매개변수의 개수가 정해지지 않은 메소드
▶ ... 연산자 : 해당 위치 뒤로 오는 연산자들을 배열로 묶음 (int[]와는 다름!)
※ 다른 인자들과 사용 시 맨 마지막에 놓을 것 (한번만 사용)
public class Ex05 {
public static void main(String[] args) {
double avg = getAverage(3, 91, 14, 27, 4);
// 💡 배열을 넣으면 자동으로 펼쳐져 인식됨
int[] numbers = {3, 91, 14, 27, 4};
double avgOfArr = getAverage(numbers);
}
// 💡 ... 연산자 : 해당 위치 뒤로 오는 연산자들을 배열로 묶음
// int[] (배열 자체를 받음)과는 다름!
static double getAverage(int... nums) {
double result = 0.0;
for (int num : nums) {
result += num;
}
return result / nums.length;
}
}
public class Ex05 {
public static void main(String[] args) {
String class3Desc = descClass(3, "목아진", "짱구", "철수", "훈이");
String[] kids = {"짱구", "철수", "훈이"};
String class3DescByArr = descClass(3, "목아진", kids);
}
// ⭐️ 다른(정해진) 인자들과 사용시 맨 마지막에 놓을 것(한번만!)
static String descClass (int classNo, String teacher, String... kids) {
return "%d반의 담임은 %s 선생님, 원생들은 %s 입니다."
.formatted(classNo, teacher, String.join(", ", kids));
}
}
'Java > 제대로 파는 자바' 카테고리의 다른 글
[제대로 파는 자바 (Java)-by 얄코] 키보드 입력 받기 (1) | 2024.02.25 |
---|---|
[제대로 파는 자바 (Java)-by 얄코] 메소드 더 알아보기 (1) | 2024.02.24 |
[제대로 파는 자바 (Java)-by 얄코] while & do while (0) | 2024.02.24 |
[제대로 파는 자바 (Java)-by 얄코] for & for-each (0) | 2024.02.23 |
[제대로 파는 자바 (Java)-by 얄코] switch (0) | 2024.02.23 |
Contents
소중한 공감 감사합니다