상속
상속(Inheritance) 이란?
기존 클래스를 확장하여 새로운 클래스를 만드는 개념
코드 재사용성 증가 및 객체 간 계층 구조 형성
상속의 기본 구조
// 부모 클래스 (Super Class)
class Animal {
String name;
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// 자식 클래스 (Sub Class)
class Dog extends Animal {
void makeSound() { // 메서드 오버라이딩 (Overriding)
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.name = "바둑이";
myDog.makeSound(); // 출력: 멍멍!
}
}
➡︎ Dog 클래스는 Animal 클래스를 상속
➡︎ makeSound() 메서드를 오버라이딩(Overriding) 하여 고유 기능 구현
상속의 장단점
장점
- 코드 재사용성 증가: 기본 기능을 부모 클래스에 정의
- 유지보수 용이: 공통 로직을 부모 클래스에서 관리
단점
- 상속 구조가 깊어질수록 의존성 증가 ➔ 유지보수 어려움
- 부모 클래스가 변경되면 자식 클래스에 영향을 미칠 위험
➡︎ 상속보다 "조합(Composition)" 을 사용하는 것이 더 유리한 경우도 많음!
다형성
다형성(Polymorphism) 이란?
하나의 인터페이스로 여러 구현을 처리할 수 있는 개념
오버라이딩(Overriding) 과 오버로딩(Overloading) 이 대표적인 방식
다형성 예제
class Animal {
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Cat extends Animal {
void makeSound() { // 오버라이딩
System.out.println("야옹~");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Cat(); // 부모 타입으로 자식 객체 참조
myAnimal.makeSound(); // 출력: 야옹~
}
}
➡︎ Animal myAnimal = new Cat(); ➔ 부모 타입을 사용하여 다양한 객체를 다룰 수 있음
오버로딩과 오버라이딩 차이
- 오버로딩(Overloading): 같은 클래스에서 메서드 이름이 같고 매개변수가 다름 ex) void add(int a), void add(double a)
- 오버라이딩(Overriding): 부모 클래스의 메서드를 재정의 ex) @Override void makeSound()
인터페이스 vs 추상 클래스
인터페이스(Interface) 란?
메서드의 동작만 정의하고, 구현은 하지 않음
다중 구현 가능 (implements)
인터페이스 예제
interface Animal {
void makeSound(); // 구현 X (추상 메서드)
}
class Dog implements Animal {
public void makeSound() {
System.out.println("멍멍!");
}
}
➡︎ 다양한 객체가 동일한 동작을 할 때 사용!
추상 클래스(Abstract Class) 란?
일부 구현이 포함된 클래스: 추상 메서드 + 일반 메서드 포함 가능
단일 상속만 가능 (extends)
추상 클래스 예제
abstract class Animal {
abstract void makeSound(); // 추상 메서드 (구현 X)
void sleep() { // 일반 메서드 (구현 O)
System.out.println("동물이 잠을 잡니다.");
}
}
➡︎ 공통 기능을 제공하면서 일부만 구현이 필요할 때 사용!
주요 포인트
- 상속과 다형성의 차이를 명확히 알아야 함!
- 상속: 부모 클래스를 기반으로 새로운 클래스를 확장하는 방식, 코드 재사용성 증가, 깊은 상속 구조는 유지보수 어려움
- 다형성: 부모 타입으로 여러 자식 객체를 다룰 수 있는 개념, 메서드 오버라이딩을 활용하여 객체마다 다른 동작 수행 가능
- 인터페이스와 추상 클래스의 차이
- 인터페이스: 행동만 정의하고 구현은 하지 않음, 다중 구현 가능
- 추상 클래스: 일부 구현이 포함될 수 있음, 단일 상속만 가능
'백엔드 기본 개념 정리 > 객체지향 프로그래밍 (OOP)' 카테고리의 다른 글
객체지향의 한계와 대안, 구성(Composition) (0) | 2025.03.10 |
---|---|
의존성(Dependency) 과 싱글톤(Singleton) (0) | 2025.03.10 |
객체지향 설계 원리(SOLID) & 추상화(Abstraction) (1) | 2025.03.07 |
객체지향의 기본 개념(클래스, 객체, 캡슐화) (0) | 2025.03.05 |