-
자바 - LSP (Liskov Substitution Principle, 리스코프 치환 원칙)Java 2023. 11. 22. 22:12
핵심개념: '리스코프 치환 원칙(Liskov Substitution Principle, LSP)은 서브타입은 언제나 기반이 되는 타입으로 교체될 수 있어야 한다는 원칙입니다.'
리스코프 치환 원칙(Liskov Substitution Principle, LSP)은 상속 관계에 있는 클래스들 사이에서 이루어져야 하는 행동의 규약을 정의합니다. 이 원칙은 상속을 사용할 때 부모 클래스와 자식 클래스 사이의 관계를 규정합니다. 기본 클래스가 들어갈 자리에 하위 클래스를 넣어도 프로그램이 정상적으로 작동해야 한다는 원칙입니다.
자세한 설명:
LSP는 하위 타입이 상위 타입의 역할을 완전히 대체할 수 있어야 함을 의미합니다. 이는 상위 타입의 인스턴스를 하위 타입의 인스턴스로 대체해도 프로그램의 의미가 변경되지 않아야 함을 의미합니다.
이 원칙을 따르면, 코드의 재사용성과 유지보수성이 향상됩니다. 또한, 다형성을 안전하게 사용할 수 있으며, 클래스 간의 결합도를 줄일 수 있습니다.
예시:
예를 들어, '동물'이라는 상위 클래스가 있고, '개'와 '고양이'라는 하위 클래스가 있다고 가정해봅시다. 이 때 '동물' 클래스에는 '울다'라는 메소드가 있고, '개'와 '고양이' 클래스도 이 메소드를 오버라이드합니다.
이 경우 '동물' 타입의 객체가 들어갈 자리에 '개' 또는 '고양이' 타입의 객체를 넣어도 프로그램이 정상적으로 작동해야 합니다. 즉, '동물'이 '울다'라는 행동을 할 때 '개'와 '고양이'도 '울다'라는 같은 행동을 해야합니다.
샘플 코드:
class Animal { void cry() { ... } } class Dog extends Animal { @Override void cry() { ... } // '울다' 행동을 오버라이드 } class Cat extends Animal { @Override void cry() { ... } // '울다' 행동을 오버라이드 } public static void main(String[] args) { Animal animal = new Dog(); animal.cry(); // '개' 타입의 객체로 '울다' 메소드 실행 animal = new Cat(); animal.cry(); // '고양이' 타입의 객체로 '울다' 메소드 실행 }
이처럼 리스코프 치환 원칙을 이해하고 적용하면, 상속과 다형성을 보다 안전하게 사용할 수 있습니다.
'Java' 카테고리의 다른 글
자바 - DIP (Dependency Inversion Principle, 의존 관계 역전 원칙) (0) 2023.11.22 자바 - ISP (Interface Segregation Principle, 인터페이스 분리 원칙) (1) 2023.11.22 자바 - SRP (Single Responsibility Principle, 단일책임원칙) (0) 2023.11.22 자바 - OCP (Open Closed Principle / 개방-폐쇄원칙) (0) 2023.11.22 BufferedReader, BufferedWriter (0) 2021.05.21