그 외/Java

Overriding(오버라이딩)과 Overloading(오버로딩)

poppy 2020. 9. 3. 15:08
반응형

오버라이딩과 오버로딩은 이름이 굉장히 비슷해서 자주 헷갈리는데요! 두가지 모두 다형성 실현을 목적으로 하고 있습니다.

오버라이딩과 오버로딩에 대해 알아보고 차이점을 비교해보겠습니다 

 

Overriding(오버라이딩)

오버라이딩은 상위 클래스가 가지고 있는 메소드를 하위 클래스에서 재정의하여 사용하는 것입니다. 상위 클래스에서 구현된 메소드를 무시하고 하위 클래스에서 새로운 기능의 메소드를 재정의하고자하는 것이 목적입니다.

하위 클래스에서 상이 클래스가 가지고 있는 멤버변수를 사용할 수 있습니다.

public class Student{
   
    public String name;
    public int student_number;
   
    public void print(){
        System.out.println("학생의 이름은 "+this.name+ "이고, 학번은" + this.student_number+"입니다.");
    }   
}


// Student 상속
public class Engineering extends Student{
   
    String department;
   
    //오버라이딩
    public void print(){
        System.out.println("학생의 이름은 "+this.name + "이고, 학번은" + this.student_number + "입니다.");
        System.out.println("학과는 "+ this.department +"입니다.");
    }
}

위의 코드를 보면 Engineering 클래스는 상위 클래스인 Student 클래스를 상속받았고, 상위클래스의 print() 메소드를 오버라이딩한 것을 볼 수 있습니다. 하위클래스가 상위클래스를 상속받았기 때문에 상위클래스의 멤버변수에 접근해 사용할 수 있습니다. 상위 클래스의 print() 메소드를 재정의하여 사용한 것을 볼 수 있습니다.

 

Overloading(오버로딩)

오버로딩은 같은 이름의 메소드를 여러 개 두어 매개변수의 타입과 개수를 다르게 정의한 것입니다. 이름이 같은 여러 개의 메소드를 중복 작성하여 사용의 편리성 향상을 목적으로 하고 있습니다.

public class PrintTest {

	//오버로딩
    void print(){
        System.out.println("출력없음");
    }
   
    void print(int a, int b){
        System.out.println("출력: "+ a + " , " + b);
    }
   
    void print(String c){
        System.out.println("출력: " + c);
    }
}

public class test {

    public static void main(String[] args) {
       
        PrintTest test = new PrintTest();
       
        // print() 호출
        test.print();
       
        // print(int a, int b) 호출
        test.print(100,200);
       
        // print(String c) 호출
        test.print("호출하기");
       
    }
}

위의 코드를 보면 PrintTest 클래스에서 같은 이름의 메소드들을 여러 개 정의한 것을 볼 수 있습니다. 메소드의 이름은 같지만 매개변수의 타입이나 개수가 다른 것을 확인할 수 있습니다. 이렇게 매개변수의 타입이나 개수를 다르게 같은 이름의 메소드를 여러개 정의한 것을 오버로딩이라고 합니다. 

 

비교

비교요소 Overriding(오버라이딩) Overloading(오버로딩)
관계 상속 관계 동일한 클래스 내 / 상속 관계
조건 메소드의 이름, 매개변수 타입과 개수, 리턴 타입이 모두 동일해야 함 메소드 이름은 반드시 동일해야하고, 매개변수 타입이나 개수가 달라야 함
바인딩 동적 바인딩.
실행시간에 오버라이딩된 메소드 찾아 호출
정적 바인딩.
호출될 메소드는 컴파일 시에 결정

 

반응형

'그 외 > Java' 카테고리의 다른 글

상속과 다형성  (0) 2020.09.13
자바의 접근제어자  (0) 2020.09.11
Git Bash 설치 및 github 주요 명령어 정리  (0) 2020.09.07
D2 Coding 폰트 적용  (0) 2020.08.24
자바 이클립스 설치 (IDE for JAVA EE)  (0) 2020.08.24