채니의 개발일기

객체지향프로그램밍과 파이썬의 클래스와 인스턴스 본문

프로그래밍언어/파이썬

객체지향프로그램밍과 파이썬의 클래스와 인스턴스

윤채니챈 2023. 10. 12. 22:16
728x90
반응형

객체지향 프로그래밍(object-oriented programming)

: 프로그램을 작성할 대상이 되는 실제 세계의 사물(객체)를 그대로 표현하고, 그것들이 어떻게 움직이는지 지정해주고 나서야 비로소 그 객체들에게 일을 시킨다. 

 

** 자동차(객체)를 예를들어 메소드(주행하기,정지하기등)의 설명

 

1. 프로그램을 작성할 대상이 되는 실제 세계의 (객체)를 그대로표현

-  객체 지향 프로그래밍에서는 실제 세계의 개체나 살물을 '객체'라는 프로그래밍 요소로 표현한다.

- 예를들어, 실제 세계의 '자동차'를 프로그램내에서 '자동차'객체로 표현하며 이 객체의 속성에는 '색상', '브랜드', '속도'와 같은 속성(데이터)와 '주행하기','정지하기'등 메서드를 가질 수 있다.

 

2. 그것들이 어떻게 움직이는지 지정해준다.

- 객체의 행동은 메서드로 표현한다.

- '자동차 객체'의 경우 '주행하기'라는 행동은 '속도를 증가시키는메서드', '정지하기'라는 메서드는 속도를 0으로 만드는  메서드로 표현된다.

- 이렇게 메서드를 통해 객체가 어떻게 동작하는지, 어떻게 행동을 할 수 있는지 정의 할 수 있다.

 

3. 비로소 그 객체들에게 일을 시킨다.

- 객체와 그행동(메서드)를 정의한 후, 실제로 프로그램에 해당 객체를 사용하여 원하는 작업을 수행하게 한다.

- 예를들어 '자동차 객체'를 생성한후, '주행하기' 메서드를 호출하여 자동차를 움직 수 있게 한다.

 

-> 이러한 방식은 프로그래밍을 더 직관적이고 이해하기 쉽게 만든다. 실제 세계의 사물을 기반으로 프로그램을 설계하므로,

1) 문제를 해결 하는데 필요로 로직을 더 자연스럽게 구성할 수 있으며,

2) 객체간 상호작용을 통해 복잡한 시스템을 구축가능할 수 있다. 또한,

3) 객체 간의 상호작용을 통해 복잡한 시스템을 구축하면서도

4)각 객체는 독립적으로 동작하므로 코드의 재사용성과 유지 보수성이 향상된다.


  • 파이선에서 클래스의 필요성

예시 상황: 은행 계좌 관리

문제상황:

은행에서 계좌를 관리하려고 할때, 각 계좌는 계좌번호, 소유이름, 잔액 등의 정보를 가지며, 입금, 출금 등의 기능을 수행 할 수 있어야한다

 

만약 clss없이 구현할 결우

account_number = '12345678'
account_name = 'John Doe'
balance = 1000.0

def deposit(amount):
    global balance
    balance += amount
    return balance

def withdraw(amount):
    global balance
    if amount <= balance:
        balance -= amount
    else:
        print("Insufficient funds!")
    return balance

 

class로 구현할 경우

 

class BankAccount:
    def __init__(self, account_number, account_name, balance=0.0):
        self.account_number = account_number
        self.account_name = account_name
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount
        return self.balance

    def withdraw(self, amount):
        if amount <= self.balance:
            self.balance -= amount
        else:
            print("Insufficient funds!")
        return self.balance

# 계좌 객체 생성
john_account = BankAccount('12345678', 'John Doe', 1000.0)

Class 내 BankAccount 클래스를 사용하면, 계좌번호, 소유자이름, 잔액 등의 데이터와 입금, 출금등의 행동을 하나의 '객체'로 묶을 수 있다. 이렇게 하면 데이터와 함수관계가 명확해지며 코드의 복잡성이 줄어들게 된다.

 


  • 클래스란? 

-  똑같은 무언가를 계속 만들어 낼 수 있는 설계도이다. 

- 클래스는 데이터(속성)와 데이터를 처리하는 함수(메서드)를 하나로 묶어서 새로운 자료형으로 정희하는 것이다.

- 이렇게 생성된 객체를 인스턴스(Instance)라고한다

 

* 파이썬에서의 클래스 정의

class ClassName:
	#속성들
    attribute1 = value1
    attribute2 = value2
    
    #생성자
    def __int__(self, param1, param2);
    	self.param1 = param1
        self.param2 = param2
        
    #메서드
    def method_name(self, arguments):
     #메서드 내용

 

- class : 클래스를 정의 할때 사용되는 키워드

- ClassName : 클래스의 이름 

- attribute: 클래스의 속성(데이터)나타낸다

- __init__ : 클래스의 생성자 메서드로, 클래스의 인스턴스가 생성될 때 자동으로 호출된다

- self: 인스턴스 자신을 참조하는 변수로 모든 메서드의 첫번재 매개변수로 전달되어야한다

- method_name: 클래스의 메서드(함수)를 나타낸다

 

*클래스 사용

: 클래스를 정의 한 후에는 그 클래스를 사용하여 인스턴스를 생성하고, 인스턴스의 속성과 메서드에 접근할 수 있다.

 

#인스턴스 생성
instance = ClassName(param1_value, parma2_value)

#속성에 적근
print(instance.attribute)

#메서드 호출
instance.method_name(arguments)

 

* 필드란?

: 객체 지향 프로그래밍에서 사용 되는 용어로, 클래스나 객체 내부에서 데이터를 저장하는 변수를 의미 한다.

: 필드는 객체의 상태나 속성을 나타내며, 다른용어로는 "속성" "멤버변수", "인스턴스 변수"등으로 불린다

 

예를들어 person 클래스가 있다고 가정할때

class Person:
	def __init__(self, name, age):
    	self.name = name
        self.age = age

-> 'name'과 'age'는 'Person'의 클래스 필드이다. 이 필드들은 'Person' 객체의 상태나 속성들을 나타낸다. 즉 각, 'Person'객체는 고유의 'name'과 'age'값을 가질 수 있다.

 

객체를 생성 할 때: 

person1 = Person('Alice',30)

-> 'person1'객체는 'name'필드에 'Alice'라는 값을, 'age'필드에 30이라는 값을 가지게 된다

728x90
반응형