LSP, OCP

yshjft·2022년 4월 2일
0

Java, OOP

목록 보기
8/27

틀린 내용이 있을 수도 있습니다!

LSP, 리스코프 치환 원칙

“리스코프 치환 원칙은 기능의 명세(또는 계약)에 대한 내용이다. 명시된 명세에서 벗어난 기능을 수행하거나, 값을 리턴하거나, 익셉션을 발생하는 것이 흔한 위반 사례이다.”

  • 상위 타입의 객체를 하위 객체로 바꾸어도 정상적으로 동작해야한다
    여기서 "정상적으로 동작해야한다"단순히 메서드를 사용할 수 있느냐 없느냐가 아니라 상위 객체에서 의도한데로 작동할 수 있는가를 의미한다.

  • 상위 객체와 하위 객체의 행위가 일관성이 있어야 한다
    상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다. 상위 타입에서 정한 명세를 하위 타입에서도 그대로 지킬 수 있을 때 상속을 해야 한다. 즉, 상속을 할 경우 일반 메서드를 오버라이드하게 되면 이는 LSP를 어기게 된다.

  • 예외 처리 역시 고려해야 한다
    인터페이스를 구현하는 모든 클래스가 특정한 Exception이 발생하는지 또한 LSP와 관련된 고려 사항이다.

  • LSP는 polymorphism에 대한 원칙을 제공한다

OCP, 개방 폐쇄 원칙

  • 변경에는 닫혀 있고 확장에는 열려 있어야한다는 원칙이다.
    기능을 변경하거나 확장할 수 있더라도 기능을 사용하는 코드에 영향을 주어서는 안된다. 이를 위해서는 확장되는 기능 부분을 추상화 해야한다.

  • OCP는 호출될 때 polymorphism이 일어난다

OCP, LSP

위의 내용을 통해서 OCP와 LSP가 밀접한 관련이 있음을 알 수 있었다.

  • LSP가 위반되면 OCP도 위반된다.
    LSP를 위반하면 서브타입이 추가될 때 마다 클라이언트들이 수정되어야 한다.

  • Instanceof/downcasting LSP와 OCP 위반 증상
    정확한 타입이 무엇인지 알아야하는 상황이 와서는 안된다. 다형성의 의미가 없어진다.

참고 자료

profile
꾸준히 나아가자 🐢

0개의 댓글