[JAVA] 메서드 오버로딩 3탄
@욕심쟁이
·2020. 8. 19. 15:10
반응형
가변인자(비정형인자, Variable Arguments)
- 메서드 정의시 파라미터(매개변수)에 전달되는 인자의 갯수가 유동적일때 일정 갯수가 정해져 있지 않으므로
변수 선언이 어렵다. 따라서, 이렇게 유동적인 인자의 갯수를 모두 처리 할 수 있도록 가변 인자를 사용하여
변수를 선언하면 동일한 타입의 갯수가 제한이 없는 인자를 모두 전달받을 수 있음
- 가변인자형태로 선언되는 매개변수는 전달받은 데이터를 해당이름을 가진 배열 형탱로관리함
- 가변인자에 전달될 데이터는 0개부터 자유롭게 전달 가능
<주의사항!>
- 가변인자는 마지막 파라미터로 단한번만 사용가능하다!
<가변인자를 사용한 메서드 정의기본문법>
[제한자] 리턴타입 메서드명(데이터타입...변수명){
//→전달되는 데이터들이 가변인자 변수명의 배열로 관리됨
}
예시1)
public class Ex3 {
public static void main(String[] args) {
//가변인자를 사용한 메서드는 호출시 전달할 파라미터 갯수 제한 없음
VairableArguments va = new VairableArguments();
va.print(1, 2);
va.varargsPrint(1, 2,3,4);
va.varargsPrint(1);
va.varargsPrint();
}
}
class VairableArguments{
//가변인자(비정형인자)를 활용한 메서드 오버로딩
public void varargsPrint(int...nums) {
for(int i=0; i < nums.length; i++) {
System.out.println(nums[i]);
}
//향상된 for문
for(int num :nums) {
System.out.println(num+"");
}
}
//주의사항!
//가변인자는 마지막 인자로 단 한번만 사용가능
public void varargsPrint(String titles, int...nums ) {}
//→가변인자 앞에 다른 매개변수가 있더라도, 마지막이 가변인자면 ok
//public void varargsPrint(int...nums, String titles) {}
//→가변인자뒤에 다른매개변수가 올수없다.
//public void varargsPrint(int...nums, String...titles) {}
//→가변인자뒤에 다른매개변수가 올수 없으므로
// 두개이상 가변이자 사용도 불가능
//정수 2개(n1,n2)를 전달받아 출력하는 print()메서드 정의
//정수 3개(n1,n2,n3)를 전달받아 출력하는 print()메서드 정의
public void print(int n1, int n2) {
System.out.println(n1+" ,"+ n2);
}
public void print(int n1, int n2, int n3) {
System.out.println(n1+" ,"+ n2+", "+n3);
}
//→전달되는 데이터가 2개 또는 3개의 경우에만 메서드가 호출되고
// 0개,1개, 또는 4개 이상의 경우에는 일치하는 매개변수가 없으르모 호출되지못하고 오류가 발생
}
public class Test3 {
public static void main(String[] args) {
Calculator3 c= new Calculator3();
c.calc('+',10,20);
c.calc('+',10,20,30);
c.calc('+',10,20,30,40);
c.calc('-',100,10); //100-10=90
c.calc('-',100,10,20); //100-10-20 =70
c.calc('-',100,10,20,30); //100-10-20-30=40
c.calc('*',10,20); //10*20=200
c.calc('*',10,20,30); //10*20*30=6000
c.calc('/',100,10); //100/10=10
c.calc('/',100,10,2); //100/10/2=5
}
}
class Calculator3{
public void calc(char opr,int...nums) {
//result값이 배열의 첫값이면 계산가능
int result = nums[0];
System.out.print(nums[0]);
if(opr=='+') {
for(int i=1; i < nums.length; i++) {
System.out.print( " + " + nums[i]);
result += nums[i];
}
}else if(opr == '-') {
for(int i=1; i < nums.length; i++) {
System.out.print(" - " + nums[i]);
result -= nums[i];
}
}else if(opr=='*') {
for(int i=1; i < nums.length; i++) {
System.out.print(" * " + nums[i]);
result*=nums[i];
}
}else if(opr == '/') {
for(int i=1; i < nums.length; i++) {
System.out.print(" / " + nums[i]);
result /=nums[i];
}
}
System.out.println(" = "+ result );
}
}
반응형
'IT > JAVA' 카테고리의 다른 글
[JAVA] 생성자 필드(멤버변수) 초기화 (0) | 2020.08.21 |
---|---|
[JAVA] 생성자(Constructor) (0) | 2020.08.21 |
[JAVA] 메서드 오버로딩 2탄 (0) | 2020.08.19 |
[JAVA] 메서드 오버로딩 1탄 (0) | 2020.08.19 |
[JAVA] 접근제한자(Public, Protected, Private, Default) (0) | 2020.08.18 |