객체지향프로그래밍(Object-Oriented Programming)은 현실 세계의 객체(Object)를 모델링하여 객체들 간의 상호 작용을 표현하는 프로그래밍 방식을 말한다.
도대체 객체는 무엇이며, 모델링은 무엇인지 몰라서 정의를 읽어도 객체지향프로그래밍이 잘 와닿지 않는다. 그래서 이 블로그 글에서는 좀 더 직관적인 표현으로 객체지향프로그래밍을 설명해보려고 한다.
본문 앞 부분에서는 객체와 모델링에 대한 간단한 이해를 통해 객체 지향 프로그래밍을 이해해볼 것입니다. 다음으로는 왜 객체 지향 프로그래밍이 유명한 지, 왜 개발자들이 객체를 지향하는 지를 살펴볼 것입니다. 마지막으로는 모든 개념을 토대로 객체, 클래스, 인스턴스가 프로그래밍에서 어떤 의미를 갖는 지 자세하게 알아보고 글을 마치겠습니다.
객체(Object):
한 단어로 떼어놓고 보니까 정말 어색한 단어로 보이네요. 먼저 객체를 간단하게 이해해봅시다.
- 딱딱한 정의:
- 클래스를 기반으로 실제로 메모리에 할당된 인스턴스.
- 직관적인 정의:
- 현실세계에서 사람이 인식할 수 있는 사물 또는 개념 (사자, 컴퓨터, 과일, 놀이기구 등등) 을 프로그래밍에서 모델링한 것.
한 마디로 우리가 현실 세계에서 보고 느끼고 하는 것들을 모델링한 것이라고 생각해도 되겠다.
모델링(Modeling):
이 개념은 여러 가지 도메인에서 다양한 의미를 가질 수 있지만, 여기에서 나온 의미를 간단하게 설명해보겠습니다.
- 딱딱한 정의:
- 현실 세계의 복잡한 시스템이나 개념을 단순화하고 추상화하여 이해하기 쉽게 표현하는 과정이나 방법.
- 직관적인 정의:
- 어떠한 것을 다양한 방법을 사용하여 모델화 하는 것.
예를 들면 사과는 색깔로도 표현할 수 있고, 맛이 달거나 쓴 것, 딱딱하거나 물렁한 사과가 있을 수 있다. 이처럼 사과라는 어떤 것을 색깔, 맛 등등 다양한 방법으로 표현하여 모델화 하는 것을 말한다.
여기까지 읽으셨다면 객체지향프로그래밍의 의미를 좀 더 명확하게 이해할 수 있을 것이다. 현실 세계에서 존재하는 어떤 것을 다양한 속성들로 표현하여 모델을 만들 것인데, 이러한 방식으로 프로그래밍을 하겠다는 것이다.
이것을 완전히 단순화하면 객체를 지향하는 프로그래밍을 하겠다는 것이다.
그렇다면 도대체 왜? 객체지향언어들이 많이 나오고 그것들을 선호하는 지 궁금해진다.
흔히 책에 있는 장점들이 맞다. 그렇지만 이를 암기하면 잘 머릿속에 들어오지 않는다.
객체지향프로그래밍 특징:
진짜 딱딱할 수밖에 없지만 최대한 논리적이고 직관적일 수 있도록 설명해보겠다.
- 모듈화:
- 위에서 언급했듯이 객체는 특정 개념 혹은 형상 등을 모델링한 것이다. 현실 세계에서는 특정 개념(Ex. 사과) 을 다양한 속성들로 표현하게 되는데 이러한 것과 유사하게 소프트웨어에서는 특정 객체를 작은 부분으로 나누어서 표현하는 것을 말한다.
- 따라서 분리된 상태로 객체를 표현할 수 있고(맛, 색깔 등등) , 각 부분 별로 분리해서 볼 수 있기 때문에 가독성도 향상된다. 또한 세분화되어있기 때문에 유지 보수성도 좋고, 각 부분들을 필요한 곳에 따로 사용할 수도 있다는 것이다.
- 캡슐화:
- 객체의 상태와 행위를 하나로 묶어 외부에서 직접 접근하지 못하도록 보호할 수 있기 때문에 객체 내부의 구현을 감추고 외부와의 결합도를 낮출 수 있다고 한다.
- 현실과의 친밀감:
- 보통 객체를 표현할 때는 사람이 한다. 즉 객체지향프로그래밍도 사람이 하기 때문에 보다 직관적일 수 있다. 따라서 실제 비지니스의 요구사항과 더 가까워질 수 있고, 그렇기 때문에 개발자와 도메인 전문가 간의 의사소통을 좀 더 쉽게 할 수 있다고 한다.
이처럼 객체지향프로그래밍을 할 경우 개발하는데 있어서 무시할 수 없는 큰 장점이 있다. 위에 설명하지 않은 것들도 포함해서 얘기하면 가독성, 유지보수, 테스트 용이, 상속, 유연성, 확장성 등이 있다.
구체적인 코드 예시를 보고 싶으시면 아래 링크 접속!!
여기까지 오셨으면 객체지향프로그래밍이 뭔지? 왜 객체지향프로그래밍을 하는지 등을 이해하실 수 있을 겁니다. 그렇다면 프로그래밍 할 때 좀 더 구체적으로 객체가 어떤 의미를 갖는 지 살펴보겠습니다.
프로그래밍에서 객체:
객체지향프로그래밍에서 객체는 데이터와 그 데이터를 처리하는 메서드(함수)로 구성되며, 클래스에서 정의한 속성과 메서드를 가지게 됩니다.
- 속성(Attribute) 또는 멤버 변수(Member Variable):
- 객체가 가지는 데이터. (Ex. 자동차가 객체일 경우 브랜드, 모델, 색상 등이 데이터)
- 메서드(Method) 또는 멤버 함수(Member Function):
- 객체가 수행하는 동작이나 행위. (Ex. 자동차가 객체일 경우 가속, 제동, 방향 전환 등이 메서드)
- 인스턴스:
- 클래스로부터 생성된 실제 객체를 의미. (Ex. 자동차가 객체일 경우 그랜져 하이브리드 신형이 하나의 인스턴스가 되는 것)
이를 PYTHON 프로그래밍으로 나타내보면 다음과 같습니다.
# Car 클래스
class Car:
def __init__(self, brand, model, color):
self.brand = brand
self.model = model
self.color = color
self.speed = 0
def accelerate(self, increment):
self.speed += increment
def brake(self, decrement):
self.speed -= decrement
# Car 클래스의 인스턴스 생성
my_car = Car(brand="Hyundai", model="Grandeur", color="Blue")
클래스는 객체를 생성하기 위한 일종의 설계도 또는 템플릿입니다. 위 코드에서 볼 수 있듯이 객체는 클래스에서 정의한 속성과 메서드를 갖게 됩니다. 보통 인스턴스의 개념과 객체의 개념을 동일시한다고 합니다.
추가적으로 객체지향언어는 객체지향프로그래밍의 개념과 원칙을 지원하는 언어를 말합니다. Java, C++, Python, Ruby, C# 등이 있습니다.
따라서 우리는 프로그래밍에서 객체 지향 프로그래밍을 한다는 것의 의미와 특장점들을 알게 되었습니다.
잘못된 내용이 있거나 수정이 필요한 부분은 댓글 주시면 감사하겠습니다.
'About my life > Development Studies' 카테고리의 다른 글
스크립트 언어와 프로그램 언어의 차이점: CS지식 (73) | 2023.12.07 |
---|---|
[OOP] 객체지향프로그래밍 장점: 구체적인 예시 (126) | 2023.11.29 |
[IT] 효과적인 프로젝트 기획: 주요 단계와 고려 사항 (98) | 2023.11.28 |
[WEB] 웹 프레임워크 장단점 (Django, Flask, Express.js, Spring Boot, Ruby on Rails) (142) | 2023.11.27 |
[MVC] Model-View-Controller 디자인 패턴이란 ? (25) | 2023.11.27 |