개방 폐쇄 원칙 (OCP : Open-Closed Principle) 깔끔한 설계를 위해 적용 가능한 객체지향 설계 원칙 중의 하나로, ‘클래스나 모듈은 확장에는 열려있어야하고 변경에는 닫혀있어야한다.’라고 할 수 있다. 이 말은 즉 확장성은 높고 미래의 변화에 대한 준비를 철저히 하고있다는 얘기와 같다. 인터페이스에 의해 제공되는 확장 포인트는 확장을 위해 개방되어있고, 인터페이스를 이용하는 클래스는 자신의 변화가 불필요하게 일어나지 않도록 폐쇄되어있다. 인터페이스를 사용하여 확장 기능을 정의한 대부분의 API가 개방 폐쇄 원칙을 따르고있다. 인터페이스의 사용 위 개방 폐쇄 원칙에서 인터페이스의 확장성을 얘기했는데, 이를 더 깊이 이해하기 위해서 인터페이스에 대해 좀더 알아보자. 우선 추상화란, 어떤 ..
일반적은 프로그램의 흐름 1) mian() 메소드와 같이 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정한다. 2) 결정한 오브젝트를 생성한다. 3) 만들어진 오브젝트에 있는 메소드를 호출한다. 4) 그 오브젝트 메소드 안에서 다음에 사용할 것을 결정하고 호출한다. 이 4가지 단계가 반복적으로 일어난다. 이런 프로그램 구조에서 각 오브젝트는 프로그램 흐름을 결정하거나 사용할 오브젝트를 구성하는 작업에 능동적으로 참여한다. 모든 오브젝트가 능동적으로 자신이 사용할 클래스를 결정하고, 언제 어떻게 그 오브젝트를 만들지를 스스로 결정한다. 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조이다. 제어의 역전 제어의 역전이란, 위에서 설명한 일반적인 프로그램의 제어 흐름 구조가 뒤바뀌는 것이라고 설명할..
의존관계란? 두 개의 클래스 또는 모듈이 의존관계에 있다고 말할 때는 항상 방향성을 부여해줘야한다. A가 B에게 의존하고있다. B가 변하면 A에 영향을 미친다. B의 기능이 추가, 변경이 일어나면 그 영향이 A로 전달된다. A에서 B에 정의된 메소드를 호출해서 사용하는 경우다. B에 새로운 메소드가 추가되거나 기존 메소드의 형식이 바뀌면 A도 그에따라 수정되거나 추가돼야 한다. B의 형식은 그대로지만 기능이 내부적으로 변경되면 결과적으로 A의 기능이 수행되는 데도 영향을 미친다. 방향성이 있다. B는 A의 변화에 영향을 받지 않는다. A가 인터페이스 B에게 의존하고있다. 인터페이스 B가 변하면 A에게 영향을 주겠지만, 중요한 것은 인터페이스 B를 구현한 클래스가 변하더라도 A에게 영향이 주지 않는다는 사..