객체 지향 프로그래밍 과 클래스
'널널한 교수의 기초 파이썬'의 내용을 인용하여 공부를 목적으로 작성된 게시물입니다.
# 1. 객체 지향 프로그래밍(Object Oriented Programming)
프로그램의 설계 방법론이자 개념의 일종.
절차적 프로그래밍 -> 구조적 프로그래밍 -> 객체 지향 프로그래밍
하나의 큰 알고리즘 -> 큰 문제를 작은 문제로 나누어 해결 -> 작은 문제를 해결, 결합해 큰 문제 해결
객체 지향 프로그래밍은 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들 간의 '상호작용'으로 서술하는 방식이다.
절차적 프로그래밍에 비해 생산성이 높아 소프트웨어 개발을 효과적으로 하기 위한 기법으로 사용되나 개념 이해의 어려움이 따른다.
#2. 클래스(class)
파이썬에서, 객체(인스턴스)는 클래스에서 정의한 속성(state)을 가지고 행위(behavior)를 수행하며 소프트웨어상 속성은 인스턴스 변수(instance variable), 행위 동작은 메소드(method)로 표현한다.
즉, 클래스(class)는 속성(인스턴스 변수)과 행위(메소드)들을 모아놓은 집합체로, 객체의 설계도(blueprint) 또는 형틀(template)이다.
또한, 인스턴스(instacne)는 클래스로부터 만들어지는 각각의 객체를 그 클래스의 인스턴스라고 한다. 따라서 같은 클래스로 만들어진 다른 인스턴스는 서로 다른 인스턴스 변수를 가질 수 있다.
<흔히 생각하는 오류>
객체 지향은 특정 언어가 아닌 개념이므로, class는 객체이며 list는 객체가 아닌 데이터의 집합이라는 설명은 올바르지 못하고 특정 언어가 객체 지향 언어라는 말도 틀린 표현이다. -> 파이썬에서는 모든 것이 객체, 파이썬은 순수 객체 지향을 지원한다.
1
2
3
4
5
6
7
8
9
|
# 파이썬의 리스트 또한 객체임을 확인 가능한 예제
animals = ['lion', 'tiger', 'cat', 'dog']
# list 클래스를 통해 animal 인스턴스(객체) 생성
# 'lion', 'tiger' 등은 객체의 속성이며 인스턴스 변수
animals.sort()
# animals은 리스트 클래스에서 지원하는 메소드를 사용이 가능하다
print(aniamls)
|
cs |
print()를 통해 결과를 확인하면 animals 인스턴스 변수들이 sort() 메소드를 통해 변경되었음을 확인 가능한다.
이를 통해 리스트라는 자료형은 리스트 클래스를 통해 생성된 인스턴스임을 확인 가능하다.

#3. type() vs id()
type() : 입력값의 자료형을 알려주는 함수
id() : 파이썬 모든 객체는 고유의 id를 가지는데, 해당 입력객체의 id를 확인하는 함수
#4. 캡슐화(encapsulation)
캡슐화는 객체 지향 프로그래밍에서 다음 2가지 측면이 있다.
- 객체의 속성과 행위를 하나로 묶는다.
파이썬의 list, tuple 등 다양한 자료형 클래스는 유용한 메소드를 자체적으로 제공하여 우리는 편리하게 호출이 가능하다. 이를 공용 인터페이스라고 하며 이러한 메소드드를 사용 할 때 구체적인 구현 내용은 몰라도 된다. C언어의 헤더 파일과 같은 개념이라 생각하면 좋다. 이렇게 클래스를 정의할 때 내부의 속성과 메서드를 묶어서 하나의 단위로 처리가 가능하다.
- 실제 구현 내용 일부를 외부에 감추어 은닉한다.
파이썬에서는 속성과 메소드가 전부 공개되어있기 때문에 속성을 숨길 방안이 없다. java와 같은 프로그램은 '접근 지정자' 개념이 있어 외부에 접근에 대해 은닉이 가능하지만 파이썬은 직접 호출을 제한하는데 그친다. 이에 대해서는 후에 '정보은닉' 이라는 이유로 포스팅 하겠다.