반응형
오늘은 오버로딩에 대해서 살펴 보겠습니다. 오버로딩은 메소드 중복이라고도 합니다.
형식만 다른 메소드인경우 동일한 메소드의 이름으로 사용할 수 있는 방법입니다.
코드의 가독성을 문제를 해결하기 위해 자바에서 동일한 이름을 중복해서 사용할 수 있도록 해준 것입니다.
Overloading
클래스의 구조와 형식
public class OverloadingTest {
public static void main(String[] args) { //main method (사장)
azejava();
azejava2(300,200,500);
}// main-end
private static void azejava2(int i, int j, int k) { // azejava2 method - 2형식
System.out.println(i+j+k);
}
private static void azejava() { // azejava method (비서) - 1형식
System.out.println("오늘도 열공");
}
}// class-end
main()와 azejava()는 모두 class{}안에 위치한다.
azejava(), azejava2(..)식으로 늘어나면 가독성의 문제가 발생한다.
c언어 참조 (가독성의 문제 예시)
- atoi() : alphabet to int : "3" --> 3 / 자바의 Integer.parseInt()와 동일
- atof() : alphabet to float : "34.1" --> 34.1 /
- atol() : alphabet to long :
가독성의 문제가 생겨서 자바에서 해결 방안을 만들었다. --> 메소드 중복(오버로딩)
public class OverloadingTest {
public static void main(String[] args) {
azejava();
azejava(300,200,500); // 함수 이름을 azejava로 동일하게 사용 ,메소드(함수) 중복
azejava(32.6, 78.7, 8); // 함수 이름과 인자의 수가 3개로 동일하나, 타입이 틀리다. 중복가능
}
}
private static void azejava() {
System.out.println("오늘도 열공");
}
private static void azejava(int i, int j, int k) { //개수)이름이 같으나 인자수가 틀리다.
System.out.println(i+j+k);
}
private static void azejava(double d, double e, int k) { //타입) 이름과 인자가 동일하나 타입이 틀리다.
System.out.println(d+e+k);
}
}
메소드(함수) 중복 (Method Overloading)
- 가독성의 해결을 위해 자바에서 동일한 이름을 중복해서 사용 할 수 있도록 해준다.
메소드 중복 조건
1) 메소드 이름이 같아야 한다.
2) 중요: 인자의 갯수가 다르거나(or) 또는 인자의 Type이 달라야한다.
- 개수 : azejava()=0개, azejava(300,200,500)=3개
- 타입 : azejava(300,200,500), azejava(32.6, 78.7, 8) 인자의 타입이 틀리다.
연습문제
Scanner로 입력받은 초를 "00시간00분00초"로 출력하는 프로그램을 작성하세요
시간이 0시간이나거 분이 0분이면 출력 결과에는 나오지 않는다.
azejava(초)형식을 사용하시오
코드
public class Test001 {
public static void main(String[] args) {
int sec= azejava(); //입력 받기 메소드
azejava(sec); //초 계산하기 메소드
}
//초 계산하기 메소드
private static void azejava(int sec) {
int min=sec/60; // 시간을 구하기 위해 분을 구함
int hr=min/60; // 분을 60으로 나눠 시간을 구한다. 실제 시간
int sec1=sec%60; // 분을 구하고 남은 초의 수로. 실제 초
int min1=min%60; // 시간을 구하고 남은 분의 수로. 실제 분
System.out.println(sec+"초는 ");
if (hr==0 && min1!=0) { // 시간이 0인 경우
System.out.print(min1+"분 "+sec1+"초");
}
else if (hr==0 && min1==0) { // 시간과 분이 0인 경우
System.out.print(sec1+"초");
}
else { // 모두 나오는 경우
System.out.print(hr+"시간 "+min1+"분 "+sec1+"초");
}
System.out.println("입니다.");
}
// 초 입력받기 메소드
private static int azejava() {
Scanner sc1= new Scanner(System.in);
System.out.println("초를 입력하세요");
int sec1=sc1.nextInt();
return sec1;
}
}
받은 수를 60나눠 분을 계산1 (나머지가 초)
계산1을 다시 60으로 나눠 시간구함 (나머지가 분)
반응형
'IT & 컴퓨터활용 > 코딩' 카테고리의 다른 글
Day 10 - 2차원 배열과 다양한 표 그리기 (0) | 2020.03.17 |
---|---|
Day 09 - 배열의 기본과 1차원 배열 (0) | 2020.02.17 |
Day 07 - 메소드 (0) | 2019.12.27 |
Day 06 - Switch 조건문과 While반복문 (0) | 2019.12.25 |
Day 05 - 자바 이중 for 문 별 그리기 정리 (0) | 2019.12.20 |