학습 날짜: 2025.07.24 ~ 2025.07.25
🟦 Python Class 기초 정리
1. 프로그램 개발 방식
- 순차 지향 프로그래밍(Sequential Flow): 시간의 흐름에 따라 명령어를 나열. 데이터보다는 작성하는 흐름이 중요.
- 객체 지향 프로그래밍(OOP, Object-Oriented Programming): 데이터 중심 방식.
- 장점: 유지보수가 쉬움, 코드 재사용
- 단점: 설계가 어려움 (전체 구조를 미리 구상해야 함)
- 대규모 시스템 개발 시 주로 사용
2. Class 핵심 개념
- class: 설계도, 틀 (거푸집)
- object: 클래스 설계도를 바탕으로 실체화된 것
* component: 독립적이고 재사용 가능한 모듈. 기능 단위 클래스는 컴포넌트로 간주 가능
x = list()
print(type(x)) # <class 'list'>
- <class 'list'> : list class에서 생성된 object 라는 의미
- class list에는 member variable을 넣을 수 있는 공간이 있고, append(), pop() 등 member function이 있음
- 객체를 생성하는 생성자라는 것을 필수로 갖음 ex) list()
- 객체는 생성될 때 자기만의 데이터 공간을 메모리에 가짐
- 'self': 자기 자신 객체를 의미함. 즉 x.append()를 하면 self에는 자동으로 x가 전달된다.
- member function은 class가 공유하는 함수. 즉, 소유자가 class 이고 객체가 이를 호출해 사용할 수 있음

- 속성(attribute, member variable): 'wing_width', 'age', 'color' 등
- 행동(method, member function): 'fly()', 'eat()', 'sleep()' 등
- 객체: 'eagle', 'dove', 'pelican'
3. Magic Method
- python에 내부적으로 built-in된 method. ex) __init__, __str__()
- 아래의 예시에서는 Python 내부에 이미 존재하던 __str__()을 우리가 덮어쓴 것 → 오버라이딩(overriding)
class bird:
#생성자 | 생성자는 파라미터를 가질 수 있음.
def __init__(self, width, height, age, color):
self._wing_width = width
self._wing_height = height
self._age = age
self._color = color
#type code here(clone)
# Magic Method
def __str__(self):
#print하면 얘가 호출됨
return f"{self._wing_width}, {self._wing_height}, {self._age}, {self._color}"
# __str__은 이미 있는데, 우리가 추가해서 변형시킨 것.
# 즉, 기존에 있는 것을 변경. 이를 overriding이라고 함.
4. Member Variable & Underscore
- _변수명: "접근하지 말라"는 의미 (완전한 보호는 아님). python은 public하기 때문.
- .변수명으로 접근은 가능하지만 IDE 자동완성 등에서 숨겨짐
# class 생성자 만들 떄, underscore을 하지 않았더니 eagle. 하면 member variable이 나타남.
eagle2.age = 100
print(eagle2) # 20 -> 100으로 수정됨.
# 따라서, underscore의 의미는 값을 수정 쉽게 못 하게 member variable을 hide함
# _가 있다고 해서 아예 못 바꾸는 것은 아님.
eagle._age = 200
print(eagle)
# . 했을 때 나오지는 않았지만, _age 입력해서 값 수정 가능
5. Class variable
- 클래스 변수는 모든 객체가 공유하며, 클래스 이름으로도 접근가능 ex) bird.bird_count
class bird:
# class variable
bird_count = 0
def __init__(self, width, height, age, color, name):
self._wing_width = width
self._wing_height = height
self._age = age
self._color = color
self._name = name
bird.bird_count += 1
6. Class Method
- 객체가 아닌 클래스가 소유자인 method
- 클래스가 호출 주체이기 때문에 cls를 첫 번째 인자로 받음
- @classmethod 데코레이터 사용 필수
class bird:
# class variable
distance_thr = 0
def __init__(self, width, height, color, name, distance):
self._wing_width = width
self._wing_height = height
self._color = color
self._name = name
self._distance = distance
self._age = self.cal_age()
def __str__(self):
return f"객체이름 : {self._name}, 날개길이 : {self._wing_width}, 날개두께 : {self._wing_height}, 나이 : {self._age}, 색 : {self._color}"
#cal_age() method구현(python 방법)
def cal_age(self):
return self._distance//bird.distance_thr
#class method
@classmethod # notation
def set_distance_thr(cls, dist_thr):
cls.distance_thr = dist_thr
@classmethod
def get_distance_thr(cls):
return cls.distance_thr
#클래스변수 접근
bird.set_distance_thr(1000)
print(bird.distance_thr) # 1000
7. Inheritance
- 자식 클래스는 부모 클래스의 속성과 메서드를 그대로 사용하거나 수정(overriding) 가능
class Employee:
def __init__(self, name, salary):
...
class Manager(Employee): #Employee 상속
def __init__(self, name, salary, bonus):
super().__init__(name, salary)
self._bonus = bonus
def get_salary(self): # 오버라이딩
return self._salary + self._bonus
8. Property
- 변수가 hiding되어 있을 때, 값을 가져오거나 변경하기 위해 사용
- 값을 가져오는 getter와 값을 지정하는 setter가 있음
- @property: getter
- @변수명.setter: setter
- notation 꼭 필요!
class Student:
def __init__(self, name, age):
if age < 7:
raise ValueError("학생의 나이는 7살 이상이어야 합니다.")
self._name = name
self._age = age
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
9. Arbitrary Arguments
- 개수가 정해지지 않은 인자들을 받아 처리
- 주로 넘겨야 하는 인자들이 많을 때 사용.
- print()함수가 arbitrary agruments을 가짐.
그래서 print("번호", 1, "나이" 29)로 해도 알아서 '번호 1 나이 29' 로 출력됨 - 함수 정의 시:
- *args: 튜플 형태로 packing
- **args: 딕셔너리 형태로 packing
# *agrs
def sayhello_1(*names):
print(names)
for name in names:
print(f"Hello, {name}")
sayhello_1("홍길동","홍이동","홍삼동")
# **agrs
def sayhello_2(**names):
print(names.get('y', "out of bound"))
for key in names.keys():
print(f"Hello, {names[key]}"
sayhello_2(x="홍길동", y="신사임당")
'LG U+ Why Not SW Camp 8기 > 학습 로그' 카테고리의 다른 글
| 공부 일지 #11 | Python Files (3) | 2025.07.30 |
|---|---|
| 공부 일지 #10 | Python Utility (3) | 2025.07.30 |
| 공부 일지 #8 | Python Level Test (4) | 2025.07.23 |
| 공부 일지 #7 | mini-project; 가계부 만들기 (1) | 2025.07.22 |
| 공부 일지 #6 | Python 실습 (2) | 2025.07.18 |