본문 바로가기

기타

[자바/Java] 오버로딩과 오버라이딩

반응형

 

오늘은 오버로딩과 오버라이딩을 주제로 포스팅 하겠습니다.

자바 뿐만 아니라 다른 언어들도 제공하지만 자바로 포스팅하는 이유는 제가 자주 사용하는 언어이기 때문입니다.







오버로딩(Overloading) 

한 클래스안에서 동일한 이름의 메소드를 파라미터 개수나 타입에 따라 여러개 생성하여 사용하는 것을 말합니다. 

보통 같은 이름의 메소드를 생성할 경우, 다른 이름으로 변경하기 전까지 에러로 인식하게 됩니다. 하지만 다른 사람과 함께 협업할때나, 조건은 다르지만 같은 기능일 경우 유용하게 사용할 수 있습니다. 


아래 소스는 'sum' 이라는 이름은 동일하지만 각 파라미터의 개수가 다르게 설정했습니다.  각각 2개의 수를 더한 값을, 3개의 수를 더한 값을 리턴합니다. 

오버 로딩의 예로 적합하다고 말할 수는 없지만 해당 코드만으로 이해하시리라 생각됩니다. 

int sum(int num1,int num2){
return num1+num2;
}

int sum(int num1,int num2,int num3){

return num1+num2+num3;
}

※리턴 타입에는 국한되지 않고 변수명과 파라미터 개수나 타입으로 메소드의 동일 여부를 판단합니다.





오버라이딩(Overriding)

오버로딩과 이름이 흡사하지만 오버라이딩은 상속의 개념입니다. 상속에 대해서는 추후에 포스팅하도록 하고, 어느 정도 인지하신 상태라 생각하고 진행하겠습니다.

오버라이딩은 부모 클래스의 메소드를 자식 클래스에서 재 정의해서 사용하는걸 의미합니다. 주로 공통으로 사용하는 기능들을 부모 클래스로 묶어 놓고 상이한 부분을 자식 클래스로 세분화 하여 상세 기능을 추가해서 사용합니다.


아래 소스를 보시면 부모 클래스 'Animal'는 cry 메소드를 실행할 경우 태그가 Animal인 로그가 찍힐것이고 자식 클래스인 'Dog'는 부모의 메소드를 상속받아 태그가 Dog인 로그를 추가 출력하도록 재 정의 했습니다.

'Dog'클래스 메소드에 @Override 는 부모 메소드를 오버 라이드 했다는 뜻입니다.

class Animal{

public void cry(){
Log.e("Animal","cry");
}

}

class Dog extends Animal{

@Override
public void cry() {
super.cry();
Log.e("Dog","cry");
}
}


실제 사용은 아래와 같습니다.

Animal animal=new Animal();
Dog dog=new Dog();

animal.cry();
dog.cry();


결과는 아래와 같이 나옵니다. 첫번째 로그는 부모 클래스인 animal.cry() 부분의 실행 로그 부분이고 나머지 두 줄은 dog.cry() 의 실행으로 인한 로그입니다.







해당 포스팅은 지극히 주관적인 내용으로 저자의 복기 목적으로 작성된 것이고, 내용에대해 수정이나 추가 요청은 언제든 환영합니다. 



반응형

'기타' 카테고리의 다른 글

페이스북 홍보하기  (0) 2018.02.25
[자바/JAVA] 자바의 객체지향 이점  (2) 2018.01.05
[자바/JAVA] 변수  (0) 2017.12.18
[안드로이드/Android] 개인정보 보호법  (0) 2017.11.14
맥으로 SHA1 서명 얻기  (0) 2017.04.11