객체 지향 프로그래밍 이란, 많은 객체(Objcet)들이 모여서 상호 협력하면서 데이터를 처리하는 방식의 프로그래밍 설계 방법이다. 좀더 쉽게 말하면, 프로그램을 묶음 단위로 잘게 쪼개서, 추후에 가져다 쓰기 편하게 만들어 놓은 프로그래밍 방식이다.

적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는것

Untitled

강조하는 점은 객체 지향 기법은 '사용' 기법이 아닌 '설계' 기법 인 점이다.

대부분 프로그래밍 입문자들은 객체 지향 기법에 대해 잘 와닿지 않는다고 한다.

왜냐하면 우리는 프로그래밍을 배울때 사용하는 법을 배웠고 우리는 그것을 매우 당연하게 사용해왔기 때문이다.

변수 선언, 함수 선언, 조건문, 반복문, 연산자 등을 이해하는데 있어 직접 문제를 구현해봄으로써 필요성을 이해했지만, 객체지향 개념(클래스, 객체, 캡슐화, 상속, 다형성, 재정의, 인터페이스, 추상 클래스 등) 을 이해하는데 있어 없어도 충분히 if문 for문으로도 문제를 구현 가능했기 때문에 구조적으로 편하다 정도로만 깨닫지 완벽히 필요한 이유를 알지 못한다

그래서 보통 객체 지향에 대해 요약 정리된 문서를 보면, 추상화 라고 하면 abstract class, 다형성이라 하면 오버로딩 / 오버라이딩, 캡슐화 라고 하면 private 만 알려주는 문서가 많다.

절차적 프로그래밍이 계산기와 같은 아웃풋을 생성하는 프로그램을 만드는 것이라면, 객체지향 프로그래밍은 라이브러리와 같이 다른 개발자가 이용할수 있게 구조를 만드는 것으로 보면 된다.

그리고 거대한 규모의 애플리케이션은 객체지향과 절차적 프로그래밍이 잘 융합하여 만들어진다.

OOP 5대 설계원칙(SOLID)

  1. SRP(Single responsibility principle) - 단일 책임의 원칙
  2. OCP(Open/closed principle) - 개방/폐쇄 원칙
  3. LSP(Liskov substitution principle) - 리스코프 치환 원칙
  4. ISP(Interface segregation principle) - 인터페이스 분리 원칙
  5. DIP(Dependency Inversion principle) - 의존관계 역전 원칙

이 외에도 "변하는 것과 변하지 않는 것의 분리", "공통(중복)코드의 분리" 등으로 코드를 분리할 수 있다.