-
객체 지향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에 대해 간단히 살펴보겠습니다.
- @라는 표시를 해놓은 의미있는 주석입니다.
- 오버라이딩 문법을 체크합니다.
- 사용 예시
1234567891011121314class Animal {public void eat() {System.out.println("먹다");}}class Person extends Animal {@Overridepublic void eat() {super.eat();System.out.println("사람이 수저로 먹다");}}cs ▶ @Override를 선언한 뒤 eat()메소드를 오버라이딩을 잘못 한다면 에러가 발생합니다.
반응형'Java' 카테고리의 다른 글
static, final, abstract 무엇일까? (0) 2018.07.19 객체 지향3. 다형성(Polymorphism)이란 무엇일까? (0) 2018.07.17 객체 지향2. 상속(Inheritance)은 무엇일까? (0) 2018.07.16 객체 지향1. 캡슐화(Encapsulation)은 무엇일까? (0) 2018.07.13 가비지 컬렉션(Garbage Collection)??? (0) 2018.07.12