객체 지향 프로그래밍이란 인간 중심적 프로그래밍이라 할 수 있다. 즉, 현실 세계를 프로그래밍으로 옮겨온다 라고 할 수 있다. 현실의 사물들을 객체라 보고 그 객체로부터 개발하고자 하는 프로그램 특징들을 프로그래밍하는 것이다.
객체 지향 프로그램으로 코딩을 하면 코드의 재사용성이 높아 자주 사용되는 로직은 신뢰성을 확보하여 라이브러리로 만들어 계속 사용할 수 있다. 이렇게 라이브러리를 사용하는데 있어 예외 사항을 잘 처리하면 컴파일에서 버그를 잡아낼 수 있고, 개발자는 믿고 사용 할 수 있어 생산성이 높아진다.
SRP(Single Responsibility Prinsiple) : 단일 책임 원칙
객체는 자신만이 제공할 수 있는 기능에 책임을 가진다. 그리고 객체가 갖는 책임은 작을수록 좋다. 객체에 많은 기능이 포함되면 절차지향 방식과 다를바가 없다. 따라서 책임의 크기는 작을수록 유연해진다.
OCP(Open-Closed principle) : 개방-폐쇄 원칙
확장에는 열려 있고, 변경에는 닫혀 있어야 한다. 변경을 위한 비용은 줄이고, 확장을 위한 비용은 극대화 한다.
LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
상위 타입의 객체를 하위 타임의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. 클라이언트가 인터페이스의 일부만 사용한다면 클라이언트는 사용하지 않는 기능도 구현 해야 한다. 이럴때 인터페이스를 분리하여 클라이언트가 필요한 기능만 전달한다.
DIP(Dependency Inversion Principle) : 의존 역전 원칙
상위 모델은 하위 모델을 의존하면 안된다. 추상화에 의존해야 한다.
추상화는 세부 사항에 의존하면 안된다. 세부사항은 추상화에 따라 달라진다.