| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 제네릭프로그래밍
- C++
- 11382번
- OpenCV
- OOP
- 주피터
- 백준
- 연산자오버로딩
- 코드잇
- 얕은복사
- c++코딩테스트합격자되기
- 동적바인딩
- 코딩테스트
- 람다식
- 유도클래스
- 점프투파이썬
- 기본클래스
- python
- 상속
- 깊은복사
- 멤버함수로구현
- 참조자
- 포인터
- 인프런
- 스택
- 데이터사이언스
- STL
- list comprehension
- 다형성
- 프로그래머스lv2
- Today
- Total
WjExplor Story
2025.09.26(화) - 1주 2일차 강의 복습 (3) - 객체와 클래스 본문
2025.09.26(화) - 1주 2일차 강의 복습 (3) - 객체와 클래스
더블유제이플로어 2025. 9. 26. 13:51객체 지향 프로그램 (OOP)
~5시까지 실습
실기 첫 수업은 보충수업
지금까지 나갔던 것에서
이해도가 절반 이하인 사람들 모아서
사람들에게 정리할 이다.
객체 지향 프로그램이 그리 길지 않으니 진행하자.
**객체 지향 프로그래밍(OOP)**: 명령의 대상을 **객체**로 묶어 관리하는 방식
파이썬에 리스트를 만든다면
append() remove() 등
리스트를 만들었을 뿐인데 수많은 리스트 함수들이 들어가있다.
그런게 객체 지향 프로그램이랑 있다
리스트는 리스트에 적합한 메서드
딕셔너리는 딕셔너리에 적합한 메서드
같은 메서드라도
원소 추가하는 추가하는
자료형은 append() 인데
다른 객체를 사용하면 다른 객체를 사용하는 append() 이다.
문자는 문자
숫자는 숫자
리스트는 리스트 이렇게 사용함
첫번째 장점은 코드 재사용성 (가장 큰 장점)
str 을 자료를 만들면
대소문자로 변환하거나, 숫자를 세거나
수많은 메서드들을 객체를 만들때
string 으로 만들었을 뿐인데
메서드를 다시 사용할 수 있다
그래서 코드 재 사용성이 장점이다.
코드를 길게 쓰지 않아도 되고
코딩을 쉽게 할 수 있다.
유지보수가 용이한 장점도 있다. (이것도 큰 장점)
문자열 100개 모두를 각각 수정하는게 아니라
문자열 특성을 바꾸어주면 동시에 해줄 수 있다.
기능을 객체 단위로 묶어서 관리하면 된다.
현실 세계 모델링에 적합하다.
현실 개념에서 그대로 코드 표현하기 좋다.
자동차는 달린다
사람은 공부한다
일상 개념에서 코딩으로 표현하기 가능하다.
단점도 있다.
파이썬이랑 연관성이 깊은 객체 지향 프로그램이다.
1-2. 파이썬과 객체 지향
- 파이썬은 **대표적인 객체 지향 언어** 중 하나입니다.
- 파이썬에서는 **숫자, 문자열, 리스트, 함수까지 모두 객체**로 다루어짐.
- 따라서 `"모든 것이 객체다"`라는 말이 성립합니다.
클래스를 알아봐야한다.
객체를 class 로 만들어봐야한다고 짐작할 수 있다.
클래스와 객체를 구분해서 설명해보자.
클래스와 객체를 설명할때는
클래스 - 붕어빵틀
객체 - 틀로 찍어낸 붕어빵
클래스는 str 클래스(설계도)
객체는 str로 만들어진 문자열 "apple"
실제로 존재해서 컴퓨터 메모리 존재하는 값
보통 클래스 이름에는 대문자로 시작하고
클래스가 끝나면 콜론(:) 을 작성한다.
클래스 안에 종속된 메서드
반드시 만들어야 하는 메서드
def __init__(
initia (초기화) 를 하겠다는 이야기
객체는 init 함수가 실행되어서 초기화가 된다.
객체가 가지고 있을 기능을 직접 해야한다.
리스트에는 클래스 안에 정의되어야 한다.
그래서 함수와 메서드 차이를 알았는데
메서드는 클래스 안에 정의 되어 진다.
객체에 종속이 되어서 객체에만 할 수 있는 걸 메서드라고 한다.
my_car = Car("Hyundai", "blue", 2022)
my_car -> 객체
Car -> 클래스
객체에 점을 찍어서 표현
메서드는 객체에 종속되어서 실행
print(my_car.car_info()) # "2022년식 blue색 Hyundai"
---
클래스 안에 변수도 저장할 수 있다
init
객체가 처음에 만들어 질때 동작하는 함수
생성자
인스턴스 변수
객체마다 별도로 유지되는 속성
인스턴스 변수이다.
강아지 클래스를 다룰때 강아지 이름을 저장하기 위해서
```
class Dog:
def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age # 인스턴스 변수
dog1 = Dog("바둑이", 3)
dog2 = Dog("초코", 5)
print(dog1.name, dog1.age) # 바둑이 3
print(dog2.name, dog2.age) # 초코 5
```
객체마다 가지고 있는 고유한 데이터를 인스턴스 데이터
인스턴스를 만들고 싶기 위해서는
self 을 붙이고
self.name = name
이렇게 작성해야한다.
name과 age 를 입력받는다
처음에는 자기자신에 대해서 정보를 저장하기 때문에
self 가 필수이다.
그리고 매개변수 원하는걸 얻어서
self. 이렇게 저장한다.
__init__ 함수를 저장한다.
메서드
메서드는 클래스 내부에 저장된 함수
해당 객체에 종속되어서 동작하는 행동
self
메서드는 자기 자신에 있어야해서
첫번째 인자는 self로 자기 자신이라고 생각해서
인스턴스 변수 self 를 사용해서 접근 가능하다.
실무에서는 함수랑 메서드를 혼용해서 쓴다
대신 헷갈릴 수 있으니 정확하게 하는게 중요
### 1. 객체 지향 프로그래밍(OOP)이란?
**현실 세계의 대상을 '객체(Object)'로 모델링하여, 코드의 재사용성과 유지보수성을 높이는 프로그래밍 방식**입니다. "자동차는 달린다", "사람은 공부한다"처럼 현실의 개념을 코드로 표현하기에 적합합니다.
* **핵심 장점:**
1. **코드 재사용성:** 잘 만들어진 클래스(설계도) 하나로 수많은 객체를 만들어 재사용할 수 있습니다.
2. **유지보수 용이성:** 관련된 데이터와 기능이 하나의 클래스 안에 묶여있어, 수정이 필요할 때 해당 클래스만 변경하면 되므로 관리가 쉽습니다.
---
### 2. 클래스와 객체의 관계 (설계도와 실제 집)
객체 지향의 핵심은 **클래스(Class)**와 **객체(Object)**를 구분하는 것입니다.
* **클래스 (Class): `설계도` 또는 `붕어빵 틀`**
* 객체가 가져야 할 속성(데이터)과 행동(기능)을 정의한 **템플릿**입니다.
* 클래스 자체는 실체가 아니며, 어떤 객체를 만들어야 하는지에 대한 명세입니다.
* (예: `자동차 설계도`, `str` 클래스, `list` 클래스)
* **객체 (Object / 인스턴스): `설계도로 지은 실제 집` 또는 `붕어빵`**
* 클래스라는 설계도를 바탕으로 메모리에 **실제로 생성된 존재**입니다.
* 각 객체는 자신만의 고유한 속성 값을 가질 수 있습니다.
* (예: `내 파란색 현대차`, `"apple"`이라는 문자열, `[1, 2, 3]` 리스트)
---
### 3. 클래스의 3가지 핵심 구성 요소
클래스는 보통 아래 3가지 요소로 구성됩니다. `Car` 클래스 예시를 통해 알아보겠습니다.
**`Car` 클래스 예시 코드:**
```python
class Car:
# 1. 생성자 메서드: 객체가 처음 만들어질 때 실행됨
def __init__(self, brand, color, year):
# 2. 속성 (인스턴스 변수): 객체의 고유 데이터
self.brand = brand
self.color = color
self.year = year
self.speed = 0 # 초기 속도는 0으로 설정
# 3. 메서드: 객체가 수행할 수 있는 행동
def accelerate(self, amount):
"""속도를 amount만큼 올립니다."""
self.speed += amount
print(f"{self.brand}의 속도가 {self.speed}km/h가 되었습니다.")
def car_info(self):
"""자동차의 정보를 출력합니다."""
return f"{self.year}년식 {self.color}색 {self.brand}"
```
#### 1) 생성자 (`__init__` 메서드)
* `__init__`은 객체가 생성되는 시점에 **단 한 번, 자동으로 호출되는** 특별한 메서드입니다.
* 객체가 처음 만들어질 때 필요한 **초기 속성값**을 설정하는 역할을 합니다. (예: 자동차의 브랜드, 색상, 연식 설정)
#### 2) 속성 (Attribute / 인스턴스 변수)
* `self.변수명` 형태로 정의되며, 각 객체가 **개별적으로 가지는 데이터**입니다.
* `my_car = Car(...)` 처럼 객체를 생성할 때 전달된 값들이 `self.brand`, `self.color` 등에 저장됩니다.
* `dog1`의 이름과 `dog2`의 이름이 다른 것처럼, 각 객체의 속성은 서로 독립적입니다.
#### 3) 메서드 (Method)
* 클래스 내에 정의된 **객체에 종속된 함수**로, 해당 객체의 행동(기능)을 정의합니다.
* 메서드의 **첫 번째 매개변수는 반드시 `self`**여야 하며, 이는 **메서드를 호출한 객체 자신**을 의미합니다.
* 메서드는 `self`를 통해 객체 자신의 속성에 접근하거나 수정할 수 있습니다. (예: `self.speed += amount`)
---
### 4. 클래스와 객체 사용하기
```python
# Car 클래스(설계도)를 바탕으로 my_car 라는 실제 객체(집)를 만듭니다.
# 이 때 __init__ 메서드가 자동으로 실행됩니다.
my_car = Car("Hyundai", "blue", 2022)
# 객체의 속성에 접근하기
print(f"내 차의 브랜드는 {my_car.brand}입니다.") # Hyundai
# 객체의 메서드 호출하기
print(my_car.car_info()) # 2022년식 blue색 Hyundai
my_car.accelerate(30) # Hyundai의 속도가 30km/h가 되었습니다.
my_car.accelerate(20) # Hyundai의 속도가 50km/h가 되었습니다.
```
'AI 엔지니어 부트캠프 > 파이썬 데이터 분석 기초와 머신 러닝 기초' 카테고리의 다른 글
| 데이터 사이언스 Toolkit (0) | 2025.09.30 |
|---|---|
| 문자열 압축 게임 (0) | 2025.09.26 |
| 단어장 만들기 (0) | 2025.09.26 |
| 숫자 맞히기 게임 (0) | 2025.09.26 |
| 2025.09.26(화) - 1주 2일차 강의 복습 (2) - 파이썬 응용 (0) | 2025.09.26 |