codestates / codestates/ds-blog
[김현재] 파이썬을 객체지향언어라 부르는 이유? #객체지향(OOP) #절차지향(POP) #클래스(Class)
- Dominant language
- No language data
- Stars
- 2
- Forks
- 4
- PR merge metrics
- No merged PRs in 30d
Description
## [ 파이썬 기초 - 2. 파이썬을 객체지향언어라 부르는 이유? #객체지향(OOP) #절차지향(POP) #Class ]
### 💡Q1. What is 객체(Object)?

객체 => (변수) 와 (함수)를 그룹핑한 것.
---
일반적으로 파이썬에서 '객체지향'이라는 개념을 설명할 때, 그 '객체(object)'란 어떤 변수와 함수의 집합을 의미합니다.
또한, 두번째 의미로 자료의 특성에 따른 '객체(object)'를 설명할 때도 있는데, 여기서 객체는 '가변객체(변할 수 있는 객체)' '불편객체(변하지 않는 객체)'로 나뉘어서 쓰이고 있습니다.
오늘의 메인 주제인 '파이썬을 객체지향언어라 부르는 이유?'에서는 첫번째 의미인 (변수와 함수의 집합) 개념으로 객체지향 언어에 대한 설명을 하고자 합니다.
보통, 객체지향프로그래밍(OOP; Object Oriented Programming)라고 하면,
그와 대비되는 개념으로 절차지향프로그래밍(POP; Procedual Oriented Programming)을 떠올릴 수 있습니다.
절차지향과 객체지향은 프로그래밍을 만드는 '순서, 방향성'에 따라서도 정의할 수가 있는데,
흔히 말하는 '미괄식, bottom - up' 과 같은 개념이 '절차지향'에 가깝다면,
'객체지향'은 '두괄식, top - down' 과 같은 개념과 같을 수 있습니다.
최초의 프로그래밍 언어들은 모두 '절차지향언어'였는데요,
대표적인 예로 'C언어'가 있습니다.
C언어의 경우, '함수(function)'기능은 사용할 수 있지만, 뒤에서 상세히 설명할 '클래스(Class) - 변수와 함수를 집합으로 활용하는 개념' 기능은 없습니다.
따라서, 프로그래밍을 만들 때 모든 기능을 '코딩'해야 합니다.
이러한 '절차지향 방식'의 장점은 컴퓨터가 작업하는 순서와 유사하여, 컴퓨터의 연산처리 속도가 빨라집니다.
다만, 소프트웨어와 기술발달로 정보량이 많이 늘어나고, 다양한 기능 요구가 늘어남에 따라서,
프로그램의 복잡도가 늘어나게 되었는데요,
만약 이런 시대에 계속 '절차지향' 방식으로 즉, 모든 기능을 '코딩'하는 방식으로 프로그램을 만들어야 한다면....(what the hell?! @.@) 매우 비효율적이겠죠? ^^
그래서 등장하게 된 것이 '객체지향언어(ex. 파이썬, 자바, C++, etc.)'들입니다.
좋은 예시로 자동차를 만들 때, '엔진 만들고 -> 바퀴 만들고 -> 차체 만들고 -> 조립하고.. ' 와 같은 순서로 프로그래밍을 하는 것이 '절차지향'이라면,
'어떤 자동차가 필요한 지 먼저 정의하고 -> 그에 필요한 바퀴와 엔진, 차체 객체들을 조립' 하는 방식이 '객체지향'이라고 볼 수 있습니다.
►[자동차 예시 출처](https://bit.ly/3lOwTyG)
<절차지향과 객체지향의 차이를 설명한 간략한 그림>
►[절차지향과 객체지향 그림 출처](https://gbsb.tistory.com/3)
---
### 💡Q2. 왜 파이썬을 객체 지향 언어라고 할까요?
말 그대로 객체를 지향하는 언어다.. 라는 의미인데요^^
(이게 무슨 순환논리? 같은 말 되풀이? -_- 라고 하실 지 모르겠지만..)
풀이를 하자면, 파이썬에서도 '절차'를 지향할 수 있고, '객체'를 지향할 수도 있다는 의미입니다.
다만, 파이썬이라는 프로그래밍 언어는 조금 더 객체 지향 프로그래밍을 하기가 용이하기 때문에 객체지향언어라고 부르는 것인데요,
바로 뒤에 예시로 보여드릴 '클래스(Class)'라는 기능이 파이썬을 객체지향언어라고 부르는 대표적인 이유로 볼 수 있겠습니다.
이러한 객체지향에 속하는 프로그래밍 언어들에는 자바, C++ 등이 있습니다.
이에 대비되는 개념인 '절차지향언어'라고 불리는 'C언어'와 같은 언어는 절차 지향 프로그래밍을 하기가 용이하기 때문에 그렇게 부르고 있습니다.
예를 들어, C언어에는 '함수'는 존재하지만, 뒤에서 설명할 파이썬의 '클래스(Class)'의 개념은 존재하지 않습니다. 위에서 객체를 (변수)와 (함수)를 그룹핑한 것이라고 말씀드렸는데요, '클래스'가 대표적인 파이썬의 객체지향 기능 중 하나입니다.
즉, C언어에는 이렇게 (변수)와 (함수)를 묶어낼 수 있는 (모듈화/객체화) 기능이 없습니다.
그래서 코딩 시 문단을 정렬하여 객체화한 듯한 시각적 효과는 낼 수 있을지 몰라도, 실제 '객체적' 기능을 할 수는 없습니다.
아래 '파이썬 클래스(Class)기능'을 보시면 좀 더 이해에 도움이 되실 것 같습니다.
### 💡 What is 클래스(Class)?
파이썬이 '객체지향'방식 프로그래밍에 유용한 언어라고 말씀을 드렸는데요,
그 유용한 기능 중 하나인 '클래스(Class)'에 대하여 간략히 소개해드리겠습니다.
먼저, 클래스와 객체를 쉽게 표현한 그림입니다.
►[출처 - 점프투파이썬](https://wikidocs.net/28#_2)
아래는 '점프투파이썬'에 나온 클래스 코딩 예시입니다.
'함수'개념을 아신다면 'def'가 함수라는 것을 아실 텐데요,
아래와 같은 클래스는 '여러 개의 함수와 변수를 모아서 기능을 구현'할 수 있습니다.
또한, 클래스의 강력한 기능은 '상속(inheritance)'기능인데요.
어떤 한 클래스의 기능을 다른 클래스가 물려받을 수 있습니다.
즉, '절차지향'언어였다면 A기능을 하는 코딩 그룹의 기능을 다시 한번 B기능을 요구하는 코딩그룹에 혼용해서 쓰고 싶을 때,
다시 또 그 'A코딩'을 써야하는 (혹은 복붙해야 하는) 문제가 있을 수 있다면,
'객체지향'언어에서는 A클래스의 상속기능을 활용해 가져오기만 하면 B클래스에서도 똑같이 기능하게 할 수 있습니다.
```javascript
>>> class FourCal:
... def __init__(self, first, second):
... self.first = first
... self.second = second
... def setdata(self, first, second):
... self.first = first
... self.second = second
... def add(self):
... result = self.first + self.second
... return result
... def mul(self):
... result = self.first * self.second
... return result
... def sub(self):
... result = self.first - self.second
... return result
... def div(self):
... result = self.first / self.second
... return result
...
>>>
```
---
### 💌 네, 오늘 [ 파이썬 기초 - 2. 파이썬을 객체지향언어라 부르는 이유? #객체지향(OOP) #절차지향(POP) #Class ] 개념에 대하여 알아봤구요,
### 클래스의 상세한 기능과 방식에 대한 내용은 좀 더 깊어질 수 있어서 다음 포스팅 때 진행하도록 하겠습니다^^
### 바로 궁금하신 분들은 ['점프투파이썬-클래스편'](https://wikidocs.net/28#_2) 참고하셔도 도움이 되실 것 같습니다.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.