Java 클래스 상속

Eddie·2025년 5월 29일

Java

목록 보기
7/8

오버로딩이란?

  • 한 클래스 내에서 같은 이름의 메서드를
    파라미터와 처리동작, 리턴값을 다르게 하여 여러 번 정의하는 것

오버로딩을 설명 하기위해 예제를 하나 만들겠습니다.
그러기 위해서는 먼저 class를 하나 생성해줍니다.

public class Calc {
    int plus(int a, int b){
        return (a+b);
    }

    int minus(int a, int b){
        return (a-b);
    }
}

그리고 위의 코드를 main method에 클래스를 불러보겠습니다.

public class App {
    public static void main(String[] args) throws Exception {
        Calc calc = new Calc();

        calc.plus(3, 2); // 예) a값 3 ,b값 2
        System.out.println(calc.plus(3, 2));    // 출력값 5
        System.out.println(calc.minus(3, 2));   // 출력값 1
    }
}

위의 코드들은 간단한 예제일 뿐 우리는 클래스를 만들 때
기능을 더 명확하고 자세히 포함 시켜줘야 합니다.
따라서 조금 더 효율적으로 작성해보겠습니다.

public class Calc {
    void plus(int a, int b){
        int k = a + b;
        System.out.println(k);
    }

    void plus(double a, double b){
        double k = a + b;
        System.out.println(k);
    }

    void minus(int a, int b){
        int k = a-b;
        System.out.println(k);
    }

    void minus(double a, double b){
        double k = a-b;
        System.out.println(k);
    }
}

위처럼 클래스에 기능을 다 집어 넣으면 조금 더 효율적으로 처리를 할 수 있습니다.

그리고 main method도 고쳐 보겠습니다.

public class App {
    public static void main(String[] args) throws Exception {
        Calc calc = new Calc();

        calc.plus(3, 2); // 예) a값 3 ,b값 2 /출력값 5
        calc.minus(3, 2); // 예) a값 3 ,b값 2 /출력값 1
        calc.plus(3.2, 2.8); // 예) a값 3 ,b값 2 /출력값 6
        calc.minus(3.2, 2.1); // 예) a값 3 ,b값 2 /출력값 1.1
    }
}

이렇게 사용할 수가 있습니다. 다만 여기서 중요한 점은 기능이 겹치는게 많습니다.
즉, 정수를 plus하냐 minus하냐 차이일 뿐 기능은 같기 때문에
하나의 메서드를 통해 많은 기능을 집어넣는 것오버로딩이라고 하는 것 이죠.

자 여기서 생성자에 대해 설명 해보겠습니다.

public class Calc {
    
    int x,y;

    Calc(){
        x = 3;
        y = 2;
    }

    void plus(){
        System.out.println(x + y);
    }


     void minus(){
        System.out.println(x - y);
    }
}

생성자의 기본 구조 입니다. 이렇게 하면 파라미터 값을 넣을 필요 없이 알아서 기능을 수행 해줄 수 있는 것이죠.

그리고 아래의 내용처럼 메인 메서드에는 그저 불러오기만 하면 됩니다.

public class App {
    public static void main(String[] args) throws Exception {
        Calc calc = new Calc();

        calc.plus();
        calc.minus();
    }
}

결론적으로 말하면 객체 생성과 동시에 데이터 값을 불러올 수 있다 라는 말입니다.

this란? 외부에서 불러오는 파라미터 값을 내부의 변수명과 같게 불러오고 싶을 때 사용할 수 있습니다.

void plus(int x, int y){
        this.x = x;
        this.y = y;
        int k = x + y;
        System.out.println(k);
    }

이런 식으로 int a와 int b가 아닌int x, int y로 받아서 this를 활용해 변수명을 최적화 할 수 있는 것이죠.

  • 오버라이딩 vs 오버로딩

오버라이딩 : 슈퍼 클래스를 상속받은 서브 클래스에서 슈퍼 클래스의 메서드다시 정의하는 것
오버로딩 : 하나의 클래스 내에서 동일한 이름의 메서드파라미터, 리턴 타입 등을 다르게 하여 여러 개 정의하는 것

profile
기초부터 차근차근 달려볼까요 :)

0개의 댓글