🥊 이 글은 제대로 파는 자바 - Java 끝.장.내.기 (얄팍한 코딩사전) 강의 내용을 정리한 글입니다.
// ... 연산자: 해당 위치 뒤로 오는 연산자들을 배열로 묶음
// int[] (배열 자체를 받음)과는 다름!
static double getAverage(int... nums) {
double result = 0.0;
for (int num : nums) {
result += num;
}
return result / num.length;
}
public static void main(String[] args) {
double avg = getAverage(3, 91, 14, 27, 4); // avg: 27.8
// 배열을 넣으면 자동으로 펼쳐져 인식됨
int[] numbers = {3, 91, 14, 27, 4};
double avgOfArr = getAverage(numbers); // avgOfArr: 27.8
}
static int add(int a, int b) { return a + b; }
// 매개변수의 개수가 다름
static int add(int a, int b, int c) { return a + b + c; }
// 매개변수의 자료형이 다름
static double add(double a, double b) { return a + b; }
// 매개변수의 자료형 순서가 다름
static String add(String a, char b) { return a + b; }
static String add(char a, String b) { return a + b; }
// ⚠️ 반환 자료형이 다른 것은 오버로딩 안 됨 - 다른 함수명 사용
static double add(int a, int b) { return (double) (a + b); } // error!
// 원시값은 '복사해서' 가져옴 - 메소드 내부에서 값을 변경해도 원본에 영향 X
static void modifyIntArg (int num) {
System.out.printf("수정 전: %d%n", num++);
System.out.printf("수정 후: %d%n", num);
}
// 참조값은 주소값이므로 원본 그 자체를 가리킴
static void modifyArrElem (int[] arr) {
System.out.printf("수정 전: %d%n", arr[1]++);
System.out.printf("수정 후: %d%n", arr[1]);
}
public static void main(String[] args) {
int intNum = 3;
modifyIntArg(intNum); // 수정 전: 3 수정 후: 4 intNum: 3
int[] intNums = {1, 2, 3};
// 배열은 참조형이지만 그 안의 값(int)들은 원시형
modifyIntArg(intNums[0]); // 수정 전: 1 수정 후: 2
// 참조형인 배열 자체를 인자로 사용
modifyArrElem(intNums); // 수정 전: 2 수정 후: 3 intNums: [1, 3, 3]
}
static int factorial (int num) {
return num == 0 ? 1 : num * factorial(--num);
}