Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

객체지향 프로그래밍(OOP)이란? 핵심 개념과 4대 특징 총정리

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 '객체'라는 개념에 기반한 프로그래밍 패러다임입니다. 객체는 데이터를 담는 필드(field), 즉 속성(attribute)과, 동작을 담당하는 프로시저(procedure), 즉 메서드(method)를 함께 포함할 수 있습니다.

예를 들어 '사람'을 하나의 객체로 표현해 보겠습니다. 사람 객체는 키, 성별, 나이 같은 속성을 가지며, 동시에 걷기(move), 말하기(talk) 같은 메서드도 가질 수 있습니다. 이처럼 현실 세계의 사물이나 개념을 프로그램 안에서 객체로 모델링하는 것이 OOP의 핵심 아이디어입니다.

객체(Object)란?

객체는 객체지향 프로그래밍의 기본 단위입니다. 데이터와 그 데이터를 처리하는 함수가 하나의 단위로 묶여 객체를 이루며, 프로그램은 이러한 객체들이 서로 상호작용하면서 동작합니다.

클래스(Class)란?

클래스를 정의한다는 것은 곧 객체의 설계도(blueprint)를 정의하는 것입니다. 클래스 자체는 실제 데이터를 담지 않지만, 해당 클래스 이름이 무엇을 의미하는지, 즉 그 클래스로 만들어진 객체가 어떤 데이터로 구성되고 어떤 연산을 수행할 수 있는지를 규정합니다. 하나의 클래스로부터 여러 개의 독립된 객체를 생성할 수 있습니다.

OOP의 4대 핵심 개념

객체지향 프로그래밍은 다음 네 가지 기본 개념 위에 완전히 구축되어 있습니다. 하나씩 자세히 살펴보겠습니다.

1. 추상화(Abstraction)

추상화는 외부에는 필수적인 정보만 노출하고 내부의 복잡한 구현 세부사항은 숨기는 것을 의미합니다. 예를 들어 웹 서버는 클라이언트가 보낸 데이터를 내부적으로 어떻게 처리하는지 감춥니다. 최종 사용자는 엔드포인트(endpoint)에 요청만 하면 결과 데이터를 받을 수 있을 뿐입니다.

2. 캡슐화(Encapsulation)

캡슐화는 데이터 멤버(변수, 프로퍼티)와 멤버 함수(메서드)를 하나의 단위로 묶는 과정입니다. 동시에 특정 속성이나 컴포넌트에 대한 접근을 제한하여 데이터를 보호하는 역할도 합니다. 캡슐화의 가장 대표적인 예가 바로 클래스입니다.

3. 상속(Inheritance)

상속은 기존 클래스로부터 새로운 클래스를 파생시키는 능력을 말합니다. 상속을 활용하면 부모(Parent) 클래스의 속성과 메서드를 자식(Child) 클래스가 물려받으면서, 자신만의 추가 속성과 메서드를 정의할 수 있습니다.

예를 들어 색상(Color), 가격(Price) 같은 속성을 가진 Vehicle 클래스가 있다고 가정해 봅시다. 이 클래스를 상속받아 Bike와 Car 클래스를 만들면, 두 클래스는 색상과 가격 속성을 그대로 공유하면서도 Car에는 numberOfWindows처럼 자동차에만 필요한 고유 속성을 추가할 수 있습니다. 메서드 역시 같은 방식으로 확장할 수 있습니다.

4. 다형성(Polymorphism)

다형성은 문자 그대로 '여러 형태를 가진다'는 뜻입니다. 일반적으로 다형성은 클래스 계층 구조에서 상속 관계로 연결된 클래스들 사이에서 발생합니다. C++에서 다형성이란 멤버 함수 호출 시, 그 함수를 호출하는 객체의 타입에 따라 서로 다른 함수가 실행되는 것을 의미합니다. 덕분에 동일한 인터페이스로 다양한 객체를 유연하게 다룰 수 있습니다.

마무리

객체지향 프로그래밍은 객체와 클래스라는 기본 단위 위에 추상화, 캡슐화, 상속, 다형성이라는 네 가지 원칙을 결합하여 코드의 재사용성, 유지보수성, 확장성을 크게 높여 줍니다. Java, C++, Python 등 현대의 주요 프로그래밍 언어 대부분이 OOP를 지원하고 있으므로, 이 네 가지 개념을 확실히 이해해 두는 것이 견고한 소프트웨어를 설계하는 첫걸음입니다.