Paradox Simulation

728x90
반응형

안녕하세요, 이번에는 객체지향 프로그래밍의 상속과 다형성 개념에 대해 알아보겠습니다.

반응형

상속

상속(Inheritance)은 객체지향 프로그래밍에서 기존 클래스를 기반으로 새로운 클래스를 만드는 개념입니다.

상속을 통해 새로운 클래스는 기존 클래스의 속성과 메서드를 물려받아 사용할 수 있습니다.

이러한 상속을 통해 기존 클래스의 코드를 재사용하고, 중복 코드를 줄일 수 있습니다.

예시를 통해 상속 개념을 살펴보겠습니다.

public class Animal {
    private String name;
    private int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void move() {
        System.out.println("이동합니다.");
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Dog extends Animal {
    public Dog(String name, int age) {
        super(name, age);
    }

    public void bark() {
        System.out.println("멍멍");
    }
}

위 코드에서는 Animal 클래스를 상속받아 Dog 클래스를 정의하고 있습니다.

Dog 클래스는 Animal 클래스의 속성과 메서드를 물려받아 사용할 수 있습니다.

Dog 클래스에서는 bark() 메서드를 추가하여, 개가 짖는 기능을 추가하고 있습니다.

 

다형성

다형성(Polymorphism)은 같은 타입이지만 서로 다른 객체를 참조할 수 있는 개념입니다.

다형성을 활용하면 하나의 변수나 메서드가 다양한 객체를 다룰 수 있어 코드의 유연성과 확장성을 높일 수 있습니다.

 

예시를 통해 다형성 개념을 살펴보겠습니다.

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Animal("동물1", 10);
        Animal animal2 = new Dog("개1", 3);

        animal1.move();  // "이동합니다." 출력
        animal2.move();  // "걷습니다." 출력
        // animal2.bark();  // 컴파일 에러 발생
    }
}

위 코드에서는 Animal 클래스와 Dog 클래스를 사용하여 객체를 생성하고 있습니다.

Main 클래스에서는 다형성을 활용하여, animal1 변수와 animal2 변수가 다른 객체를 참조하고 있습니다.

animal1 변수는 Animal 클래스의 인스턴스를 참조하고 있으며, animal2 변수는 Dog 클래스의 인스턴스를 참조하고 있습니다.

이러한 다형성을 활용하여, animal1.move() 메서드와 animal2.move() 메서드가 각각 다른 동작을 수행할 수 있습니다.

 

하지만, animal2 변수가 Dog 클래스의 인스턴스를 참조하고 있음에도 불구하고, animal2.bark() 메서드를 호출하면 컴파일 에러가 발생합니다.

이는 animal2 변수가 Animal 타입으로 선언되어 있기 때문에, Dog 클래스에서 추가한 bark() 메서드를 호출할 수 없기 때문입니다.

 

오버라이딩과 오버로딩

상속을 통해 자식 클래스에서 부모 클래스의 메서드를 재정의하는 것을 오버라이딩(Overriding)이라고 합니다.

오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 덮어쓰거나 확장할 수 있습니다.

 

public class Animal {
    // ...

    public void move() {
        System.out.println("이동합니다.");
    }
}

public class Dog extends Animal {
    // ...

    @Override
    public void move() {
        System.out.println("걷습니다.");
    }
}

위 코드에서는 Animal 클래스의 move() 메서드를 Dog 클래스에서 오버라이딩하여, "이동합니다." 대신 "걷습니다." 라는 메시지를 출력하도록 변경하고 있습니다.

메서드 이름은 같지만 매개변수의 타입, 개수, 순서가 다른 것을 오버로딩(Overloading)이라고 합니다. 오버로딩을 통해 같은 이름의 메서드를 다양한 매개변수를 사용하여 정의할 수 있습니다.

public class Animal {
    // ...

    public void move() {
        System.out.println("이동합니다.");
    }

    public void move(int distance) {
        System.out.println(distance + "m 이동합니다.");
    }
}

위 코드에서는 Animal 클래스에 move() 메서드와 move(int distance) 메서드가 오버로딩되어 정의되어 있습니다.

move() 메서드는 인자를 사용하지 않는 기본 메서드이고, move(int distance) 메서드는 거리를 인자로 받아 거리만큼 이동하는 메서드입니다.

 

마무리

이번 글에서는 객체지향 프로그래밍의 상속과 다형성 개념에 대해 알아보았습니다.

상속을 통해 기존 클래스의 속성과 메서드를 물려받아 새로운 클래스를 만들 수 있으며, 다형성을 통해 같은 타입이지만 서로 다른 객체를 다룰 수 있습니다.

또한, 오버라이딩과 오버로딩을 통해 메서드를 재정의하거나 다양한 매개변수를 사용하여 정의할 수 있습니다.
다음 글에서는 추상화와 인터페이스의 개념에 대해 알아보겠습니다.

728x90
반응형
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
250x250