본문 바로가기

▶Programming/Theory

overriding vs overloading

overloading은 함수 중복으로 정의-함수 이름만 같으면 나머지 다 달라도 오케이!


overriding은 상속받은 메소드  재정의-부모와 내용만 살짝 다르게.


overriding


1. 오버라이드 하고자 하는 메소드가 상위 클래스에 존재해야 함.

2. 메소드 이름이 같아야 함.

3. 메소드 파라미터의 개수,타입(자료형태), 리턴타입이 같아야 함.

4. 메소드에 상위 메소드와 동일하거나 내용이 추가되어야 한다.


->즉, 부모한테 받은거 그대로 쓰거나 몇줄 추가 해서 약간 바꿔쓰거나! 이게 오버라이딩!



여기까지는 쉬운데.. 이제 overloading이 들어가면 이때부터 헷갈리기 시작. overloading은 다형성의 개념.


다형성이 뭔가하니..잡탕과 비슷. 이놈이고 저놈이고 다 들어갈 수 있게 만드는 것. 쉽게 얘기해서 범용성 이란 의미다.


쉽게 예를들어, '먹는다' 라는 행위를 보자. 무엇을 먹을까? '먹는다' 라는 행위와 어울리는 단어는 무한대다.


고기를 먹는다. 밥을 먹는다. 카레를 먹는다. 여기서 포커스는 들어가는 input(고기, 카레, 밥)에 있다.


생각해보자. 만약에 '먹는다'라는 단어를 고기와만 같이 써야 한다면? 고기를 먹는다. 는 말이 되겠지.


그렇게 쓰기로 약속했으니까.. 근데..카레를 먹는다고 하면? 이건 말이 안되겠지. 쓰지 않기로 했으니까.


그럼 카레를 입에 넣는 행위를 표현 할 다른 말을 만들어야 한다. 이런식으로 음식마다 '입에 넣는 행위를 표현'하는 말을 


일일이 만든다면 얼마나 복잡하고 불편하겠는가?


그래서 하나로 통일한거다. 입에 넣는 행위는 '먹는다' 로...이렇게 하나로 통일하니까 input 하나 하나에 1대 1 대응하는 


동사를 안 만들어도 되서 편하고, 이것저것 안 외우고 하나만 외워도 되니까 편하고!


이게 바로 overloading이다. 


overloading


1. 메소드 이름은 같아야 한다.
2. 리턴타입이 같아도 되고 달라도 된다.
3. 파라미터 개수는 자유로우나
4. 만약 파라미터 개수가 같을 경우, 파라미터의 타입(자료형)이 달라야 한다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
public int plus(int i, int j){// 1번 메소드
    return i+j;
}
 
public String plus(Sting i, Sting j){// 2번 메소드
    return i+j+k;
}
 
public long plus(long i, long j,long k){// 3번 메소드
    return i+j+k;
}
 
 
cs


이제 override와 overloading의 차이점을 확실히 알았다.