SOLID Principles
# SRP를 잘 지킨 경우 -> 수정이 용이하다.
def add(num1, num2):
return num1 + num2
def numPrint(num):
print(num)
#SRP를 잘 지키지 못한 경우 -> 수정이 용이하지 않다.
def addPrint(num1, num2):
num = num1 + num2
print(num)
return num
해당 원칙은 클래스에서도 적용시킬 수 있다.
# 고양이를 나타내는 클래스의 예시
# 원칙을 잘 지킨 경우.
# 한 메서드 당 하나의 일만 담았다.
class Cat: # 고양이 클래스
# 생성자
def __init__(self, age, name) :
self.age = age
self.name = name
# 고양이의 행동 -> 먹기, 단순한 구조를 알기 위해서 구체적 코드는 생략.
def eat(self, food):
pass # 해당 오버라이드를 통해 메소드를 재설정 할 수 있다.
# 고양이의 행동 -> 걷기
def walk(self):
pass
# 고양이의 발성 -> 말하기
def speak(self):
pass
# 정보 출력
def repr(self):
return f"age:{self.age} name: {self.name}"
# 메인 함수
kitty = Cat()
print(kitty.repr())
logger.log(kitty.repr())
# 원칙을 잘 지키지 않은 경우.
# 한 메서드 당 여러가지 경우가 있다.
# 정보 출력 메소드와 그렇지 않은 메소드가 같은 행동을 하는 코드로 이루어져 있다.
class Cat: # 고양이 클래스
# 생성자
def __init__(self, age, name) :
self.age = age
self.name = name
# 고양이의 행동 -> 먹기, 단순한 구조를 알기 위해서 구체적 코드는 생략.
def eat(self, food):
pass # 해당 오버라이드를 통해 메소드를 재설정 할 수 있다.
# 고양이의 행동 -> 걷기
def walk(self):
pass
# 고양이의 발성 -> 말하기
def speak(self):
pass
# 정보 출력
def print(self):
return f"age:{self.age} name: {self.name}"
# 로그 출력
def log(self, logger):
logger.log(f"age:{self.age} name: {self.name}")
logger.log(datetime.now())
마지막으로 하나의 예시를 더 들어보자.
# 전등의 스위치에 관련된 클래스
# 원칙을 잘 따른 경우
# 복잡해진다.
class LightSwitch:
# 생성자
def __init__(self):
self.light_on = False # 전등이 꺼져 있다는 것을 의미
def turn_on(self): # 전등을 켜는 메소드
self.light_on = True
print("Light turned on")
def turn_off(self): # 전등을 끄는 메소드
self.light_on = False
print("Light turned on")
class Logger: # 상태를 출력
def log(self, message):
print(f"Logging: {message}")
# 예시의 사용
switch = LightSwitch()
switch.turn_on()
switch.turn_off()
logger = Logger()
logger.log("Light switch action prformed.")
# 전등의 스위치에 관련된 클래스
# 원칙을 잘 따르지 않은 경우
class LightSwitch:
# 생성자
def __init__(self):
self.light_on = False # 전등이 꺼져 있다는 것을 의미
def turn_on(self): # 전등을 켜는 메소드
self.light_on = True
print("Light turned on")
self.log("Light turned on,")
def turn_off(self): # 전등을 끄는 메소드
self.light_on = False
print("Light turned on")
self.log("Light turned off")
def log(self, message):
print(f"Logging: {message}")
# 예시의 사용
switch = LightSwitch()
switch.turn_on()
switch.turn_off()