5. 객체지향 프로그래밍 (오버로딩, 오버라이딩)

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체들의 집합으로 모델링하고, 객체들 간의 상호작용을 중심으로 프로그래밍하는 개발 방법론입니다. Java는 객체지향 프로그래밍 언어로서, OOP의 개념을 지원하고 있습니다.

오버로딩(Overloading)과 오버라이딩(Overriding)은 객체지향 프로그래밍에서 중요한 개념입니다. 둘 다 다형성(Polymorphism)을 구현하기 위한 메커니즘입니다. 각각의 개념을 예시와 함께 설명해보겠습니다.

1. 오버로딩 (Overloading)

  • 오버로딩은 같은 이름의 메서드를 여러 개 정의하고, 매개변수의 유형, 개수, 순서를 다르게하여 다양한 매개변수 조합을 처리할 수 있도록 하는 것입니다.

  • 메서드 오버로딩은 메서드 이름이 동일하지만, 매개변수의 시그니처(매개변수의 유형, 개수, 순서)가 다른 여러 개의 메서드를 정의하는 것을 말합니다.

  • 예시:

    public class Calculator {
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    
        public int add(int a, int b, int c) {
            return a + b + c;
        }
    }
    
    Calculator calculator = new Calculator();
    int result1 = calculator.add(5, 10);           // add(int, int) 메서드 호출
    double result2 = calculator.add(3.14, 2.7);    // add(double, double) 메서드 호출
    int result3 = calculator.add(1, 2, 3);         // add(int, int, int) 메서드 호출

    위의 코드는 Calculator 클래스를 정의하고, add 메서드를 오버로딩하여 다양한 매개변수 조합을 처리할 수 있도록 구현한 예시입니다.

    1. add(int a, int b) 메서드:

      • 두 개의 정수형 매개변수 a와 b를 받아서 덧셈 연산을 수행하고 결과를 반환합니다.

      • 예를 들어, calculator.add(5, 10)은 매개변수로 5와 10을 전달하여 덧셈 연산을 수행하고 결과인 15를 반환합니다.

    2. add(double a, double b) 메서드:

      • 두 개의 실수형 매개변수 a와 b를 받아서 덧셈 연산을 수행하고 결과를 반환합니다.

      • 예를 들어, calculator.add(3.14, 2.7)은 매개변수로 3.14와 2.7을 전달하여 덧셈 연산을 수행하고 결과인 5.84를 반환합니다.

    3. add(int a, int b, int c) 메서드:

      • 세 개의 정수형 매개변수 a, b, c를 받아서 덧셈 연산을 수행하고 결과를 반환합니다.

      • 예를 들어, calculator.add(1, 2, 3)은 매개변수로 1, 2, 3을 전달하여 덧셈 연산을 수행하고 결과인 6을 반환합니다.

2. 오버라이딩 (Overriding)

  • 오버라이딩은 상위 클래스에서 이미 정의된 메서드를 하위 클래스에서 재정의하는 것입니다. 즉, 상속 관계에 있는 클래스 간에 같은 이름의 메서드를 다시 구현하는 것입니다.

  • 하위 클래스에서 오버라이딩된 메서드는 상위 클래스의 동일한 이름, 반환 유형, 매개변수를 가져야 합니다.

  • 예시:

    public class Animal {
        public void makeSound() {
            System.out.println("동물이 소리를 낸다.");
        }
    }
    
    public class Cat extends Animal {
        @Override
        public void makeSound() {
            System.out.println("야옹~");
        }
    }
    
    Animal animal = new Animal();
    animal.makeSound();     // "동물이 소리를 낸다." 출력
    
    Cat cat = new Cat();
    cat.makeSound();        // "야옹~" 출력
  • 위의 예시에서 Cat 클래스는 Animal 클래스를 상속받고, makeSound() 메서드를 오버라이딩하여 재정의했습니다. Cat 클래스의 makeSound() 메서드는 Animal 클래스의 동일한 이름의 메서드를 대체하고, "야옹~"이라는 다른 동작을 수행합니다.

오버로딩과 오버라이딩은 객체지향 프로그래밍의 다형성을 구현하기 위해 사용됩니다. 오버로딩은 메서드 호출 시 다양한 매개변수 조합을 지원하여 편의성을 높이고, 오버라이딩은 상속 관계에서 하위 클래스에서 상위 클래스의 메서드를 재정의하여 다른 동작을 수행할 수 있습니다.

Last updated