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