데이터와 기능을 객체라는 단위로 묶어 상호작용하게 함으로써 재사용성을 높이는 방식을 기술한다.
+
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 단순히 명령어의 순차적인 나열로 파악하는 기존의 [[절차적 프로그래밍]] 방식에서 벗어나, 데이터와 그 데이터를 처리하는 함수를 하나의 논리적 단위인 [[객체]](object)로 묶어 파악하는 패러다임이다. 이 패러다임의 핵심은 현실 세계의 실체나 개념을 [[추상화]](abstraction)하여 소프트웨어 내부의 독립적인 주체로 정의하고, 이들 사이의 상호작용을 통해 전체 시스템을 구축하는 데 있다. 객체 지향 패러다임은 소프트웨어의 규모가 거대해지고 복잡성이 증대됨에 따라 발생하는 [[소프트웨어 위기]]를 극복하고, 코드의 [[재사용성]]과 [[유지보수성]]을 극대화하기 위한 대안으로 발전하였다.
+
+
객체 지향 시스템의 가장 기본적인 구성 요소는 [[클래스]](class)와 객체이다. 클래스는 객체를 생성하기 위한 일종의 설계도 혹은 템플릿이며, 객체는 이 클래스를 바탕으로 메모리에 할당된 실체인 [[인스턴스]](instance)를 의미한다. 국제 표준화 기구(ISO)와 국제 전기 기술 위원회(IEC)의 정보 기술 용어 정의에 따르면, 객체는 데이터와 그 데이터를 처리하는 연산을 결합하여 하나의 개체로 취급하는 소프트웨어 구성 단위를 의미한다((ISO/IEC 2382:2015 - Information technology — Vocabulary, https://committee.iso.org/standard/63598.html
+
)). 각 객체는 고유한 [[상태]](state)를 나타내는 [[속성]](attribute)과 그 상태를 조작하거나 특정 기능을 수행하는 [[행위]](behavior)를 포함한다. 행위는 대개 [[메서드]](method)라는 형태로 구현되며, 객체 간의 통신은 한 객체가 다른 객체의 메서드를 호출하는 [[메시지 전달]](message passing) 방식을 통해 이루어진다. 이러한 구조는 데이터와 로직이 분리되어 있던 기존 방식과 달리, 데이터와 기능이 밀접하게 결합된 형태를 취함으로써 코드의 [[응집도]]를 높인다.
+
+
객체 지향 패러다임을 지탱하는 네 가지 주요 원칙은 [[캡슐화]](encapsulation), 상속, 다형성, 추상화이다. 캡슐화는 객체의 세부 구현 내용을 외부에 감추고 필요한 인터페이스만을 노출하는 [[정보 은닉]](information hiding)을 실천한다. 이를 통해 외부의 잘못된 접근으로부터 객체의 내부 상태를 보호하고, 내부 구현이 변경되더라도 이를 사용하는 다른 코드에 미치는 영향을 최소화한다. [[상속]](inheritance)은 기존 클래스의 특성을 이어받아 새로운 클래스를 생성하는 메커니즘으로, 코드의 중복을 제거하고 계층적인 구조를 형성하여 체계적인 시스템 설계를 가능하게 한다.
+
+
[[다형성]](polymorphism)은 동일한 인터페이스나 메서드 호출이 객체의 실제 유형에 따라 다르게 동작하는 성질을 의미한다. 이는 [[오버라이딩]](overriding)이나 [[오버로딩]](overloading)을 통해 구현되며, 프로그램의 유연성과 확장성을 크게 향상시킨다. 마지막으로 추상화는 복잡한 현실의 문제를 핵심적인 특징 위주로 단순화하여 모델링하는 과정이다. 이러한 원칙들은 객체 지향 프로그래밍이 대규모 소프트웨어 개발에서 [[모듈화]](modularity)를 실현하는 강력한 도구가 되게 한다. 결과적으로 객체 지향 패러다임은 독립적인 객체들의 협력을 통해 기능을 수행하게 함으로써, 부품을 조립하듯 소프트웨어를 구성할 수 있는 토대를 제공한다.