하루에 0.01%라도 성장하자

Develop/Android

overloading, overriding을 알아보자.

뚠님 2019. 10. 31. 17:38
반응형
오버로딩(overloading), 오버라이딩(overriding)??

 

자바를 배운다면 아주 기초적인 내용이다. 하지만 현재 이직을 준비하고 있는 입장에서.. 다시 기본이 중요하다는 것을 느꼈고, 리마인드 차원에서 정리한다.

( 향후에 이걸 정리하게 된 썰을 풀 수 있다면... 풀어보겠다.. ㅋㅋ )

 

기본적으로 자바의 다형성을 지원하는 방법이라고 말할 수 있겠다.

그리고 그 다형성을 제대로 표현해 줄 수 있는 방법이 오버로딩(overloading)이다.

 

간단하게 정의를 해보자.

 

오버로딩(overloading) : 같은 이름의 메소드를 갖지만 파라미터의 타입이나 개수가 다른 형태

 

오버라이딩(overriding) : 상위 클래스가 가지고 있는 메소드를 재정의 하는 형태

 

Overloading 예시

 

public class OverloadingEx { 
    void example1(){
        System.out.printf("예제 1");
    }
    
    
    void example1(int num){
        System.out.printf("예제 " + num );
    }
    
    void example1(String text){
        System.out.printf(text + " 1");
    }
    
    void example1(String text, int num){
        System.out.printf(text + " " + num );
    }
}

// 실행
public static void main(String[] args){
    OverloadingEx overloadingEx = new OverloadingEx();
    
    
    overloadingEx.example1();
    
    overloadingEx.example1(1);
    
    overloadingEx.example1("예제");
    
    overloadingEx.example1("예제",1);
}

 

우선 간단한 예시코드를 하나 작성하였다.

 

보면 같은 메소드 명이지만 파라미터가 다르다. 타입이 다르고, 파라미터의 갯수가 다르다.

 

main의 실행한 메소드를 보면 모드 "예제 1" 이라는 출력을 하겠지.

 

이것이 오버로드다. 하나의 메소드 명으로 다양한 경우의 처리를 할 수 있다.

 

Overriding 예시

 

오버라이딩은 상위 클래스에서 정의한 메소드를 하위 클래스에서 재정의 할 수 있는 방법이다.

 

public class PeopleInfo {

    public String name;
    public int age;
    
    
    public void printInfo(){
        System.out.printf("이름 : " + name + " 나이 : " + age );
    }
}

public class People extends PeopleInfo {

    String sex;
    String phone;
    
    
    // 오버라이딩. PeopleInfo 에서 만든 printInfo()를 재정의 하였다.
    public void printInfo(){
        System.out.printf("이름 : " + this.name + "나이 : " + this.age + " 성별 : " + sex + " 전화번호 : " + phone);
    }
}

public static void main(String[] args) {

    People p = new People();
    
    p.name = "뚠님";
    p.age = 10;
    p.sex = "남";
    p.phone = "000-0000-0000";
    
    p.printInfo();
}

 

보면 PeopleInfo 에서 정의한 printInfo()를 People에서 재정의 하였고, main에서 p.printInfo() 형태로 사용하였다.

 

 

오버로딩(overloading)과 오버라이딩(overriding)의 성립조건

 

오버로딩과 오버라이딩도 나름의 규칙이 있다.

 

[ 오버로딩 규칙 ]

  1. 메소드의 이름은 같아야 한다
  2. 매개변수, 타입은 달라도 상관 없다.
  3. 리턴 타입( void 포함 )이 달라도 상관 없다.

[ 오버라이딩 규칙 ]

  1. 메소드의 이름이 같아야 한다.
  2. 매개변수, 타입이 같아야 한다.
  3. 리턴 타입이 같아야 한다.

 


* 혹시 잘못된 내용이 기재되어 있거나 다른 문의사항이 있다면 댓글로 남겨주시면 최대한 답변드리겟습니다.

 

 

 

 

 

 

반응형