본문 바로가기

프로그래밍 이야기

[안드로이드를 위한 자바] 오버로딩(Overloading), 오버라이딩(Overriding)의 이해


학교에서 처음 수업시간에 자바라는 언어를 반학기 정도(?) 접한 이후 "이놈 괜찮은데?" 하는 생각이 들어 따로 자바를 공부하면서 이것저것 해보고, SCJP 딴다고 한참 자바공부를 할 때가 있었는데~ 세월이 세월인지라, 그리고 하도(!) 써먹지를 않아서 기억이 가물가물~ 하네요.

  그래도 다행이도 안드로이드라는 놈을 접하게 되면서 자연히 자바 공부도 다시 시작하게 되었고, 예전의 기억들도 조금씩(?)은 제 자리를 찾아오고 있습니다 ^^;

안드로이드를 공부하다보니, 의외로 자바에 대한 기초 지식 (조금 더 나아가서는 중급 이상의 지식)이 없으면 안드로이드 자체를 이해하기가 어려워지더군요. 그래서, 앞으로 조금씩 안드로이드를 공부하기 위해 필요한 자바 기초 지식에 대해 한두개씩 정리해나가 보려고 합니다.

영광스러운(?) 첫 강의를 장식할 주제는 바로 오버로딩(Overloading)오버라이딩(Overriding)입니다.
처음 오버로딩과 오버라이딩이라는 용어를 접했을 때, 말도 비슷비슷하고~ 얼핏 보기에 하는 일도 비슷비슷한 것 같아서 이게 뭐여~ 하는 생각이 많이 들었습니다. ^^; 하지만, 자세히 들어가보면 오버로딩과 오버라이딩은 완전히 다른 개념이지요~
그럼, 하나씩 살펴보도록 하겠습니다.


  • 오버로딩
    오버로딩은 한 클래스 내에서 같은 이름의 메소드를 여러개 정의하는 것을 의미합니다.
    예를 들면, 더하기를 해주는 메소드 add()에는 정수형 변수를 처리해주는 int add(int a, int b) 가 있을 수도 있고, 실수형 변수를 처리해주는 double add(double a, double b) 가 있을 수도 있습니다.
    이 두 메소드의 이름은 모두 add()로 동일하며, add()메소드를 호출시에는 변수의 인자형에 따라 적절히 int add() 메소드가 호출될 수도, double add()가 호출될 수도 있지요.
    class Calc{
       int add(int a, int b); // 정수형 변수를 처리하는 메소드입니다.
       double add(double a, double b); // 실수형 변수를 처리하는 메소드입니다.
       // 위 두 개의 메소드는 오버로딩된 상태입니다.
    }
    

    오버로딩에는 몇 가지 조건이 있습니다. 

    1. 오버로딩한 메소드들은 같은 클래스 내에 존재해야 하며, 같은 이름을 가져야 합니다.
    2. 오버로딩한 메소드들은 형(type)이 서로 다르거나 매개변수의 개수가 달라야 합니다.

    따라서, int add(int a, int b, int c) 와 int add(int a, int b) 메소드는 서로 매개변수의 개수가 다르기에 오버로딩이 가능하지만 int add(int a, int b)와 int add(int one, int two) 는 매개변수의 개수도 같고, 인자형도 같기에 오버로딩이 불가능합니다.

 


  • 오버라이딩
    오버라이딩은 상속 관계에 있는 두 클래스 중, 하위 클래스에서 상위 클래스의 메소드를 재정의하는 것을 의미합니다.
    오버라이딩이야말로 안드로이드 어플리케이션 개발에 있어서 가장 자주 쓰이는 기술이 아닐까 싶네요. 하다못해 액티비티 하나라도 띄우려면 onCreate()메소드를 오버라이딩 해야하니까요~
    @Override // Activity 클래스의 onCreate()메소드를 재정의합니다.
    public void onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState); // 본래의 onCreate()메소드를 호출합니다.
       // 이 아래로는 사용자가 원하는 기능을 구현하는 부분입니다.
       setContentView(R.layout.main);
       TextView myText = new TextView(this);
       myText.setText("Hello, Android!");
    }
    

    위에서 super.onCreate() 메소드를 호출함으로써, 상위 클래스에서 본래 수행하던 기능을 수행할 수 있습니다.
    그 이후로는 사용자가 필요로 하는 기능들을 추가해주면 됩니다.