객체지향 원리: SOLID(솔리드)

0

CS Note

목록 보기
7/7
  • SRP(Single Responsibility Principle): 단일 책임 원칙
  • OCP(Open Closed Priciple): 개방 폐쇄 원칙
  • LSP(Listov Substitution Priciple): 리스코프 치환 원칙
  • ISP(Interface Segregation Principle): 인터페이스 분리 원칙
  • DIP(Dependency Inversion Principle): 의존 역전 원칙

SRP(Single Responsibility Principle): 단일 책임 원칙이란?


하나의 클래스는 하나의 책임만이 가져야 한다.
이해하기 쉽게 얘기하자면 하나의 클래스는 하나의 기능을 수행해야 한다로 봐도 될 듯!

변경사항으로 인한 연쇄작용에서 조금 더 자유로워질 수 있도록!
기능을 적절히 분배함으로써 유지보수가 더 편리해질 수 있도록!

ex) car라는 크고 복잡한 클래스를 기능에 따라 seat, wheel, heater등등 여러 객체를 의존함으로써 쪼개서쪼개서 하나의 클래스는 하나의 기능만 수행할 수 있도록!


OCP(Open Closed Priciple): 개방 폐쇄 원칙이란?

기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계해야한다.확장(추가)에서 대해서는 개방적(open), 변경(수정)에서 대해서는 폐쇄적(close)!

방법은 추상화(인터페이스, 추상클래스)!
이 또한 역시 편리한 유지보수를 위함.


LSP(Listov Substitution Principle): 리스코프 치환 원칙이란?

자식 타입은 언제나 부모타입으로 교체할 수 있어야한다.
즉, 부모 클래스의 객체를 사용하는 곳에서 자식클래스의 객체로 대신 사용했을 때도 코드는 원래대로 작동되어야 한다는 뜻!

LSP는 다형성을 규칙으로 문서화한 것;

*다형성을 구현하는 방법: “오버로딩”, “오버라이딩”, “함수형 인터페이스”

대표적으로 LSP를 적용한 예는 컬렉션 프레임 워크!
쉽게 이해할 수 있는 예는 ↓

참고블로그: https://devlog-wjdrbs96.tistory.com/380


ISP(Interface Segregation Principle): 인터페이스 분리 원칙이란?

하나의 일반적인(범용적인) 인터페이스보다는 여러개의 구체적인 인터페이스를 사용해라!

예를들어 범용적으로 짖기와 걷기 들어가져있는 동물이라는 인터페이스를 구현했는데,고양이라는 클래스는 짖지를 못하는데 억지로라도 사용하지 않는 기능을 구현해야되는 상황이오니 동물이라는 인터페이스를 사용에 맞게 잘게 잘게 분리시키는 것

즉, 클라이언트의 목적과 용도에 적합한 인터페이스만을 사용!


DIP(Dependency Inversion Principle): 의존 역전 원칙이란?

의존관계일 때 될 수 있으면 좀 더 상위개념, 더 포괄적인(추상화된) 개념을 사용해라!
(그 class를 직접 참조하는 것이 아니라)

​예를 들어 자동차가 구체적인 일반타이어 인터페이스에 의존하게 된다면 나중에 겨울이 되어 스노우타이어로 바꾸려면
자동차 코드를 열어서 직접 코드를 수정해야되는데, 그렇게 하지말고 애초에 자동차 클래스를 만들 때, 좀 더 포괄적인 상위의 개념인 '타이어'라는 인터페이스를 참조하면 타이어가 변경되어도 자동차가 영향을 받지 않는다.


참고 유튜브 & 블로그
https://www.youtube.com/watch?v=KO2xdqOZSAs
https://inpa.tistory.com/entry/OOP-%F0%9F%92%A0-%EC%95%84%EC%A3%BC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-LSP-%EB%A6%AC%EC%8A%A4%EC%BD%94%ED%94%84-%EC%B9%98%ED%99%98-%EC%9B%90%EC%B9%99
https://devlog-wjdrbs96.tistory.com/380

profile
정리하는게 공부가 될 지 모르겠지만, 정리를 하면 마음만큼은 편해

0개의 댓글

관련 채용 정보