https://incheol-jung.gitbook.io/docs/q-and-a/architecture/undefined
객체 지향을 잘 하려면 절차 지향적인 코드를 작성하지 않으면 된다. 객체 지향 언어인 자바를 사용하더라도 객체지향과 거리가 먼 결과를 만들 수 있다. 이런 이유는 객체지향의 핵심인 캡슐화와 추상화가 적용되지 않았기 때문이다.
https://antstudy.tistory.com/10
소프트 웨어를 구현한다는 것은 소프트웨어를 구성하는 데이터와 데이터를 조작하는 코드를 작성하는 것이다. 데이터를 조작하는 코드를 분리해 함수나 프로시저 같은 형태로 만들고, 프로시저들이 데이터를 조작하는 방식으로 코드를 작성할 수 있다. 이런 프로시저로 프로그램을 구성하는 기법을 절차 지향 프로그램이라 부른다.
각 프로시저는 데이터를 사용해서 기능을 구현하고 다른 프로시저를 사용하기도 한다. 여러 프로시저가 데이터를 공유한다. 최초에는 데이터와 데이터를 사용하는 프로시저로 구현하는건 자연스러운 과정이기에 쉽다. 하지만 규모가 커지고 데이터가 증가하고 프로시저도 증가한다면 여러 문제가 발생한다.
요구사항은 계속해서 변경되기 때문에 계속해서 수정하는 일이 발생하고 점점 새로운 기능을 추가하는데 오랜 시간과 비용이 발생한다.
객체 지향은 데이터와 데이터와 관련된 프로시저를 객체라고 부른다. 객체는 프로시저를 실행하는데 필요한 만큼의 데이터를 가지며 객체들이 모여 프로그램을 구성한다. 객체는 자신만의 기능을 제공하며 객체들은 서로 연결되어 다른 객체가 제공하는 기능을 사용할 수 있다. 객체는 자신이 가지고 있는 데이터에만 접근이 가능하고 다른 객체의 데이터는 접근할 수 없다. 프로그램 초기 절차 지향보다 복잡한 구조를 가지기 때문에 객체 지향으로 설계하는 방법이 더 어렵다. 하지만 여러 장점이 있다.