Java - Overloading [IT 국비지원/구디 아카데미/김지훈 강사님]

hooon__dii·2023년 8월 29일
0

Java

목록 보기
9/11
post-thumbnail

Overloading / Overload (오버로딩 / 오버로드 )

같은 이름의 메서드/생성자를 여러개 가지면서 매개변수의 유형과 갯수를 다르게 하여 다양한 유형의 호출에 응답할수 있게 한 기술.
메서드 오버로딩과 생성자 오버로딩이 있다.

메서드 오버로딩

메서드의 이름이 같아도 매개변수의 갯수와 자료형이 다르면 같은 이름의 메서드를 여러개 선언이 가능한것
수행하는 기능은 같으나 처리하는 데이터를 달리할때 사용한다.

  • 사용조건

    • 메소드의 이름이 같아야 한다.
    • 메소드의 인자값이 순서, 개수, 타입중 하나라도 반드시 달라야함
    • 리턴 타입은 상관없음
    
    // overloding을 사용하지 않은경우 더하는 매개변수 마다 각각 다른 메서드를 사용해야한다.
    public class Main{
    	public static void main(String[] args) {
    		Calculator calculator = new Calculator();
           
         	calculator.stirngStringPlus("hello", "java");
    		calculator.stringInt("java", 123);
    		calculator.stringDoublePlus("java", 3.14);
    }
    
    
    public class Calculator{
    		void stirngStringPlus(String a, String b) {
    		System.out.println("결과 : "+ a + b);
    		}
    		void stringIntplus(String a, int b) {
    			System.out.println("결과 : "+ a + b);
    		}
    		void stringDoublePlus(String a, double b) {
    			System.out.println("결과 : "+ a + b);
    		}
    }
    // overloading을 사용 할경우 plus 메소드 하나를 이용해 매개변수에 여러가지 타입을 받아 처리를 할 수있다.
    public class Main{
    	public static void main(String[] args) {
    		Calculator calculator = new Calculator();
           	calculator.plus("hello", "java");
            calculator.plus("java", "123");
            calculator.plus("java", "3.14");
    }
    public class Calculator{
    		void plus(String a, String b) {
    			System.out.println(a + b);
    		}
    		void plus(String a, int b) {
    			System.out.println(a + b);
    		}
    		void plus(String a, double b) {
    			System.out.println(a + b);
    		}
      }

생성자 오버로딩

생성자도 인자를 다르게 하면 같은이름의 생성자를 여러개 정의 할 수있다.

  • 사용조건
    • 생성자의 이름은 클래스의 이름과 같아야한다.
    • 매개변수 자료형의 개수와 순서가 달라야한다.
    • 같은 클래스내에서 선언되어야 한다.
public class Puppy{
	String name;
    String action;
    
    public Puppy(){
    	// 빈 생성자
    }
    
    public(String name){	// 한개의 필드만 초기화하는 생성자
    	this.name = name;
    }
    
    /* 
    	이 경우 매개 변수의 개수와 타입이 같으므로 오버로드를 허용하지 않는다.
	 	public Puppy(String goal) { 
	 		this.goal = goal; 
	 	}
	 */
     
     public Puppy(String name, String goal) {	// 모든 필드를 초기화하는 생성자
     	// 생성자에 전달된 변수는 생성자를 벗어 날수 없다.
		// 그래서 받아온 변수를 클래스에서 사용 할 수 있도록 전달 되어야 한다
		this.name = name;	// 멤버 변수와 받아온 변수의 이름이 같으면
		this.goal = goal;	// 헷갈리지 않게 이 클래스의 변수라는것을 따로 표시한다.( this. )
	}
}

public class Main{
	public static void main(String[] args) {
    	// 빈생성자 호출시 출력 : null / null
		Puppy puppy = new Puppy();	
        // 한개의 필드만 초기화하는 생성자 호출시 출력 : 멍멍이 / null
        Puppy puppy = new Puppy("멍멍이");	
        // 모든 필드를 초기화하는 생성자 호출시 출력 : 멍멍이 / 짖는다
    	Puppy puppy = new Puppy("멍멍이","짖는다");	
        
    	System.out.println(puppy.name+" / "+puppy.goal);
        
	}
}

Puppy puppy = new Puppy("나는 오늘도","짖는다");
it국비지원 / 구디아카데미 / 김지훈 강사님

0개의 댓글