ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA - 오버로딩, 오버라이딩
    CS/JAVA 2024. 6. 4. 01:34

    java에는 오버로딩과 오버라이딩라는 개념이 있다. 개념 자체가 생소하고 이름이 비슷해 어렵지만, 자바에서 아주 기본으로 쓰이고 중요한 개념이니 확실하게 이해해보자!💪

    오버로딩 Overloading

    오버로딩이란, 같은 클래스 내에서 이름은 같지만 인자의 갯수, 형 등이 다른 메서드이다. 

    바로 코드를 보며 알아봐보자!

    아래 클래스에서 세개의 이름이 같은 메서드를 만들고, main 메서드에서 오버로딩 메서드를 호출했다.

    메서드를 호출할 때 메서드의 이름이 같은데도 각각 다른 결과가 나왔다.

    아래 클래스에서 이름이 같은 세 개의 메서드들을 오버로딩이라한다.

    public class Calculate {
        int num01;
        int num02;
        int num03;
        
        // 1번 메서드
        int calNum(int n1, int n2){              
            return n1+n2;
        }
        // 2번 메서드
        int calNum(int n1, int n2, int n3){
            return n1 + n2 + n3;
        }
        // 3번 메서드
        int calNum(int n1, int n2, String str){
            System.out.println(str);
            return n1+n2;
        }
    }
    public class CalcMain {
        public static void main(String[] args) {
            Calculate calc = new Calculate();
    
            int result01 = calc.calNum(10,20);
            System.out.println("result : "+result01);
    
            int result02 = calc.calNum(10,20,30);
            System.out.println("result : "+result02);
    
            int result03 = calc.calNum(10,20,"계산해봅시다!");
            System.out.println("result : "+result03);
        }
    }
    
    // 실행 결과 : 
    // result : 30
    // result : 60
    // 계산해봅시다!
    // result : 30

     

    메서드를 호출할 때 이름이 같은데 어떤 메서드를 실행해야하는지 어떻게 아는 것일까?

    인자로 구분하면된다. 

    두 개의 int형 인자를 넣으면 1번 메서드가, 세 개의 int형 인자를 넣으면 2번 메서드가,두 개의 int형 인자와 한 개의 String인자를 넣으면 3번 메서드가 실행되는 것이다. 

     

    오버로딩은 생성자에서도 많이 사용된다. 

    name, age, classNum 정보를 담을 수 있는 Student 클래스가 있을 때 한 개 이상의 생성자를 만들 수 있다.

    학생 정보를 저장하는데, 전학 올 예정인 학생이라면 반이 아직 안정해졌을 수도 있다! 

    그럴때 classNum까지 입력해야하는 생성자를 사용하기 보다는 name과 age만 입력하면 되는 생성자를 사용하면 된다.

    public class Student {
        String name;
        Integer age;
        Integer classNum;
    
        public Student(String name, Integer age, Integer classNum) {
            this.name = name;
            this.age = age;
            this.classNum = classNum;
        }
        public Student(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    }
    public class StudentMain {
        public static void main(String[] args) {
            Student student01 = new Student("철수",20, 1);
    
            Student student02 = new Student("영수",25);
        }
    }

     

    오버라이딩 Overriding

    오버라이딩이란 상속 관계에서, 자식 클래스에서 부모 클래스의 메서드와 같은 이름의 메서드를 다시 만드는 것이다. 

    부모에 있는 속성들을 상속받고 싶지만, 그 중 특정 메서드만 기능을 바꾸고싶을 때 사용할 수 있다. 

    public class Parent {
        int sum(int num01, int num02){
            return num01 + num02;
        }
    }
    public class Child extends Parent{
        int sum(int num01, int num02){
            return num01 * num02;
        }
    }
    public class Main {
        public static void main(String[] args) {
            Child child = new Child();
            Integer result = child.sum(10,20);
            System.out.println(result);
        }
    }
    
    // 출력 결과 : 
    // 200

     

    Child는 Parent를 상속받아 num01 + num02 결과를 반환하는 메서드를 가지고 있다. 하지만 이 sum과 같은 이름의 메서드를 다시 구현해 사용할 수 있다. 

    위의 코드와 같이 오버라이딩한 후 sum 메서드를 실행하면, Parent 클래스의 sum 메서드의 결과(30)가 아닌, Child 클래스의 sum 메서드의 결과인 200이 나온다.

Designed by Tistory.