method 호출 시, 입력하는 값을 동적으로 넣어줄 때
JDK 1.5부터 지원
parameter를 정의할 때 데이터형 ... 매개변수명 형식
method 안에서는 배열로 처리
System.out.printf / System.out.format
method가 여러 개의 parameter를 정의할 때 가변인자형은 마지막에만 사용 가능
형식)
접근지정자 반환형 method명 (데이터형 ... 매개변수명) {
}
호출)
method명();
method명(값);
method명(값, 값, 값...);
package day0619;
/**
* 가변인자형(Variable Arguments)의 사용 <br>
* method를 호출할 때 입력값(Arguments)을 동적으로 몇 개를 넣어도 호출 가능한 method 형태. <br>
* V.A는 parameter를 정의할 때 가장 마지막에만 정의할 수 있다.
*/
public class VariableArguments {
// 1.method선언
public void useVariableArgs(int... param) {
// V.A는 배열로 처리되므로, 참조형 데이터형이고 주소가 출력된다
// System.out.println(param);
for (int i = 0; i < param.length; i++) {
System.out.println(param[i]);
} // end for
} // useVariableArgs
public void useVariableArgs2(int j, char c, int... param) {
// V.A는 배열로 처리되므로, 참조형 데이터형이고 주소가 출력된다
System.out.println("int :" + j + ", char :" + c);
for (int i = 0; i < param.length; i++) {
System.out.println(param[i]);
}
}
public static void main(String[] args) {
// 2.객체생성 : 클래스명 객체명 = new 클래스명();
VariableArguments va = new VariableArguments();
// 3. method호출
va.useVariableArgs(); // 호출가능
va.useVariableArgs(2023); // 호출 가능
va.useVariableArgs(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 호출가능
System.out.println("------------------------------");
// 일반 parameter는 값을 반드시 입력해야하고, V.A는 생략가능
va.useVariableArgs2(2023, 'A');
va.useVariableArgs2(2024, 'B', 2023, 6, 19, 12, 30);
}
}
▶실행결과
2023
0
1
2
3
4
5
6
7
8
9
10
--------------------------------
int :2023, char :A
int :2024, char :B
2023
6
19
12
30
Variable Arguments를 사용한 출력 method
JDK 1.5부터 지원
출력메시지와 출력값 분리 가능
System.out.printf("출력식", 값...);


System.out.printf("%5d", 12);
5칸으로 설정하여 정수 값을 출력
===========================

System.out.printf("%-5d", 12);
5칸 설정하고 왼쪽정렬로 출력
===========================

System.out.printf("%.2f", 12.1234);
원하는 소수자릿수(2자리)까지 절삭해 출력
===========================

System.out.printf("%7.2f", 12.1234);
전체자릿수 7자리, 소수자릿수 2자리
int year = 2020;
int month = 11;
//오늘은 2020년 11월
System.out.println("오늘은 "+year+"년 "+month+"월");
System.out.prinf("오늘은 %d년 %d월", year, month);
▶ 실습 - printf
public class UsePrintf {
public static void main(String[] args) {
int age = 25;
int year = 2023;
// 올해는 2023년 내 나이는 25세를 콘솔 출력,
// println은 출력 메시지와 출력 값이 섞이게 된다.
System.out.println("올해는 " + year + "년 내 나이는 " + age + "세");
// printf는 출력메시지와 출력값이 구분된다.
System.out.printf("올해는 %d년 내 나이는 %d세\n", year, age);
System.out.format("올해는 %d년 내 나이는 %d세\n", year, age);
int i = 2023;
System.out.printf("[%d][%6d][%-6d]\n", year, year, year);
char c = 'A';
System.out.printf("[%c][%5c][%-5c]\n", c, c, c);
double d = 2023.619;
System.out.printf("[%f][%8.1f][%-8.1f][%.2f]\n", d, d, d, d);
boolean flag = true;
System.out.printf("%b\n", flag);
String msg = "오늘은 월요일 입니다";
String msg2 = "오후 폭염";
System.out.printf("%s,[%10s]", msg, msg2);
// err: 출력문자와 출력 값의 개수가 맞지 않을 경우
// System.out.printf("오늘은 %d년 %월 입니다..",2023));
// err: 출력문자와 출력 값의 데이터형이 맞지 않을 경우
// System.out.printf("오늘은 %d년 %d월 입니다..", 2023, 6.20);
}//main
}//class
▶실행결과
올해는 2023년 내 나이는 25세
올해는 2023년 내 나이는 25세
올해는 2023년 내 나이는 25세
[2023][ 2023][2023 ][A][ A][A ]
[2023.619000][ 2023.6][2023.6 ][2023.62]
true
오늘은 월요일 입니다,[ 오후 폭염]
하나의 대상을 다양하게 사용하는 것
*객체지향언어의 3대 특징 중 하나
*3대 특징 : 다형성, 상속, 캡슐화
객체다형성과 method다형성 지원
객체다형성 : 부모클래스로 다양한 자식클래스의 객체를 저장 가능(상속)
method다형성 : Overload, Override
Overload : 한 클래스에서 같은 이름의 method를 여러 개 정의하는 방법
Override : 상속관계의 클래스에서 같은 이름의 method를 자식클래스에서 재정의하는 방법
하나의 클래스안에서 같은 이름의 method를 여러 개 정의할 수 있는 방법
편의성 향상
method명은 같고, 매개변수를 다르게 작성
⇒ 호출을 다르게 할 수 있다.
class Test{
public void temp() { // t.temp();
}
public void temp(int i) { // t.temp(11);
}
public void temp(int i, int j) { // t.temp(1, 2);
}
public void temp(char c) { // t.temp('A');
}
public void temp(int paramK) {
} //호출시 식별되지 않기 때문에 오버로드 불가(error)
}
package day0620;
public class OverloadTest {
// 호출되면 *을 하나 출력하는 method를 작성
/**
* 별을 하나 출력하는 일
*/
public void printStar() {
System.out.println("★");
}
// 호출되면 *을 입력되는 개수만큼 출력하는 method를 작성
/**
* 입력하는 수 만큼의 별을 출력하는 일
*
* @param cnt 출력할 별의 개수
*/
public void printStar(int cnt) {
for (int i = 0; i < cnt; i++) {
System.out.print("☆");
} // end for
}// printStar
public static void main(String[] args) {
OverloadTest ot = new OverloadTest();
ot.printStar(10);
}// main
}// class
▶실행결과
★★★★★★★★★★