ㅇ
MethodOverloading

한글로는 중복 정의
메소드의 이름은 하나만 주고 매개변수를 다르게 함으로써 메소드를 여러 개 만드는 기법
ㅇ 조건

중복정의를 하려면 조건이 있어
매개변수의 개수 및 매개변수의 데이터 타입이 달라야 해
메소드 오버로딩은 똑같은 이름의 메소드를 '허용'하는 특이 케이스야
메소드 이름 같아야 함
(입력인자가 달라야 해!! )매개변수의 개수 또는 타입이 달라야 함
매개변수는 같고 리턴 타입이 다른 경우는 오버로딩이 아님
ㅇ 왜 이런 기능을 제공하느냐
메소드 오버로딩이 없다면 효율성이 떨어져
예) 계산기 덧셈 기능
정수 덧셈. 실수 덧셈. 롱 타입 덧셈 등 내가 특정 데이터타입으로 연산 하고 싶은데
중복정의가 없다면
addLong addInt 등등 각각 새롭게 정의해야 해. 사용할 때도 계속 다르게 작성해야 해
오버로딩 기법을 이용하면 add로 통일해서 사용할 수 있어
ㅇ 장점

ㅇ 대표적 예 : 프린트문
사실 각각 타입에 따라 정의되어 있지만, 그냥 syso 한번에 호출 가능해
아래 쭈루룩 나오는 게 오버로딩

ㅇ
실습
add 를 만들어보자
리터럴 상수 - 코드를 쓰면서 직접적으로 쓰는 값들
정수 형태로 쓰면 인티저 타입, 실수로 쓰면 더블 타입으로 생각

정수, 실수, 문자열 add 완성
만들때는 살짝 귀찮을 수 있지만, 사용하는 입장에서 굉장히 큰 장점이야.
이거하고 비슷한 이름의 메소드 오버라이딩 나오는데 이거랑 엄청 헷갈려 하게 되니까
지금 메소드 오버로딩 잘 기억해 둬!
ㅇ
알고리즘 짜기 - 반복문까지
자료 효율적으로 - 배열
메소드로 넘어오면서부터는 코드를 어떻게 효율적으로 짤지, 유지보수 쉽게 하기 위해 어떻게 할지 이런거를 더 생각하게 될거야
코드를 정리할 수 있는 기회가 생겨
ㅇ
어제 짰던 코드 보면 1,2,3,4
4개의 메소드를 만들었었어
약수, 약수의 총합, 완전수, 소수
이걸 다른 사람도 용이하게 잘 쓸 수 있을 것 같아. 라는 생각이 들면
다른 사람도 사용할 수 있게 뺄 수 있어 (스캐너나 랜덤처럼)
=> 이름을 붙여서 사용자정의 데이터 타입으로 만들 수 있어
ㅇ
메소드만 복사 . 중괄호 잘 체크
이제 클래스 새로 만들건데
얘는 프로그램 구동의 시작점 파일이 아냐
그냥 자주 쓰는 ?? 라서 메인을 체크하지 마!
메인 없이 만든 클래스

이 안에 복사했던 메소드를 붙여넣어주면 돼
넘버 유틸즈

만들 때 private 했던 메소드들은 이 메소드가 정의된 파일 안에서만 사용할 수 있어 (접근이 제한적)
외부 파일들이 얘를 사용하게 하려면 퍼블릭으로 바꿔줘야 해
이렇게 하면 넘버유틸즈라는 사용자정의 타입을 우리가 만든거야
ㅇ
이걸 사용하면 알고리즘을 짜지 않더라도
완전수, 소수, 약수의 총합 등을 바로 알 수 있게 되는거야
ㅇ
사용자 정의 데이터 타입 선언하는 방법은 다 똑같아
NumberUtils util = new NumberUtils();

메소드 기능은 변수명.기능() 꼴로 사용

ㅇ
내가 프린트 쓰는데 그 원리보다는 내가 그걸 사용하는 게 중요하잖아.
그럴 때 이걸 사용하는 거야
1부때는 프로그래밍 코딩 방법, 능력 등을 배웠는데
2부때는 계속 이런 방향이야. 코드의 효율성이 목적!!
알고리즘 만드는 걸 넘어서 어떻게 괜찮게 짤 수 있을까
코드의 효율정, 생산성