CS [개발 지식] 오버로딩과 오버라이딩의 차이

신재원·2023년 1월 26일
0

CS [개발지식]

목록 보기
2/9

오버로딩 (Overloading)

  • 이름은 같지만 시그니처(파라미터 수, 타입) 다른 메소드를 중복으로 선언하는것을 의미한다.

특징
1. 메소드 이름이 같아야한다.
2. 파라미터 갯수가 달라야한다.
3. 파라미터 갯수가 같을경우, 데이터 타입이 달라야한다.

  • 간단히 말해서 오버로딩은 같은 메소드라도 매개변수만 다르면 얼마든지 정의하고 사용할수 있다.
public class Test {
	// test() 호출
    void test() {
        System.out.println("매개변수 업음");
    }
    
	// test에 매개변수 int형 2개 호출
    void test(int a, int b) {
        System.out.println("매개변수 = " + a + "," + "매개변수 = " + b);
    }
    
	// test에 매개변수 double형 1개 호출
    void test(double a) {
        System.out.println("매개변수 = " + a);
    }
}
public class exam {
    public static void main(String[] args) {
        Test test = new Test();
        // test() 호출
        test.test();
        
        // test(int a, int b) 호출
        test.test(100, 200);
        
        // test(double a) 호출
        test.test(12.3);
    }
}
  • 실행 결과
    매개변수 없음
    매개변수 = 100 , 매개변수 = 200
    매개변수 = 12.3
  • 정리
    • 위 코드와 같이 test라는 같은 이름의 메서드를 여러개 정의하고 매개변수만 변경하여 선언했을 때, 호출 매개변수에 따라 매칭되어 해당 함수를 실행시킨다.

오버라이딩 (Overriding)

  • 부모 클래스의 메소드의 동작 방법을 변경 (재정의)하여 우선적으로 사용하는것이다.

특징
1. 오버라이드 하고자 하는 메서드가 상위 클래스에 존재해야 한다.
2. 메서드 이름이 같아야한다.
3. 메서드 리턴형이 같아야한다.
4. 메서드 파라미터 갯수, 파라미터의 자료형이 같아야한다.

public class People {

    public String name;
    public int age;
    public void print(){
        System.out.println("이름은 " + this.name + "이고" + 
        "나이는 " + this.age + "입니다");
    }
}

public class Student extends People{
    String job;

    // print() 메서드 오버라이딩
    public void print(){
        System.out.println("이름은 " + this.name + "이고" + 
        "나이는 " + this.age + "입니다");

        // 새로 추가된 부분
        System.out.println(this.name + "의" + "직업은" +
        this.job + "입니다");
    }


}
public class exam {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "신재원";
        student.age = 24;
        student.age = "개발자";

        // 오버라이딩된 print()호출
        student.print();
    }
}
  • 실행 결과
  • 이름은 신재원이고 나이는 24입니다.
  • 신재원의 직업은 개발자 입니다.
  • 간단히 말해서 상속 관계에 있는 클래스 간에 같은 이름의 메서드를 정의하는 기술이다.
  • 만약 자식 클래스가 부모클래스에서 선언된 것과 같은 메서드를 가질 경우, 메서드 "오버라이딩"이라고한다.
  • 정리
    오버라이딩은 부모로부터 받은 메소드의 로직을 클라이언트에 맞게 변경하는것이다. 객체지향 언어의 특징인 다형성 중 하나이다.

0개의 댓글