본문 바로가기
캠퍼스/Java

37. 오버로딩

by Sylar 2022. 8. 2.

-오버로딩?

클래스의 명칭이 같아도 사용할수 있게 코드를 작성하는 것을 의미한다.

 

동일한 메서드명으로 인하여 에러가 난 모습

 

이걸 어떻게 해결하나?

 

하나의 메서드엔 int num을 선언하고 하나는 빈칸으로 두니 에러가 사라졌다.

 

자바에선 메서드의 이름이 같아도 선언된 타입에 따라 다르다고 생각하는 모양이다.

 

같은 타입은 오류가 나는 모습

 

같은 타입이 있어도 다른 타입이 추가되면 역시 다른것으로 판단.

 

 

타입의 순서를 바꿔도 다르다.

 

 

정상적으로 작동하는지 테스트 해보자

 

아무런 타입을 적지않은것 하나와 String타입을 적은것 하나를 출력해보니

 

 

정상적으로 작동한다.

 

그래서 이걸 왜하는건가? 그냥 메서드 이름을 바꿔서 써라. 라고 생각할수도 있다.

 

하지만 저렇게 생각하는 우리도 당연하게 쓰고있었던 오버로딩된 코드가 있었다.

 

바로 System.out.println 이다.

 

구조를 살펴보면 
System( 클래스 ).out.println ( 메서드 ) ( 출력값); 이다.

얘는 오버로딩 되어있다.

 

왜냐?

이상함을 느꼈는가?

양식만 맞게 적는다면 모든 타입의 문자또는 숫자를 출력할수 있는 모습이다.

 

어째서 저렇게 출력할 수 있는걸까?

 

 

바로 앞에서 우리가 배웠던 방식과 비슷하게 적혀있다.

 

오버로딩을 적용하는 이유는 사용자가 같은 이름으로 편하게 사용하게 하기위해서 이다.

 

출력을 할때마다 타입을 매번 적어서 사용했다면 매우 불편했을 것이다.

 

하지만 이렇게 좋은기능도 한계점이 존재한다.

 

오버로딩의 한계점을 질럿과 드라군의 싸움으로 알아보자.

 

질럿과 드라군의 싸움.

 

우리는 오버로딩의 한계점을 알아보기 위해 질럿과 드라군의 싸움을 구경할 예정이다

 

질럿 & 드라군 생성 완료

 

 

질럿이 드라군을 공격하는 메서드를 작성 하였다.

드라군이 질럿을 공격하는 메서드도 작성하자.

 

한대씩 주고받았다. 그런데 이때 리버가 나타났다.

 

리버의 공격력은 무려 50

 

질럿과 드라군은 긴장하겠구만. 당연히 리버도 같이 싸움을 붙혀보자.

 

왜 와가지고;

괜히 싸움을 시킨거 같다. 한마리가 추가된것 뿐인데 메서드가 4개나 늘어났다.

 

그래서 이게 어쨌다는 소리인가 ?

 

캐릭터가 20개라면 ? ( 경우의수가 매우 많아짐 ) 즉, 유지보수 매우 힘듬.

 -> 메서드가 늘어날수록 유지보수 난이도가 급상승함.

그래서 추상화를 배워야함. ( 수천개가 되도 하나로 해결 가능 )

'캠퍼스 > Java' 카테고리의 다른 글

39.동적 바인딩 (1)  (0) 2022.08.04
38.상속  (0) 2022.08.03
36. 생성자  (0) 2022.08.02
35.OOP, 캡슐화, 상속  (0) 2022.08.02
32.디버깅  (0) 2022.08.02