상속과 다형성

 

상속(Inheritance)과 다형성(Polymorphism)은 객체지향 프로그래밍의 중요한 개념으로, 코드의 재사용성과 유지보수성을 높이는 데 도움이 됩니다.

1. 상속(Inheritance)

상속은 기존 클래스의 속성과 메소드를 새로운 클래스에서 물려받는 것을 말합니다. 상속을 통해 코드 중복을 줄이고, 계층 구조를 형성할 수 있습니다. Java에서는 extends 키워드를 사용하여 상속을 구현합니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Animal {
    protected String name;
    public void eat() {
        System.out.println(name + ” is eating.”);
    }
}
public class Dog extends Animal {
    public void bark() {
        System.out.println(name + ” is barking.”);
    }
}
Dog dog = new Dog();
dog.name = “Buddy”;
dog.eat();  // Output: Buddy is eating.
dog.bark(); // Output: Buddy is barking.
cs

2. 메소드 오버라이딩(Method Overriding)

메소드 오버라이딩은 상위 클래스에 정의된 메소드를 하위 클래스에서 재정의하는 것을 말합니다. 오버라이딩된 메소드는 상위 클래스의 메소드와 동일한 시그니처(메소드 이름, 매개변수 타입, 개수)를 가져야 합니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Animal {
    public void makeSound() {
        System.out.println(“Animal is making a sound.”);
    }
}
public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println(“Meow!”);
    }
}
Animal animal = new Animal();
animal.makeSound(); // Output: Animal is making a sound.
Cat cat = new Cat();
cat.makeSound();    // Output: Meow!
cs

3. 다형성(Polymorphism)

다형성은 하나의 객체가 여러 가지 형태를 가질 수 있는 능력을 말합니다. 상속과 메소드 오버라이딩을 통해 다형성을 구현할 수 있습니다. 다형성을 활용하면 코드의 유연성과 확장성을 높일 수 있습니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class Shape {
    public double getArea() {
        return 0;
    }
}
public class Rectangle extends Shape {
    private double width;
    private double height;
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    @Override
    public double getArea() {
        return width * height;
    }
}
public class Circle extends Shape {
    private double radius;
    public Circle(double radius) {
        this.radius = radius;
    }
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}
Shape[] shapes = new Shape[2];
shapes[0= new Rectangle(45);
shapes[1= new Circle(3);
for (Shape shape : shapes) {
    System.out.println(“Area: “ + shape.getArea());
}
cs

4. super 키워드

super 키워드는 상위 클래스의 멤버(필드, 메소드, 생성자)를 참조하는 데 사용됩니다. 주로 하위 클래스에서 상위 클래스의 필드나 메소드에 접근하거나, 상위 클래스의 생성자를 호출할 때 사용합니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Vehicle {
    protected String brand;
    public Vehicle(String brand) {
        this.brand = brand;
    }
}
public class Car extends Vehicle {
    private int numberOfDoors;
    public Car(String brand, int numberOfDoors) {
        super(brand);
        this.numberOfDoors = numberOfDoors;
    }
}
cs

5. final 키워드

final 키워드는 클래스, 메소드, 변수를 한 번만 할당할 수 있도록 제한합니다. final 클래스는 상속될 수 없고, final 메소드는 오버라이딩될 수 없으며, final 변수는 값이 변경될 수 없습니다.

예제 코드

1
2
3
4
5
6
7
public final class Math {
    public static final double PI = 3.14159265359;
    public static int abs(int x) {
        return (x < 0) ? x : x;
    }
}
cs

 

상속과 다형성은 객체지향 프로그래밍의 핵심 개념으로, 이를 효과적으로 활용하면 코드의 재사용성과 유지보수성을 높일 수 있습니다. 상속을 통해 코드 중복을 줄이고, 다형성을 통해 유연하고 확장 가능한 프로그램을 설계할 수 있습니다.

참고사이트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다