SOLID 원칙 적용

jjin·2024년 3월 25일
0

SRP

객체 비대하지 않게 책임 기반 설계
ex) Employee가 design, coding, analysing을 다 가지면 안됨

OCP

변경 없이 확장 가능해야 함
ex) 추상인 Employee.work에 의존해야 함.

LSP

부모 객체의 역할은 자식 객체도 할 수 있어야 함.
ex) 자식을 부모로 대체 가능해야 함. 정사각형 is 직사각형
상속보다는 구성(composition, 부분의 합, is part of) 고려

구성

Class House():
	bedroom: Bedroom
    livingroom: Livingroom 

ISP

SRP가 객체 단일 책임이라면, ISP는 인터페이스 단일 책임
인터페이스를 잘 쪼개두면, 클라이언트는 필요한 인터페이스만 구현(or 상속)할 수 있다

to-be

class Telephone(metaclass=ABCMeta):
	@abstractmethod
    def call(self):
    	...
    @abstractmethod
    def send_message(self):
    	...

class Camera(metaclass=ABCMeta):
	@abstractmethod
    def take_picture(self):
    	...
        
class Application(metaclass=ABCMeta):
	@abstractmethod
    def see_youtube(self):
    	...
        
class PhoneWithNoCamera(Telephone, Application):
	...

DIP

의존성 역전 & 의존성 주입. 객체 생성을 외부(사용하는 클라이언트)에 맡겨.

class App():
	def __init__(self, db: DB):
    	self.db = db
        
    def save_user(self, data):
    	self.db.store_data(data)
        
if __name__ == "__main__":
	inmemory_db = InMemoryDatabase()
    app = App(inmemory_db)
    app.save_user({"id":1, "name":"grab"})
    
profile
진짜

0개의 댓글

관련 채용 정보