0615 개발일지

Yesol Lee·2022년 6월 16일
0

개발일지 - 2022

목록 보기
73/187

오늘 한 일

  • 사이트1 대조 작업 완료, 사이트2 대조작업 약 50% 수행
  • 인프런 '개발자 기본기 클래스' 강의 수강 : 6. 객체 지향 설계를 위한 SOLID 원칙

객체 지향 SOLID 원칙

1. Single Responsibility Principle (단일 책임 원칙)

  • 하나의 객체가 하나의 책임
  • 객체 설계 전 책임 정의 먼저
# AS-IS
class Employee:
	def coding (self):
        print('코딩하기')
    def design (self):
        print('디자인하기')        

# TO-BE
class Employee:
    @abstractmethod
    def work (self):
        pass
class Developer(Employee):
    def work (self):
        print('코딩하기')
class Designer(Employee):
    def work (self):
        print('디자인하기')

2. Open Closed Principle (OCP) (개방 폐쇄 원칙)

  • 객체의 확장에는 열려있고, 수정에는 닫혀있게 한다.
  • 기존 코드 변경하지 않으면서 기능 추가할 수 있도록 설계
  • 인터페이스나 추상 클래스를 통해 추상화한 객체를 상속, 구현함

3. Liskov Sustitution Principle (리스코브 치환 원칙)

  • 부모 객체의 역할을 자식 객체도 할 수 있어야 한다.
  • ex. 부모 객체의 함수를 오버라이딩 하는데 리턴타입 등이 달라서 메소드 주체가 부모냐 자식이냐에 따라 결과가 달라질 수 있음
  • a-1 객체가 a객체의 자식일 경우 a객체 방식대로 a-1객체도 작동할 것이라고 기대하게 되는데 그걸 위반해서 오류가 발생하기 쉬움
  • 일반적으로 리스코프 치환이 지켜지지 않으면 OCP도 위반하게 됨

4. Interface Segregation Principle(인터페이스 분리원칙)

  • 클라이언트가 자신이 이용하지 않는 메서드는 의존하지 않아야 한다는 원칙.
  • 객체뿐만 아니라 인터페이스도 하나의 책임만을 가져야 함.
  • 인터페이스를 책임에 맞게 쪼개면 클라이언트가 필요한 역할만 구현(혹은 상속)하여 사용 가능

5. Dependency Inversion Principle (의존성 역전 원칙)

  • 의존성을 항상 고수준으로 향하게 하여 예측할 수 없는 의존성의 변화 줄이기
  • 고수준(상위수준+추상화): 쉽게 변경되지 않는 특성 -> 의존 시 사이드이펙트 적음
  • 저수준(하위수준+구체화): 실제 동작 코드는 변경 잦으므로 의존 시 사이드이펙트 가능성 높음
  • 의존성 주입(Dependency Injection): 다른 객체를 사용하고 싶을 때 객체를 직접 구현하지 않고 메소드 파라미터로 받는 등 밖에서 객체 주입해서 사용하는 방식으로 구현

정리

객체지향 SOLID 원칙을 정리해보니, 각 원칙이 다른 이야기가 아니라 전부 연결되어 있다는 것을 느꼈다. 지금 생각해보면 상속이나 인터페이스 등의 개념을 이해하지 못해서 작은 부분을 수정하기 위해 불필요하게 많은 코드를 같이 수정하느라 에너지를 많이 썼었다. 개발하기 전 설계에 시간과 에너지를 더 많이 투자해 SOLID 원칙을 지키려고 노력해야겠다.

용어정리

경제 용어

  • retail therapy : 소비로 위안을 찾는 심리
  • pent-up demand(펜트업 수요) : 여건이 나아지면서 갑자기 폭발적으로 늘어나는 수요.
  • pent-up: '감정을 억누르는, 자제하는' 형용사 / ex: pent-up anger (참았던 분노)
  • wage-price spiral (임금과 물가 상승 간 상호작용): 임금 상승으로 인한 물가 상승 현상
profile
문서화를 좋아하는 개발자

0개의 댓글