반응형
자바에서의 상속, 오버로딩, 오버라이딩: 개념과 활용
자바(Java) 프로그래밍에서 상속(Inheritance), 오버로딩(Overloading), **오버라이딩(Overriding)**은 객체지향 프로그래밍의 핵심 개념으로 코드의 재사용성과 확장성을 높이는 데 중요한 역할을 합니다. 이 글에서는 각 개념을 설명하고 자바에서 이를 구현하는 방법과 활용 예시를 살펴보겠습니다.
상속(Inheritance)이란?
상속은 기존 클래스(부모 클래스 또는 슈퍼 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스 또는 서브 클래스)에서 물려받는 기능을 말합니다. 이를 통해 코드의 재사용성을 높이고, 계층 구조를 통해 클래스를 체계적으로 관리할 수 있습니다.
상속의 특징:
extends
키워드 사용: 자식 클래스는extends
키워드를 사용해 부모 클래스를 상속받습니다.- 다중 상속 불가: 자바는 단일 상속만 지원합니다(한 클래스는 하나의 부모만 가질 수 있음).
super
키워드: 부모 클래스의 멤버를 호출하거나 부모 생성자를 호출할 때 사용합니다.
예제:
class Animal {
void eat() {
System.out.println("동물이 먹고 있습니다.");
}
}
class Dog extends Animal {
void bark() {
System.out.println("개가 짖고 있습니다.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 부모 클래스의 메서드 호출
dog.bark(); // 자식 클래스의 메서드 호출
}
}
출력 결과:
동물이 먹고 있습니다.
개가 짖고 있습니다.
오버로딩(Overloading)이란?
오버로딩은 같은 이름의 메서드를 매개변수의 개수나 타입을 다르게 하여 정의하는 것을 말합니다. 이는 컴파일 시간에 결정되며, 메서드의 다형성을 구현합니다.
특징:
- 메서드 이름 동일
- 매개변수의 개수 또는 타입 다름
- 반환 타입은 상관없음
예제:
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(10, 20)); // 두 정수 더하기
System.out.println(calc.add(10.5, 20.5)); // 두 실수 더하기
System.out.println(calc.add(10, 20, 30)); // 세 정수 더하기
}
}
출력 결과:
30
31.0
60
오버라이딩(Overriding)이란?
오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것을 말합니다. 이는 런타임에 결정되며, 메서드의 동작을 변경할 수 있습니다.
특징:
- 메서드 이름, 매개변수, 반환 타입 동일
- 접근 제어자 제한 완화 가능 (예:
protected
→public
) @Override
어노테이션 사용 권장: 컴파일러가 오버라이딩 여부를 확인합니다.
예제:
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("개가 멍멍 짖습니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 업캐스팅
animal.sound(); // 오버라이딩된 메서드 호출
}
}
출력 결과:
개가 멍멍 짖습니다.
상속에서 오버로딩과 오버라이딩의 활용
1. 오버로딩과 상속
자식 클래스는 부모 클래스의 메서드를 오버로딩할 수 있습니다.
class Parent {
void display(String message) {
System.out.println("부모 클래스: " + message);
}
}
class Child extends Parent {
void display(String message, int count) {
System.out.println("자식 클래스: " + message + ", 반복 횟수: " + count);
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display("안녕하세요"); // 부모 메서드 호출
child.display("반가워요", 3); // 자식 메서드 호출
}
}
출력 결과:
부모 클래스: 안녕하세요
자식 클래스: 반가워요, 반복 횟수: 3
2. 오버라이딩과 상속
오버라이딩을 통해 자식 클래스가 부모 클래스의 동작을 커스터마이징할 수 있습니다.
class Vehicle {
void run() {
System.out.println("차량이 달립니다.");
}
}
class Car extends Vehicle {
@Override
void run() {
System.out.println("자동차가 고속도로를 달립니다.");
}
}
public class Main {
public static void main(String[] args) {
Vehicle vehicle = new Car(); // 다형성
vehicle.run();
}
}
출력 결과:
자동차가 고속도로를 달립니다.
마치며
상속, 오버로딩, 오버라이딩은 자바의 객체지향 프로그래밍에서 중요한 역할을 합니다. 상속을 통해 코드의 재사용성을 높이고, 오버로딩과 오버라이딩으로 메서드의 다형성을 구현하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. 이를 효과적으로 활용해 더 나은 자바 프로그램을 만들어 보세요!
반응형
'개발 부트캠프 > 백엔드' 카테고리의 다른 글
[Java] 싱글톤 패턴(Singleton Pattern) (1) | 2025.01.04 |
---|---|
[Java] 디자인 패턴 (0) | 2025.01.04 |
[Java] static (0) | 2025.01.03 |
[Java] 패키지 & 접근 제어자 (0) | 2025.01.03 |
[Java] 생성자 (0) | 2025.01.03 |