python

[python] 파이썬 클래스 python class

독립성이 강한 ISFP 2022. 2. 22. 01:30
728x90
반응형

1) 클래스란?

클래스를 이용해 프로그래밍하면 데이터를 조작하는 함수를 하나의 묶음으로 관리할 수 있으므로 복잡한 프로그램도 더욱 쉽게 작성할 수 있다.

name="마린"
hp=40
damage=5

tank_name="탱크"
tank_hp=150
tank_damage=35

def attack(name, location , damage):
    print("{0} : {1} 방향으로 적군을 공격 합니다. [공격력 {2}]".format(name,location,damage))
    
attack(name, "1시", damage)
attack(tank_name, "1시", tank_damage)

매번 이런식으로 name, hp, damage 를 입력할 수 없으니 class를 이용하여 더욱 쉽게 할 수 있다.

1-1) 클래스 기초

명함을 구성하는 데이터를 생각해보면 명함에는 ,이름 , 이메일, 주소라는 값이 포함되어 있음.

명함과 관련된 함수를 생각해보면 기본 명함을 출력하는 함수, 고급 명함을 출력하는 함수가 있음

명함을 구성하는 데이터, 명함과 관련된 함수를 묶어서

명함이라는 새로운 객체(타입)를 만들고 이를 사용해 프로그래밍하는 방식=> 객체지향 프로그래밍

데이터(name,email,address)
함수( 기본명함출력함수, 고급명함출력함수)

 

1-2) 클래스 정의

클래스의 목적: 변수와 함수를 묶어서 하나의 새로운 객체(타입)으로 만드는 것

클래스: 붕어빵 틀

인스턴스: 붕어빵 틀에 반죽을 넣어 만들어진 붕어빵

1-3) 클래스에 메서드 추가하기

메서드: 클래스 내부에 정의돼있는 함수(set_info)

class BusinessCard:
    def set_info(self, name, email, addr): # 메서드: set_info
        self.name = name
        self.email = email
        self.addr = addr

member1 = BusinessCard() # member1 : 인스턴스 (객체)
member1
 

변수 member1 객체 BusinessCard 를 담아서 저장한다는 의미. 위의 구문이 실행되면 변수 member1을 이용해서 BusinessCard 객체를 사용할 수 있게 된다. 이렇게 생성된 객체를 인스턴스(instance)라고 부른다. 즉 객체의 설계도를 클래스라고 부르고, 이 설계도를 바탕으로 실제로 사용할 수 있게 만들어진 객체를 인스턴스라고 한다. 이것들을 포괄해서 객체라고 부르기도 한다. 객체라는 말의 의미는 맥락적으로 파악해야 한다.

* set_info 메서드를 정의할 때는 self, name, email, addr의 네 개의 인자가 사용됐는데 메서드를 호출할 때는 왜 세 개만(name,email,addr) 사용될까?

클래스를 정의하는 순간에는 우리가 생성할 인스턴스의 이름이 member1인지 다른거 일지 모르기 때문에 self라는 단어를 대신 사용하는 것

2) 클래스 생성자

class BusinessCard:
    def set_info(self, name, email, addr):
        self.name = name
        self.email = email
        self.addr = addr
    def print_info(self):
        print("--------------------")
        print("Name: ", self.name)
        print("E-mail: ", self.email)
        print("Address: ", self.addr)
        print("--------------------")

member1 = BusinessCard()
member1.set_info("kim", "kim@gmail.com", "USA")
member1.print_info()
--------------------
Name:  kim
E-mail:  kim@gmail.com
Address:  USA
--------------------

 

먼저 인스턴스를 생성한 후 => 생성된 인스턴스에 데이터를 입력

붕어빵에 비유해 보면 붕어빵 틀(클래스)을 이용해 팥소를 넣지 않은 상태로 붕어빵을 구운 후(인스턴스생성) 나중에 다시 붕어빵 안으로 팥소를 넣는 것과 비슷함

* 어떻게 하면 클래스 인스턴스 생성과 초깃값 입력을 한 번에 처리할 수 있을까?

파이썬 클래스에는 인스턴스 생성과 동시에 자동으로 호출되는 메서드인 생성자가 존재한다. 파이썬에서는 __init__(self) 와 같은 이름의 메서드를 생성자라고 하며, 파이썬 클래스에서 __ 로 시작하는 함수는 모두 특별한 메서드를 의미함.

 
class BusinessCard:
    def __init__(self, name, email, addr):
            self.name = name
            self.email = email
            self.addr = addr
    def print_info(self):
            print("--------------------")
            print("Name: ", self.name)
            print("E-mail: ", self.email)
            print("Address: ", self.addr)
            print("--------------------")

member1 = BusinessCard("Kangsan Lee", "kangsan.lee", "USA")
member1.print_info()
--------------------
Name:  Kangsan Lee
E-mail:  kangsan.lee
Address:  USA
--------------------

https://wikidocs.net/1076

728x90
반응형