JAVA/이론

26. [ JAVA ] 메소드 오버로딩 (Method Overloading)

천재단미 2024. 12. 12. 17:58
728x90
반응형

 

메소드 오버로딩은 자바 프로그래밍에서 중요한 개념으로, 한 클래스 내에 같은 이름의 메소드를 여러 개 정의하는 기법입니다. 



1. 오버로딩의 조건

1) 메소드 이름: 오버로딩된 메소드들은 동일한 이름을 가져야 합니다.
2) 매개변수: 매개변수의 개수, 타입, 또는 순서가 달라야 합니다.
3) 반환 타입: 반환 타입은 오버로딩을 구분하는 기준이 되지 않습니다.

 

 


2. 오버로딩의 장점


1) 코드 재사용성: 유사한 기능을 하는 메소드들을 하나의 이름으로 통일할 수 있습니다.
2) 가독성 향상: 여러 메소드를 각각 다른 이름으로 정의하지 않아도 되어 코드의 가독성이 높아집니다.
3) 유지보수 용이성: 비슷한 기능의 메소드들이 하나의 이름으로 모여있어 유지보수가 쉬워집니다.
4) 다형성 구현: 같은 이름의 메소드를 호출하더라도 매개변수에 따라 다른 동작을 수행할 수 있습니다.
5) 메소드 이름 기억 용이: 개발자가 기억해야 할 메소드 이름의 수가 줄어듭니다.
6) 기능 예측 용이: 동일한 이름을 사용함으로써 메소드의 기능을 쉽게 예측할 수 있습니다.

 

 

3. 기본 구문




    class Test {
          void something() {
                  System.out.println("No parameters");
          }

          void something(int i) {
          System.out.println("One integer parameter");
         }

        void something(int i, int j) {
             System.out.println("Two integer parameters");
          }

         void something(int i, double d) {
               System.out.println("Integer and double parameters");
          }
     }



 

 

4. 예시 

 

(1)예시

 




import entety.Bus;
import entety.Student;

public class TakeTrans {
    public static void main(String[] args) {

       Student s1 = new Student( "홍길동" , 5000);
       Student s2 = new Student( "김나나" , 10000);


        Bus bus100 = new Bus(100);                             //    임의 버스 번호 100번 생성 


        s1.takeBus(bus100);
        s1.showInfo();
        bus100.showInfo();

    }
}



 




   Bus bus100 = new Bus( );     // 공란으로 진행할경우 오류가 발생할수 있습니다. 
                                                    이럴경우 Bus 클래스에 Dufalt값을 설정해줍니다. 


   Bus bus100 = new Bus(100);






package entety;

public class Student{
    public String studentName;
    public int grade;
    public int  money;

    public Student(String studentName, int money) {
        this.studentName = studentName;
        this.money = money;
    }


    public void takeBus(Bus bus) {                   //  Bus bus = Bus bus100     '100' 이 생략되어 있습니다.
        bus.take(1000);                                            // 버스 요금 
        this.money -= 1000;
}

public void  takeSubway(Subway subway) {
        subway.take(1500);                                            // 지하철 요금 
        this.money -= 1500;
}

    public void showInfo() {
        System.out.println(studentName + "님의 남은 돈은" + money + "입니다." );
    }
}



 

 

(2) 생성자 생성방법 

 




package entety;

public class Bus {
    int busNumber;
    int passengerCount;
    int money;


 public Bus(int busNumber) {
        this.busNumber = busNumber;
        }


    public Bus(String lineNumber, int passengerCount, int money) {
        this.busNumber = busNumber;
        this.money = money;
        this.passengerCount = passengerCount;
    }

    public void take(int money) {
        this.money +=money;                                                         // this.money = this.money + money    
        passengerCount++;                                                          // passengerCount + passengerCount +1
    }
    public void showInfo() {
        System.out.println("버스 " + busNumber + "번의 승객은 " passengerCount + "명이고,수입은 "+money + "입니다." );
    }

}







package entety;

public class Subway {
    String lineNumber;
    int passengerCount;
    int money;

    public Subway(String lineNumber) {
        this.lineNumber = lineNumber;
     }

     public Subway(String lineNumber, int passengerCount, int money) {
        this.lineNumber = lineNumber;
        this.passengerCount = passengerCount;
        this.money = money;
    }

      public void take( int money){
            this.money += money;                             // this.money = this.money + money       
            passengerCount ++;                                // passengerCount + passengerCount +1
        }

        public void showInfo() {
            System.out.println(lineNumber + "의 승객은 " + passengerCount + "명이고, 수입은 " + money + "입니다.");
        }
    }



 

 

 

 

 

728x90
반응형
home top bottom
}