적절한 컨텍스트에서 객체 지향에 대해 생각하기 위해 한 단계의 추상화를 진행하고 일반적인 프로그래밍에 대해 이야기 해 봅시다.
OO를 사용하든 기능적으로 접근하든 관계없이 프로그램은 무언가 를 해야 합니까? 프로그램의 요점은 특정 자극 세트가 주어지면 특정 행동 을 나타내는 것 입니다. 따라서 프로그램이 존재하는 이유 는 무언가를 하기 때문 입니다. 여기서 핵심은 행동 입니다.
프로그램이 구현해야하는 동작을 고려하는 것 외에도 프로그램은 일반적으로 특정 특성을 보여야합니다. 예를 들어, 심장 모니터 프로그램에 필요한 동작을 수행하는 것만으로는 충분하지 않습니다. 일반적으로 거의 실시간으로 작동 할 수있을 정도로 빠르게 수행해야합니다. 프로그램이 보여줄 필요가있는 다른 "품질"은 보안, 유연성, 모듈성, 확장 성, 가독성 등입니다. 이를 아키텍처 품질 속성이라고 합니다. 따라서 프로그램이 특정 행동 (기능적) 목표를 충족해야하며 특정 특성 (비 기능)을 나타내야한다고 말할 수 있습니다.
지금까지 이것 중 어느 것도 OO에 대해 이야기하지 않았습니다. 지금 해보자.
엔지니어가 요구 사항 (행동, AQA, 제약 조건 등)을 이해하면 문제가 발생합니다. 유용한 프로그램이되기 위해 필요한 자질을 발휘하면서 필요한 모든 작업을 수행하도록 코드를 어떻게 구성해야합니까? 객체 지향 프로그래밍은 프로그램 기능을 협력 객체의 응집력있는 모듈로 구성하기위한 전략입니다. 함수형 프로그래밍은 프로그램의 기능을 구성하는 또 다른 전략 일 뿐이며 다른 방식으로 수행됩니다. 두 전략 모두 장단점이 있습니다.
우리는 기능적 개념의 최근 부활을 목격하고 있으며, 그 이유는 무엇보다도 방대한 분산 처리에 매우 강력한 장점을 가지고 있기 때문입니다.
그러나 OO로 돌아 가면 "실제 세계"를 모델링 할 필요는 없습니다. 그것이하는 일은 프로그램이 여러 비즈니스 목표를 충족시키는 데 필요한 자질을 보일 수 있도록 프로그램의 동작을 구성하는 것입니다. TDD, DDD 및 BDD와 같은 기술은 객체를 가장 잘 구성하는 방법을 찾는 방법입니다. 원리, 패턴 및 실습 , 테스트 에 의해 유도되는 객체 지향 소프트웨어 성장 , 예제 별 사양 및 도메인 기반 설계 와 같은 책 은 행동 중심 설계에 중점을 둔 객체 지향 이론과 실습을 제시합니다.
"관찰자, 관리자, 공장 등"에 대해 읽을 때 프로그램이 유용 할 수있는 특정 특성을 나타내는 데 도움이되는 OO 패턴을 적용하고 있습니다. 요구 사항이 패턴이 해결하는 문제와 일치 할 경우 "작동하는 경향이있는"입증 된 레시피입니다.
OO와 기능적 패러다임간에 너무 편향되지 않고 OO가 무엇인지 이해하는 데 도움이되기를 바랍니다.