본문 바로가기
  • NerdCodX Blog
자바(Java)

Java Day 8: 오버로딩(Method Overloading) 완벽 정리와 실전 예제

by NerdCodeX 2025. 1. 27.

안녕하세요, NerdCodeX입니다! 😊
프로그래밍에서 코드의 가독성은 매우 중요합니다. 이를 해결하기 위한 Java의 강력한 기능 중 하나가 바로 오버로딩(Method Overloading)입니다.

오버로딩은 같은 이름의 메소드를 여러 개 정의하되, 매개변수의 개수나 타입이 다르게 설정하여 사용할 수 있게 해주는 기능입니다. 이를 통해 코드의 가독성을 높이고, 직관적이며 재사용 가능한 코드를 작성할 수 있습니다.

오늘은 오버로딩의 기본 개념과 조건을 배우고, 이를 활용한 초를 시간/분/초로 변환하는 프로그램을 작성해 보겠습니다. 실전 예제를 통해 오버로딩이 왜 유용한지, 어떻게 활용할 수 있는지 함께 살펴봅시다!


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으로 나눠 시간구함 (나머지가 분)

오늘은 Java의 강력한 기능 중 하나인 오버로딩(Method Overloading)에 대해 학습하고, 이를 활용해 초를 시간/분/초로 변환하는 프로그램을 작성해 보았습니다.

오버로딩은 동일한 메소드 이름을 유지하면서도 매개변수의 개수타입을 달리해 다양한 상황에 유연하게 대응할 수 있게 합니다. 이를 통해 코드의 가독성과 유지보수성을 높이는 데 크게 기여합니다.

이제 여러분도 프로그램의 요구사항에 따라 오버로딩을 활용해 깔끔하고 직관적인 코드를 작성할 수 있을 것입니다. 다음 시간에는 객체 지향 프로그래밍(OOP)의 핵심 개념인 클래스와 상속에 대해 배워보겠습니다. 그럼 꾸준히 연습하며 함께 성장해 나가요! 😊