( 춤 안춥니다. )
S RP ( Single Responsibility Principle ) O CP ( Open/Closed Principle ) L SP ( Liskov Substitution Principle ) I SP ( Interface Segregation Principle ) D IP ( Dependency Inversion Principle )
객체 지향 프로그래밍 / 설계의 기본원칙이에요 !
Single Responsiblitiy Principle
단일책임 분배에 대한 원칙인데요 !
한 요소 ( 객체, 클래스, 함수 등 ) 의 역할은 독립적이여야 한다는 뜻이에요 !
( 프로그램 내에서 임의의 역할을 담당하는 요소는 딱 하나씩만 존재하도록 ! )class Mango(): def do_develop(how): def use_python(): # 망고는 파이썬을 써요! print("print('haha')!") def use_javascript(): # 자바스크립트도 써요! print("console.log('haha')!") return how() def do_design(): # 여러 역할을 한다면! SRP 위배! print('doing design~') print('eating apple~') # 함수도 하나의 기능만! class Dango(): # 당고는 디자인만 해요! def do_design(): print('doing design~')
Open/Closed Principle
개방과 폐쇄에 대한 원칙인데요 !
확장성에 대해서는 개방적이여야 하지만, 재설계에 있어서는 폐쇄적이여야 한다는 뜻이에요!
( 기능의 확장이 기존 구성요소의 변화를 필요로 하지 않도록 ! )class Mango(): def do_develop(): print("I use Python !")
class Mango(): def do_develop(): # 기능의 변경은 놉! print("I use Python and JavaScript !")
class Mango(): def do_develop(): # 새로운 기능의 추가는 옼케! print("I use Python !") print("I also use JavaScript !")
Liskov Substitution Principle
리스코프라는 사람이 정의한 치환성에 대한 원칙인데요 !
파생된 요소가 원형요소를 대체할 수 있어야한다는 뜻이에요 !
( 자식요소는 기존 내용을 수정하지 않고 확장만 되도록 ! )class Mango(): def use_django(): print('haha! best for productivity')
class AnotherMango(Mango): # 기존의 기능도 수행해야해요! def use_django(): # 오버라이드 놉! LSP 위배! print('oh! i want to use node+express!') def use_flask(): print('i miss django...')
class AnotherMango(Mango): def use_flask(): # 확장은 옼케이! print('I miss django...')
Interface Segregation Principle
사용환경의 분리에 대한 원칙인데요 !
기능을 필요한만큼만 사용할 수 있도록 해야한다는 뜻이에요 !
( 여러기능을 한덩어리가 아닌, 각각의 요소로써 사용되도록 ! )def mango_does(what): # 망고가 춤을 추거나, 개발하거나! def dance(): print('doo doom chit!') def develop(): print('tadak tadak!') return what() def podo_does(what): # 포도가 춤을 추거나, 노래하거나! def dance(): print('doo doom chit!') def sing(): print('lalala!') return what()
def dance(): # 춤추기! print('doo doom chit!') def develop(): # 개발하기! print('tadak tadak!') def sing(): # 노래하기! print('lalala!') def mango_does(what): # 망고가 뭘할까요? return what() def podo_does(what): # 포도가 뭘할까요? return what() mango_does(dance) # 춤을춰요! 두둠칫! mango_does(develop) # 개발해요! 타닥 타닥! podo_does(dance) # 춤을춰요! 두둠칫! podo_does(sing) # 노래해요! 랄랄라!
Dependency Inversion Principle
의존관계의 역전에 대한 원칙인데요 !
임의의 기능이 동작할때, 자신의 세부요소에 의존하지 않게 설계해야한다는 뜻이에요 !
( 기능은 독립적으로 두고, 세부요소가 기능을 필요로하도록 ! )def mango_talks(): # 아니! 망고는 다른 말도 할 수 있어! word = 'i am super developer!' print(word)
word1 = 'i am super developer!' word2 = 'haha! hoho! happy~ life!' def mango_talks(word): # 어떤 말이 와도 할 수 있지! print(word)
'victoleee ' 님의 티스토리 블로그 !
https://victorydntmd.tistory.com/291
위키피디아 !
https://ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84_%EC%97%AD%EC%A0%84_%EC%9B%90%EC%B9%99
https://en.wikipedia.org/wiki/Dependency_inversion_principle