오늘의 인기 글
최근 글
최근 댓글
Today
Total
04-30 00:02
관리 메뉴

우노

[Java] 오버로딩(Overloading)과 오버라이딩(Overridding)의 차이 본문

Language/Java

[Java] 오버로딩(Overloading)과 오버라이딩(Overridding)의 차이

운호(Noah) 2021. 3. 12. 14:00

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

  • 자바에서 다형성을 지원하는 방법으로 메소드 오버로딩(Overloading)과 오버라이딩(Overriding)이 있다.
  • 오버로딩(Overloading)과 오버라이딩(Overriding)의 개념은 다르지만, 이름이 비슷해 참 헷갈린다.
    • 오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
    • 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용하는 기술

오버로딩(Overloading)

  • 간단한 예제 코드를 통해 알아보자.

  • Overloadingtest.java

      public class Overloadingtest {
    
          // 기본 test()
          void test(){
              System.out.println("매개변수 없음");
          }
    
          // 2개의 int type 매개변수를 출력하는 test()
          void test(int a, int b){
              System.out.println("매개변수 "+ a + "와 " + b);
          }
    
          // 1개의 double type 매개변수를 출력하는 test()
          void test(double d){
              System.out.println("매개변수 " + d);
          }
      }
  • test.java

      public class test {
    
          public static void main(String[] args) {
    
              // Overloadingtest 객체 생성
              Overloadingtest ob = new Overloadingtest();
    
              // test() 호출
              ob.test();
    
              // test(int a, int b) 호출
              ob.test(10, 20);
    
              // test(double d) 호출
              ob.test(50);
    
              // test(double d) 호출
              ob.test(123.4);
          }
      }
  • 실행결과

      매개변수 없음
      매개변수 10와 20
      매개변수 50.0
      매개변수 123.4
  • 예제와 같이, test 라는 같은 이름의 메소드를 여러개 정의하고

  • 매개변수만 변경하여 선언했을 때, 호출 매개변수에 따라 각각의 함수에 매칭되어 실행된다.

오버라이딩(Overriding)

  • 상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼

  • 상위 클래스가 가지고 있는 메소드도 하위 클래스로 상속되어 하위 클래스에서 사용할 수 있다.

  • 하지만, 하위 클래스에서 상위 클래스의 메소드를 재정의해 사용할 수 있다.

  • 상속 관계에 있는 클래스 간에, 같은 이름의 메소드를 재정의하는 기술을 오버라이딩(Overriding) 이라고 한다.

  • 간단한 예제 코드를 통해 알아보자.

  • Employee.java

      public class Employee{
    
          public String name;
          public int age;
    
          // print() 메소드
          public void print(){
              System.out.println("사원의 이름은 "+this.name+ "이고, 나이는" + this.age+"입니다.");
          }   
      }
  • Manager.java

      // Employee 상속
      public class Manager extends Employee{
    
          String jobOfManage;
    
          // print() 메소드 오버라이딩
          public void print(){
              System.out.println("사원의 이름은 "+this.name + "이고, 나이는" + this.age + "입니다.");
              System.out.println("관리자 "+this.name+"은 "+this.jobOfManage+" 담당입니다.");
          }
      }
  • test.java

      public class test {
    
          public static void main(String[] args) {
    
           // Manager 객체 생성
           Manager lee = new Manager();
    
           // 변수 설정   
           lee.name = "하이언";
           lee.age = 30;
           lee.jobOfManage="프로젝트 매니저";
    
                  // Overriding된 Manager객체의 print()호출
            lee.print();
          }
      }
  • 실행결과

      사원의 이름은 하이언이고, 나이는 30입니다.
      관리자 하이언은 프로젝트 매니저 담당입니다.
  • Employee에 print() 함수를 선언하고, Manager에서 Employee를 상속하여 print() 메소드를 재정의 하였다.

  • 이후, main 함수에서 Manager 객체를 생성 후, print() 메소드를 호출하면

  • 오버라이딩 된 Manager 객체의 print() 메소드가 호출된다.

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

참고

Comments