OCPOpen Closed Principle.(새로운 코드 추가) 열려있고, (기존 코드 변경) 닫혀 있어야한다.즉 기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있어야한다.이는 유지보수성과 확장성을 높이는데 핵심적인 역할을 합니다. OCP를 적용하기 위해선 추상화와 다형성이 필수적입니다.왜냐하면 클래스마다의 의존성은 실제 클래스가 아닌,인터페이스에만 의존을 해야하기 때문입니다. 예를들어 우리가 로그인 기능을 구현하려고합니다.근데 직접 로그인 기능을 구현하는 대신 Oauth를 이용하려고합니다. 근데 각 SNS마다 로그인 과정이 조금씩 차이가 나서 구현하기 까다롭습니다.그렇다면 어떻게 구현해야할까요? 다음과 같은 SNS 들이 있습니다.public enum SNSType { FACEBOOK, ..