1. 객체 지향 (Object Oriented)
ㅇ `논리와 데이터가 분리되어 있는 사상`에서 과감히 탈피하여,
- `논리와 데이터가 결합된 객체들이 시스템을 이룬다는 견해`를 갖고,
- 실세계의 문제를 분석하고, 이를통해 소프트웨어 체계를 잡는 철학/패러다임
2. 출현 배경
ㅇ 기존 프로그래밍시, 프로그래머는 데이터와 프로시져(논리)를 별개로 선언하고 사용하게됨
- 작은 프로그램일 경우에, 어떤 프로시져가 어떤 데이터 유형을 사용하는지 쉽게 알 수 있으나,
- 프로그램 규모가 커지면, 둘 간의 관련성에 혼돈이 오기 쉬움
ㅇ 이에따라, 데이터와 프로시져를 분리하지 않고 함께 생각하고 작성할 수 있다면 ,
- 프로그램 작성자는 오류나 중복, 수정, 변경이 용이하게 됨
ㅇ 즉, 논리와 데이터를 결합시켜, 함께 생각하려는 생각의 출발점이, 객체지향 출현의 배경
ㅇ 용어 유래
- 1960년대 노르웨이의 K. Nygaard가 Simula 67 프로그래밍 언어를 개발하면서,
- 객체(object)라는 개념을 사용한 데서 유래
3. 적용 분야
ㅇ 객체지향 프로그래밍
ㅇ 객체지향 분석, 객체지향 설계
ㅇ 객체지향 사용자 인터페이스
ㅇ 객체지향 데이타베이스
ㅇ 객체지향 운영체제 등
4. 객체지향의 장점
ㅇ 수정 혹은 보완이 필요 할 때 기존에 만들어 놓은 객체들을 재사용(Reusability) 가능
ㅇ 사물,현상에 대해, 추상적/범용적(例,운송 수단), 구체적/한정적(例,특정 자동차)으로 다룰 수 있음
ㅇ 클래스를 통해 계층적으로 분류할 수 있는 수단을 제공 (슈퍼 클래스,서브 클래스 등)
ㅇ 또한, 유지보수(Maintenance)성, 확장성(Scalability), 개발의 신속성, 실세계 접근,
프로젝트(프로그램)의 대형화 등에서 유리
5. 객체지향의 주요 특징들
ㅇ 추상화 (Abstraction)
- 복잡한 실행 절차나 데이터를 하나로 묶어 단순화시키는 것
ㅇ 캡슐화 (Encapsulation)
- 복잡함을 감추고, 상호 영향을 작게하는 것
ㅇ 상속성 (Inheritance)
- 코드의 재사용 및 효과적인 확장 능력
ㅇ 다형태성 (Polymorphism)
- 문맥에 따라 다른 형태나 동작을 할 수 있는 능력
ㅇ 동적 바인딩 (Dynamic Binding)
- 실행 중간에도 연결된 속성 변경이 가능
6. 객체지향 설계의 5가지 기본 원칙 (SOLID)
ㅇ SRP (Single Responsibility Prnciple) : 단일 책임 원칙
- 하나의 클래스,속성,메서드,패키지,모듈,컴포넌트,프레임워크 등에 단일 책임 만 관련시킴
ㅇ OCP (Open Closed Principle) : 개방 폐쇄 원칙
ㅇ LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
ㅇ ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
ㅇ DIP (Dependency Inversion Principle) : 의존 역전 원칙