- LSP (Liskov substitution principle)
자료형 S가 자료형 T의 하위형이라면, 프로그램에서 자료형 T의 객체는 프로그램의 속성을 변경하지 않고 자료형 S의 객체로 교체할 수 있다.
한마디로 객체는 프로그램의 정확성을 지키면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다 라는 말이다.
다형성의 관점에서 보았을 때 하위 클래스는 인터페이스 규약을 전부 지켜야지만 다형성을 지원할 수 있다.
자바에서 자식객체는 부모객체의 모든 속성을 가지고 있으며 부모객체의 확장 버전이기 때문에 가능한 속성이다.
이러한 점 때문에 필자는 상속(inheritance)라는 표현보다 확장(extend)라는 표현을 선호한다.
코드로 예를 들어보자.
public abstract class Car
{
String manufacturer;
String modelName;
public abstract void run();
}
public class ElectricCar extends Car
{
@Override
public void run()
{
System.out.println("전기로 달린다.");
}
}
public class GasolineCar extends Car
{
@Override
public void run()
{
System.out.println("휘발유로 달린다.");
}
}
public class UseCar
{
Car car1 = new ElectricCar();
ElectricCar electricCar = new Car();
}
Car라는 추상 클래스가 있고 이를 구현한 ElectricCar(전기차), GasolineCar(가솔린차)가 있다.
전기차와, 가솔린차는 Car를 상속(확장)하고 있다.
Car를 사용하는 UseCar 클래스를 확인해보면
Car car1 = new ElectricCar()로 car1 인스턴스를 생성하는 것을 확인할 수 있다.
ElectricCar는 Car의 모든 속성을 가지고 있으며 Car를 확장하고 있기때문에 언제든지 하위 타입의 인스턴스로 바꿀 수 있다.
'Java > Methodology' 카테고리의 다른 글
[SOLID] 객체지향 설계 5원칙 - DIP (0) | 2022.01.23 |
---|---|
[SOLID] 객체지향 설계 5원칙 - ISP (0) | 2022.01.23 |
[SOLID] 객체지향 설계 5원칙 - OCP (0) | 2021.06.17 |
[SOLID] 객체지향 설계 5원칙 - SRP (0) | 2021.06.17 |
[OOP] 객체 지향 프로그래밍이란? - 다형성 (0) | 2021.06.17 |