- Published on
항해99 플러스 백엔드 코스 6기 언어 사전 스터디 3주차 (4) - 상속, 오버라이딩, 다형성
- Authors
- Name
- Kil Hyeon Jun
항해99 플러스 백엔드 코스 6기 언어 사전 스터디 3주차 - 상속, 오버라이딩, 다형성
1. 상속 (Inheritance)
상속이란?
- 부모 클래스의 필드와 메소드를 자식 클래스가 물려받는 것
- 코드의 재사용성을 높이고, 유지보수를 용이하게 함
상속의 특징
- 자바는 단일 상속만을 지원
- 부모 클래스의 생성자와 초기화 블록은 상속되지 않음
- 부모 클래스의 private 멤버는 상속되지 않음
- 자식 클래스는 부모 클래스의 protected, public 멤버에 접근 가능
상속 관계
extends
키워드를 사용하여 상속 관계를 표현- 부모 클래스:
superclass
,parent class
- 자식 클래스:
subclass
,child class
public class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + "이(가) 먹이를 먹습니다.");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void bark() {
System.out.println(name + "이(가) 짖습니다.");
}
}
클래스간의 관계
is-a
관계: 상속 관계has-a
관계: 포함 관계 (합성, 집합)
단일 상속과 다중 상속
- 자바는 단일 상속만을 지원
- 클래스의 다중 상속은 복잡성을 증가시킬 수 있음
- 다중 상속을 지원하는 언어: C++, Python 등
final 클래스와 final 메소드
final
키워드를 사용하여 변경할 수 없는 클래스와 메소드를 정의final
클래스: 상속할 수 없는 클래스final
메소드: 오버라이딩할 수 없는 메소드
Object 클래스
- 모든 클래스의 최상위 클래스
- 모든 클래스는
Object
클래스를 상속받음 Object
클래스의 메소드를 사용할 수 있음clone()
,equals()
,getClass()
,hashCode()
,toString()
등
2. 오버라이딩 (Overriding)
오버라이딩이란?
- 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것
- 부모 클래스의 메소드 시그니처와 일치해야 함
@Override
어노테이션을 사용하여 오버라이딩을 명시- 접근 제어자를 더 좁은 범위로 변경할 수 없음
- 예외는 부모 클래스의 메소드보다 많이 선언할 수 없음
super와 super()
super
: 부모 클래스의 멤버에 접근할 때 사용super()
: 부모 클래스의 생성자를 호출할 때 사용
public class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + "이(가) 먹이를 먹습니다.");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void eat() {
super.eat();
System.out.println(name + "이(가) 사료를 먹습니다.");
}
}
3. 참조 변수의 타입 변환
자동 타입 변환 (Upcasting)
- 자식 클래스의 인스턴스를 부모 클래스의 참조 변수로 참조할 수 있음
- 부모 클래스의 멤버만 접근 가능
Animal animal = new Dog("멍멍이");
animal.eat(); // "멍멍이이(가) 먹이를 먹습니다."
강제 타입 변환 (Downcasting)
- 부모 클래스의 참조 변수를 자식 클래스의 인스턴스로 변환
- 자동 타입 변환된 참조 변수를 다시 자식 클래스의 참조 변수로 변환
Animal animal = new Dog("멍멍이");
Dog dog = (Dog) animal;
dog.bark(); // "멍멍이이(가) 짖습니다."
4. 다형성 (Polymorphism)
다형성이란?
- 같은 타입이지만 실행 결과가 다양한 객체를 참조할 수 있는 성질
- 부모 클래스의 참조 변수로 자식 클래스의 인스턴스를 참조할 수 있음
- 메소드 오버라이딩을 통해 다양한 동작을 수행
다형성의 장점
- 코드의 유연성을 높임
- 코드의 가독성을 높임
- 코드의 확장성을 높임
instanceof 연산자
- 참조 변수가 참조하는 인스턴스의 실제 타입을 확인
instanceof
연산자를 사용하여 타입을 확인
Animal animal = new Dog("멍멍이");
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.bark();
}
5. 정리
- 상속은 부모 클래스의 필드와 메소드를 자식 클래스가 물려받는 것
- 오버라이딩은 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것
- 다형성은 같은 타입이지만 실행 결과가 다양한 객체를 참조할 수 있는 성질
- 자바는 단일 상속만을 지원하며, 다중 상속은 지원하지 않음
final
키워드를 사용하여 변경할 수 없는 클래스와 메소드를 정의할 수 있음Object
클래스는 모든 클래스의 최상위 클래스이며, 모든 클래스는Object
클래스를 상속받음- 오버라이딩 시
@Override
어노테이션을 사용하여 명시 - 다형성을 통해 코드의 유연성, 가독성, 확장성을 높일 수 있음
instanceof
연산자를 사용하여 참조 변수의 타입을 확인할 수 있음