ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체 지향2-1. 오버로딩(Overloading)과 오버라이딩(Overriding)은 무엇일까?
    Java 2018. 7. 16. 14:48
    반응형




    상속에 대한 개념 정리 후, 단골 질문인 오버로딩과 오버라딩에 대해 정리해보고자 합니다.




    1. 오버로딩 ( Overloading )

      - 오버로딩이란 동일한 이름으로 다양한 매개변수를 정의하는 프로그래밍 기법입니다.

      - 컴파일러는 매개 변수가 다르면 다른 메소드로 인식합니다.

     

     ① 메소드 오버로딩 ( Method Overloading )

          - 동일한 메소드명으로 다양한 매개변수의 메소드를 정의합니다.

          - 사용하는 측에서는 하나의 메소드명만 인지하면 다양한 데이터를 전달해 처리할 수 있기에 사용자 편의성을 위한 프로그래밍 기법입니다.

          ▶ api를 통해 실제 예를 알아보겠습니다. java.io 패키지 안에 PrintStream이라는 클래스 안에 

              우리가 자주는 println 이라는 여러개의 메소드를 볼 수 있습니다.  여기서 매개변수의 타입만 다르게 설정해놓았는데요.

              이렇게 다양하게 정의해놓았기 때문에 우리는 println이라는 함수안에 여러 타입의 변수를 넣어 사용할 수 있는 것 입니다.          


     

     ② 생성자 오버로딩 ( Constructor Overloading )

        - 생성자 오버로딩 또한 메소드 오버로딩과 정의는 같습니다.

       ▶ 마찬가지로 api를 통해 실제 예를 알아보겠습니다. 

           우리가 자주는 java.io 패키지 안에 FileReader라는 클래스를 살펴보면 FileReader의 생성자를 볼 수 있습니다.

           동일한 이름의 생성자에서 다양한 매개변수를 정의한 것을 볼 수 있습니다. 그렇기 때문에 저희는 다양한 타입으로 손쉽게 사용할 수 있는 것입니다. 





    2. 오버라이딩 ( Overriding )

      - 주로 메소드 오버라이딩을 많이 합니다.

      - 부모 클래스를 상속받은 자식 클래스에서 부모 클래스의 메소드를 자신에게 맞게 재정의한 것입니다.

      - 부모 메소드의 명과 매개변수, 리턴타입이 일치해야 합니다.

      - 접근제어자는 동일하거나 더 큰 범위어야 합니다.

      - super()를 사용하여 부모 클래스의 메소드를 불러올 수 있습니다.

      ▶ 마찬가지로 api를 통해 실제 예를 알아보겠습니다.

          java.lnag 패키지안에 String이라는 클래스를 살펴보겠습니다. String 클래스안에 toString을 보시면

          상위 클래스인 Object의 클래스안에 toString을 오버라이딩했다고 나와있습니다.





    3. 어노테이션 ( Annotation ) - @Override

      - 어노테이션에 대한 종류가 여러가지 있지만 이번에는 @Override에 대해 간단히 살펴보겠습니다.

      - @라는 표시를 해놓은 의미있는 주석입니다. 

      - 오버라이딩 문법을 체크합니다.

      - 사용 예시

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Animal {
        public void eat() {
            System.out.println("먹다");
        }
    }
     
    class Person extends Animal {
        @Override 
        public void eat() {
            super.eat();
            System.out.println("사람이 수저로 먹다");
        }
    }
     
    cs

    ▶ @Override를 선언한 뒤 eat()메소드를 오버라이딩을 잘못 한다면 에러가 발생합니다.


    반응형
Designed by Tistory.