Python

[Python] 클래스(Class)와 객체(Object)

2022. 8. 20. 16:25

클래스(Class)와 객체(Object) 


Keyword

 

클래스의 정의

클래스(Class) 와 객체(Object)

객체(Object)와 인스턴스(instance)

메서드(method)

self

생성자(Constructor)


클래스의 정의 

 '클래스란 무엇인가?

 

파이썬은 객체 지향 언어(object-Oriented programming, OPP) 언어

 

클래스 객체지향 프로그래밍의 기본 구성요소이다.

클래스 연관있는 데이터와 기능을 묶은 객체를 만들기 위한 설계도

같은 형태의 무언가를 만들어내기 위한 틀

 

🪔 객체 지향 프로그래밍이란?

더보기

객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나. 

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립적인 단위, 즉 ‘객체’들의 모임으로 파악하고자 하는 것.

 

예제

 사람들의 키, 몸무게를 입력받아 체질량 지수를 구하는 프로그램을 만들어보자

1. BMI 구하는 함수 만들기
2. 사람에 따라 이름/키/몸무게를 입력받아 변수로 저장하고 이 변수를 통해 값을 구하고 출력한다.
def calc_bmi(height, weight):
    height = height * 0.01
    return weight / (height ** 2)   # BMI 계산 함수 calc_bmi


person_1_name = 'John'              # 키 몸무게 입력받아 변수로 저장
person_1_height = 185
person_1_weight = 85

person_2_name = 'Jack'
person_2_height = 170
person_2_weight = 80

person_1_bmi = calc_bmi(person_1_height, person_1_weight)
person_2_bmi = calc_bmi(person_2_height, person_2_weight)

print(f"{person_1_name}'s bmi = {person_1_bmi:.2f}")
print(f"{person_2_name}'s bmi = {person_2_bmi:.2f}")

> 사람 수가 많아지면, 변수가 늘어나고 관리도 힘들어질 것이다..

 

▶ 이 체질량 구하기 프로그램을 클래스로 만들어보자

1. Person이라는 클래스를 만든다.
2. 생성자(Constructor)와 메서드(Method)를 만든다.
class Person:
    def __init__(self, name, height, weight):
        self.name = name
        self.height = height
        self.weight = weight
    
    def bmi(self):
        # 키는 입력받을 때 cm 단위로 입력받지만, 계산을 위해 m 단위로 변경
        height = self.height * 0.01     
        return self.weight / (height ** 2)
    
    def print_bmi(self):
        print(f"{self.name}'s bmi = {self.bmi():.2f}")
        
# 객체 생성
person_1 = Person('John', 185, 85)
person_2 = Person('Jack', 170, 80)


person_1.print_bmi()
person_2.print_bmi()

> 메서드(Method) : 클래스 안에 있는 함수

   생성자는 클래스가 객체화가 될 때(클래스 선언해줄 때), 그 때 최초로 1회 선언되는 함수
   (생성자가 객체를 초기화해준다고 생각하면 된다.)


 

예제

1. HelloHealthy 라는 클래스를 만든다.

2. 생성자(constructor)와 메서드(method)를 만든다.

class HelloHealthy:
    def __init__(self, name, height, weight):
        self.name = name
        self.height = height
        self.weight = weight
        
    def bmi(self):
        height = self.height * 0.01
        return self.weight / (height ** 2(
    
    def print_bmi(self):
        print(f"{self.name}'s bmi = {self.bmi():.2f}")

 

클래스(Class)와 객체(Object)

클래스는 연관있는 데이터와 기능을 묶은 객체를 만들기 위한 설계도

 

쿠키커터(틀) [클래스] > 쿠키 [객체]


객체와 인스턴스(Instance)

 

클래스로 만든 객체를 인스턴스라고 한다.

클래스와의 관계를 표현할 때 사용한다.

 

예)

아이스크림 모양 쿠키아이스크림 클래스

아이스크림 모양 쿠키로 만든 아이스크림 모양 쿠키(아이스크림 클래스인스턴스)


 

메서드(method)

객체 안에서 구현되는 함수로 'self'가 꼭 들어가야 한다.

 

self == 객체 자기자신

 

변수의 scope를 생각했을 때 self.~클래스 내에서 자유롭게 사용할 수 있다.

class Person:
    def __init__(self, name, height, weight):
        self.name = name
        self.height = height
        self.weight = weight
    
    # bmi를 구하는 함수 (메서드)
    def bmi(self):
        # 키는 입력받을 때 cm 단위로 입력받지만, 계산을 위해 m 단위로 변경
        height = self.height * 0.01     
        return self.weight / (height ** 2)
    
    # bmi를 출력하는 함수 (메서드)
    def print_bmi(self):
        print(f"{self.name}'s bmi = {self.bmi():.2f}")
   
#  객체 생성
person_1 = Person('John', 185, 85)
person_2 = Person('Jack', 170, 80)

print(person_1.name)
print(person_1.height)
print(person_1.weight)

self == 객체 자기 자신을 의미

 


생성자(Constructor)

객체가 생성되는 시점에 한번 자동으로 호출되는 메서드

 

from datetime import datetime

class Say:
    def __init__(self):
        print(f"[{datetime.now()}] __init__() method called.")
        
    def hello(self):
        print(f"[{datetime.now()}] Hello!!")

print(f"[{datetime.now()}]", '*' * 10)
say = Say()    # Say 클래스를 인스턴스화 한다. < 클래스로 객체를 만들어내는 부분
    
print(f"[{datetime.now()}]", '*' * 10)
say.hello()    # say라는 객체(Say의 인스턴스) 안의 hello라는 함수(=메서드)를 호출

8/28 복습 쿼리