[JAVA] 자바 오버로딩과 오버라이딩 개념 완벽정리

[JAVA] 자바 오버로딩과 오버라이딩 개념 완벽정리

 

자바에서 다향성을 지원하는 오버로딩/ 오버라이딩이 있습니다.

오버로딩(Overloading) : 메서드의 이름은 같고  매개변수의 유형과 개수가 다르도록 하는 것을 의미합니다.
- 리턴값만을 다르게 갖는 오버로딩은 작성 할 수 없습니다.

오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용 하는것을 의미합니다.
- 메서드의 이름은 물론 파라메터의 갯수나 타입도 동일해야 하며, 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용됩니다.

간략하게 요약하면
오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것이고,
오버라이딩(Overriding)은 상속 받은 메서드의 내용만 변경 하는 것입니다.


예제로 설명드리겠습니다.

 

1. 오버로딩(Overloading) 개념 예제소스


먼저 codeTest 클래스와 Member 클래스를 만들었습니다.

 

Member 클래스입니다. 메소드 이름은 같고 매개변수만 다르게 설정하였습니다.

package joon;

public class Member {

    // test() 호출
    void test(){
        System.out.println("매개변수 없음");
    }

    // test에 매개변수로 int형 2개 호출
    void test(int a, int b){
        System.out.println("매개변수 "+ a + "와 " + b);
    }

    // test에 매개변수 double형 1개 호출
    void test(double d){
        System.out.println("매개변수 " + d);
    }

}

 

메소드를 호출해볼게요. 호출하는 Main 클래스입니다.

package joon;

public class codeTest {
    
    public static void main(String[] args) throws Exception{

       Member mem = new Member();

        // test() 호출
        mem.test();

        // test(int a, int b) 호출
        mem.test(100, 200);

        // test(double d) 호출
        mem.test(30);

        // test(double d) 호출
        mem.test(321.4);
    }
}

 

예제처럼 같은 test라는 여러개의 매소드를 정의하고 매개변수만 변경하였습니다. 
매개변수에 따라 각각에 맞는 함수를 실행합니다.

 


2. 오버라이딩(Overriding) 개념 예제소스

오버라이딩 예제 파일은 준비합니다.

codeTest.java : 메인호출 메서드입니다.

package joon;

public class codeTest {

    public static void main(String[] args) throws Exception{

        Seller seller = new Seller();

        seller.sellerName = "스티븐";
        seller.goodsCount = 10;
        seller.goodsName = "청소기";

        seller.print();

    }
}

Goods.java : 하위 클래스입니다.

package joon;

public class Goods {

    public String goodsName;
    public int goodsCount;

    public void print(){

        System.out.println("상품 이름은 "+this.goodsName+ "이고, 상품수량은 " + this.goodsCount+"입니다.");
    }

}

Seller.java : Goods 클래스를 상속합니다.

package joon;

public class Seller extends Goods {

    String sellerName;

    public void print(){
        System.out.println("상품 이름은 "+this.goodsName+ "이고, 상품수량 " + this.goodsCount+"입니다.");
        System.out.println(this.goodsName+"상품은 "+this.sellerName+"이 판매 담당자입니다.");
    }
}

 

Goods 클래스에 goodsName과 goodsCount 를 선언하였습니다.

print() 메소드로 상품 이름과 수량을 출력하게 만들었습니다.

Seller클래스에서 Goods클래스를 상속하여 print()메소드를 재정의 하였습니다.

메인클래스에서 Seller 객체를 생성하고, print() 메소드를 호출하면 오버라이딩된 Seller객체의 메소드가 호출됩니다.

 

실행 결과입니다.

 

3. 오버로딩(Overloading)과 오버라이딩(Overriding) 성립조건

구분 오버로딩(Overloading) 오버라이딩(Overriding)
메소드명 동일 동일
매개변수, 타입 다름 동일
리턴 타입 상관없음 동일

 

오버로딩과 오버라이딩의 차이점에 대해서 알아보았습니다.

 

다음포스팅에서 뵐게요!

댓글

Designed by JB FACTORY