상세 컨텐츠

본문 제목

Python 15. 객체 지향과 클래스

파이썬

by 아리벱 2024. 3. 20. 09:48

본문

오늘은 객체지향 프로그램에 대해서 알아보겠습니다.

객체 지향(Object Oriented) 프로그래밍이란 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다.

 

객체 지향이외에도 다양한 프로그램이 있습니다. 파이썬에서 주로 사용되지는 않지만 알아보고 넘어가겠습니다!

 

 

1. 객체지향 프로그래밍

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어를 설계하고 구현하는 데 사용되는 중요한 프로그래밍 패러다임 중 하나입니다. 이 패러다임은 프로그램을 "객체"라고 불리는 독립적인 개체로 나누고, 이러한 객체들 간의 상호작용을 통해 프로그램을 구성하는 개발 방법론입니다.


절차지향 프로그래밍

절차지향프로그래밍은 프로그램을 작성할 때 일련의 절차 또는 단계에 따라 코드를 구성하는 방식입니다. 이러한 단계나 절차들은 주로 함수나 서브루틴으로 나누어져 있으며, 각각의 함수는 특정한 작업을 수행합니다. 주로 '입력 - 처리 - 출력'의 순차적인 절차를 따르며, 코드를 위에서부터 아래로 실행하면서 데이터를 처리하는 방식으로 동작합니다. C 언어와 같은 프로그래밍 언어는 주로 절차지향적인 스타일을 따릅니다.

 

함수형 프로그래밍

함수형프로그래밍은 함수(function)를 일급 시민으로 취급하여 프로그램을 작성하는 패러다임입니다. 함수는 다른 함수에 전달되거나 반환될 수 있으며, 함수들 간의 조합을 통해 복잡한 작업을 수행합니다. 상태를 변경하지 않고 데이터를 처리하고, 부작용(side effect)을 최소화하려는 노력이 있습니다. 함수형 언어로는 Haskell, Lisp, Clojure 등이 있으며, 몇몇 다른 언어들도 함수형 프로그래밍을 지원합니다. 함수형 프로그래밍은 병렬처리와 상태 관리에 용이하며, 함수들을 조합하여 간결하고 안정적인 코드를 작성하는데 도움이 됩니다.

 

이제 객체 지향 프로그래밍을 직접 해봐야겠죠??

그러기 위해서는 클래스의 개념을 알아야 합니다. 간략하게 얘기하면 클래스는 객체를 표현하기 위한 문법입니다. 객체를 다루기 위해서는 클래스가 필요합니다.

 

 

2. 클래스

  • 객체(Object): 객체는 현실 세계에서의 실제 개체나 추상적인 개념을 모델링한 것입니다. 예를 들어, 자동차, 사람, 은행 계좌 등이 객체가 될 수 있습니다. 객체는 데이터(속성, 상태)와 메서드(동작, 함수)로 구성됩니다.
  • 클래스(Class): 클래스는 객체를 만들기 위한 템플릿 또는 설계도입니다. 클래스는 객체의 공통 속성과 동작을 정의하며, 객체를 생성하는데 사용됩니다. 예를 들어, "자동차" 클래스는 모든 자동차 객체가 가져야 하는 속성(색상, 속도)과 메서드(주행, 멈춤)를 정의할 수 있습니다.
  • 인스턴스(Instance): 클래스를 기반으로 실제로 생성된 객체를 인스턴스라고 합니다. 클래스는 여러 인스턴스를 생성할 수 있으며, 각 인스턴스는 독립적인 데이터와 메서드를 가집니다.

컴퓨터에서의 게임을 예로 들어보겠습니다. 게임에서 다양한 캐릭터가 존재합니다. 이러한 캐릭터들을 각각의 클래스라고 생각합니다. 클래스(캐릭터) 하나를 지정하여 그 안을 살펴보겠습니다. 이 캐릭터는 여러 속성을 지녔으며 여러 메소드를 가지고 있을 것입니다. 속성으로는 키, 몸무게, 공격력, 체력등이 있습니다. 메소드로는 몬스터를 죽이기 위한 몸통 박치기, 불 내뿜기 등이 있을 것입니다. 이런 식으로 속성과 메소드를 구분하여 생각하면 좋을 것 같습니다.

 

2-1. 클래스 만들기

클래스를 생성하여 속성, 메소드를 정의하여 작성하는 문법입니다.

 

이번에는 객체를 생성해보겠습니다.

 

2-1. 객체(인스턴스) 생성

Sean, Jim이라는 객체가 생겼음을 확인할 수 있습니다.

 

2-2. 객체 속성 초기화

 

2-3. 메서드의 사용

Buddy 클래스의 money 메소드는 메소드의 인자가 self뿐이므로 실제 메소드를 호출할 때는 인자를 전달할 필요가 없습니다. 왜냐하면 첫 번째 인자인 self에 대한 값은 파이썬이 자동으로 넘겨주기 때문입니다. self를 작성하지 않은 house 메소드는 인스턴스를 통해 호출하게 되면 오류가 발생합니다. 그 이유는 첫 번째 인자인 self에 대한 값은 파이썬이 자동으로 넘겨주는데 self를 작성하지 않았기 때문입니다.

 

3. 생성자

파이썬에서 생성자(Constructor)는 클래스의 인스턴스가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 생성자는 객체의 초기화를 담당하며, 객체가 생성될 때 필요한 속성을 초기화하고 설정하는 역할을 합니다. 파이썬에서 생성자 메서드는 init라고 이름이 정해져 있습니다.

__init__()은 클래스의 뼈대를 잡는 특별한 메소드입니다. 

 

4. 메서드

메서드(Method)는 객체지향 프로그래밍(OOP)에서 사용되는 함수와 비슷한 개념이지만, 클래스 내부에 정의되어 특정 객체에 연결된 함수입니다. 메서드는 해당 클래스의 모든 객체에서 공유되며, 객체의 동작을 정의하거나 특정 작업을 수행하는 데 사용됩니다.

 

4-1. 메서드 정의

여러 메소드를 만들어 인스터스들을 통해 호출해보며 적용해보겠습니다.

 

4-2. 메서드 타입

  • 인스턴스 메서드(Instance Method): 객체의 상태를 조작하거나 객체에 특정 작업을 수행하는 메서드입니다. 대부분의 클래스 메서드는 인스턴스 메서드입니다. 위의 예제에서 보여진 init 메서드도 인스턴스 메서드입니다.
  • 클래스 메서드(Class Method): 클래스 레벨에서 동작하며, 모든 인스턴스가 공유하는 메서드입니다. 클래스 메서드는 @classmethod 데코레이터를 사용하여 정의하며, 첫 번째 매개변수로 cls를 사용합니다.
  • 정적 메서드(Static Method): 특정 클래스나 인스턴스와 관련이 없는 메서드로, 클래스 내부에 정의되어 있지만 클래스나 인스턴스와 독립적으로 호출될 수 있습니다. 정적 메서드는 @staticmethod 데코레이터를 사용하여 정의합니다.

프로그램 개발을 위한 객체 및 클래스등을 배워봤습니다. 객체 및 클래스의 개념을 잘 이해하고 넘어가도록 합시다!

'파이썬' 카테고리의 다른 글

Python 17. Special method  (0) 2024.03.20
Python 16. 상속  (0) 2024.03.20
Python 14. 콜백함수와 람다함수  (0) 2024.03.19
Python 13. 변수의 범위!  (2) 2024.03.19
Python 12. 사용자 정의 함수  (0) 2024.03.15

관련글 더보기