객체지향의 원칙쓰?!

춤추는망고·2020년 6월 4일
0
post-thumbnail

슈퍼개발자, 춤추는망고입니다.

( 춤 안춥니다. )








객체지향을 위하여!!



5개나 된다고?!

SOLID!









SOLID 란?

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 )

객체 지향 프로그래밍 / 설계의 기본원칙이에요 !



SRP 란?

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~')



OCP 란?

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 !")



LSP 란?

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...')



ISP 란?

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)     # 노래해요! 랄랄라!



DIP 란?

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)






내가 만든 것이, 내 앞길을 막지 않도록!






리팩토링, 기능추가에 더 유연하게 대응할 수 있는 구조쓰!

그러한 설계를 하기위해 필요한 원칙쓰!



그것이 SOLID 다... 이 말이야!








출처쓰!

'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

profile
지금까지 이런 망고는 없었다. 이것은 개발자인가 춤추는망고인가

0개의 댓글