SOLID
하나의 클래스는 하나의 역할만 해야 함.
확장 (상속)에는 열려있고, 수정에는 닫혀 있어야 함.
자식이 부모의 자리에 항상 교체될 수 있어야 함.
인터페이스가 잘 분리되어서, 클래스가 꼭 필요한 인터페이스만 구현하도록 해야함.
상위 모듈이 하위 모듈에 의존하면 안됨.
둘 다 추상화에 의존하며, 추상화는 세부 사항에 의존하면 안됨.
3가지 패턴의 목적을 이해하기!
Class-creational patterns, Object-creational patterns.
예) DBConnection을 관리하는 Instance를 하나만 만들 수 있도록 제한하여, 불필요한 연결을 막음.
예) 2개의 인터페이스가 서로 호환이 되지 않을 때, 둘을 연결해주기 위해서 새로운 클래스를 만들어서 연결시킬 수 있도록 함.
예) 하위 클래스에서 구현해야 하는 함수 및 알고리즘들을 미리 선언하여, 상속시 이를 필수로 구현하도록 함.