프로그래밍 패러다임은 무엇을 해야 할지를 말하기보다는 무엇을 해서는 안 되는지를 말해준다.
프로그래밍 패러다임에는 대표적으로 3가지가 존재합니다.
구조적 프로그래밍 (Structured Programming)
구조적 프로그래밍은 제어 흐름의 직접적인 전환에 대한 규칙을 제시합니다.
객체 지향 프로그래밍 (Object-Oriented Programming, OOP)
객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대한 규칙을 제시합니다.
함수형 프로그래밍 (Functional Programming)
함수형 프로그래밍은 할당문에 대한 규칙을 제시합니다.
데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식
수정시간 단축
객체지향 프로그래밍은 데이터와 프로세스를 하나의 단위로 처리하는 특성을 가지고 있기 때문에 코드를 수정해야할 때 어떤 코드에서 문제가 발생했는지 개발자들이 직관적으로 인지할 수 있으며 여러곳에 분산된 모든 코드를 수정해야하는 것이 아닌 해당 로직을 수행하는 코드만 수정하더라도 문제가 해결될 수 있습니다.
의존성 통제, 일관성유지, 수정시간 단축
객체지향 프로그래밍은 의존성을 효율적으로 통제할 수 있는 다양한 방법을 제공함으로써 요구사항 변경에 좀 더 수월하게 대응할 수 있는 가능성을 높여줍니다.
동작을 기준으로 프로그래밍을 진행하는 것보다 데이터를 중심으로 프로그래밍을 하게되면 코드의 덩치가 커지더라도 일관성을 유지하기 좋습니다.
객체지향 코드는 이해하기 쉽고, 객체 내부의 변경이 객체 외부에 파급되지 않도록 제어할 수 있기 때문에 변경하기 수월합니다.
좋은 설계란 요구하는 기능을 온전히 수행하면서 추후의 변경을 매끄럽게 수용할 수 있는 설계입니다.
변경 가능한 코드란 이해하기 쉬운 코드입니다. 만약 코드를 변경해야 하는데 그 코드를 이해할 수 없다면 변경에 유용하더라도 코드를 수정하겠다는 마음이 선뜻 들지는 않을 것입니다.
변경하기 쉬운 설계는 한 번에 하나의 클래스만 변경할 수 있는 설계입니다.
훌륭한 객체지향 설계의 핵심은 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것이다.