클래스와 객체지향 프로그래밍
클래스(Class)
- 클래스는 객체를 정의하는 설계도와 같은 역할을 함.
- '객체지향형 프로그래밍(OOP)'은 클래스를 사용해 코딩하는 방식.
- 비유: 도장은 클래스에 해당하며, 다양한 도장을 찍을 수 있는 설계도와 같음.
인스턴스(Instance)
클래스를 기반으로 만들어진 실제 객체.
비유: 도장이 클래스라면, 종이에 찍힌 도장 자국이 인스턴스. 도장은 동일해도 찍힌 날짜나 위치가 다를 수 있음.
코드 예시:
참03호 = 참치선물세트() # 클래스 참치선물세트를 기반으로 인스턴스 참03호 생성 참03호.일반 = 12 참03호.야채 = 3 참03호.고추 = 3
클래스와 인스턴스 선언 순서
- 항상 클래스를 먼저 정의한 후, 인스턴스를 생성해야 함.
오브젝트(Object)와 인스턴스의 차이
- 대부분의 경우 동일하게 사용.
- 단, 하나의 오브젝트에 여러 이름이 붙을 경우, 인스턴스와 오브젝트는 구분될 수 있음.
클래스에 메서드 추가하기
클래스 내에서 정의된 함수는 메서드(Method)라고 부름.
self
키워드: 클래스 자신을 참조하기 위한 예약어로, 클래스 내 변수에 접근할 때 사용.메서드 선언 및 사용:
class 참치선물세트(): 일반 = 0 야채 = 0 고추 = 0 def 출력(self, 이름): print('**', 이름, '**') print('일반참치', self.일반) print('야채참치', self.야채) print('고추참치', self.고추) def 출력2(self): self.출력('참치선물세트') 참01호 = 참치선물세트() 참01호.일반 = 12 참01호.야채 = 3 참01호.고추 = 3 참01호.출력2() # 결과: '참치선물세트'와 함께 참치 종류 출력
핵심 포인트
- 클래스는 설계도, 인스턴스는 설계도를 기반으로 만들어진 객체.
- 도장 비유: 도장이 클래스라면, 종이에 찍힌 도장 자국이 인스턴스.
self
는 클래스 내에서 선언된 변수/메서드를 참조할 때 사용.- 클래스는 먼저 정의하고, 인스턴스를 생성해야 함.
- 클래스 내부 메서드는 객체의 행동(기능)을 정의함.
04-5 인스턴스 초기화와 생성자
생성자
__init__()
인스턴스를 생성할 때 초기 값을 설정하는 역할을 함.
변수 초기화를 생성자에서 수행.
코드 예시:
class 참치선물세트(): def __init__(self, 일반, 야채, 고추): self.일반 = 일반 self.야채 = 야채 self.고추 = 고추 def 출력(self): print('일반참치:', self.일반) print('야채참치:', self.야채) print('고추참치:', self.고추) # 인스턴스 생성 및 초기화 참01호 = 참치선물세트(12, 3, 3) 참01호.출력()
언더바 두 개 (
__
)의 의미- 파이썬에서 미리 정해진 특별한 메서드나 변수를 나타냄.
- 예시:
__init__()
,__str__()
,__len__()
.
파이썬에서 변수 선언
- 파이썬은 변수를 미리 선언하지 않고 생성자에서 정의하는 방식을 선호.
- 이는 파이썬의 immutable 특성 때문으로, 생성자에서 변수를 초기화하면 관련된 특이 현상을 피할 수 있음.
클래스 이름과 인스턴스 이름 구분
클래스 이름: 보통 첫 글자를 영어 대문자로 작성.
인스턴스 이름: 첫 글자를 영어 소문자로 작성.
예시:
class TunaGiftSet: # 클래스 이름 pass tuna01 = TunaGiftSet() # 인스턴스 이름
핵심 포인트
- 생성자
__init__()
는 인스턴스 생성 시 값을 초기화함. - 파이썬에서는 변수 선언 없이 생성자에서 변수 정의를 선호.
- 클래스 이름은 대문자로 시작, 인스턴스 이름은 소문자로 시작하여 구분.
- 생성자
04-5 클래스 확장과 상속
클래스 확장: 상속(Inheritance)
상속이란?
한 클래스(슈퍼클래스)의 속성과 메서드를 다른 클래스(서브클래스)가 물려받는 것.클래스 용어:
- 슈퍼클래스(Superclass): 상속을 해주는 상위 클래스. #참치선물세트
- 서브클래스(Subclass): 상속을 받는 하위 클래스. #특별세트
- 비유: 부모 클래스(슈퍼클래스)에서 자식 클래스(서브클래스)로 유산을 물려주는 관계.
코드 예시:
class 참치선물세트(): # 슈퍼클래스 def __init__(self, 일반, 야채, 고추): self.일반 = 일반 self.야채 = 야채 self.고추 = 고추 def 출력(self, 이름): print('**', 이름, '**') print('일반참치', self.일반) print('야채참치', self.야채) print('고추참치', self.고추) class 특별세트(참치선물세트): # 서브클래스 안에 있는게 슈퍼클래스 def __init__(self, 일반, 햄, 카놀라유): super().__init__(일반, 0, 0) # 슈퍼클래스의 생성자 호출 self.햄 = 햄 self.카놀라유 = 카놀라유
오버라이드(Override)
오버라이드란?
서브클래스에서 슈퍼클래스와 같은 이름의 메서드를 다시 정의하는 것.슈퍼클래스의 메서드 기능을 서브클래스에 맞게 변경 가능.
코드 예시:
class 특별세트(참치선물세트): # 서브클래스 def 출력(self, 이름): # 오버라이드된 출력 메서드 super().출력(이름) # 슈퍼클래스의 출력 메서드 호출 print('햄', self.햄) print('카놀라유', self.카놀라유)
실행 예시:
특01호 = 특별세트(6, 3, 2) 특01호.출력('특별세트 01호')
결과:
** 특별세트 01호 ** 일반참치 6 야채참치 0 고추참치 0 햄 3 카놀라유 2
핵심 포인트
- 상속(Inheritance): 서브클래스가 슈퍼클래스의 속성과 메서드를 물려받음.
super()
사용: 슈퍼클래스의 생성자와 메서드를 호출할 때 사용.- 오버라이드(Override): 서브클래스에서 슈퍼클래스의 메서드를 재정의.
- 서브클래스는 슈퍼클래스의 기본 기능을 확장하거나 변경 가능.
04-6 모듈과 패키지
모듈(Module)
- 모듈이란?
코드(클래스, 함수, 변수 등)를 별도의 파일로 저장하여 필요할 때마다 가져와 사용하는 것. - 사용 이유:
- 코드 재사용성을 높임.
- 프로그램 구조를 더 깔끔하고 관리하기 쉽게 만듦.
- 모듈이란?
모듈에서 가져오기 (Import)
특정 클래스, 함수, 변수를 가져오는 방법:
from 참치선물세트클래스 import 참치선물세트
모듈 내 모든 내용을 가져오고 싶다면:
from 참치선물세트클래스 import *
패키지(Package)
패키지란?
- 여러 모듈을 하나로 묶은 디렉토리.
- 패키지는 폴더처럼 구성되며,
__init__.py
파일이 포함됨.
예시:
import matplotlib.pyplot as plt # 패키지(matplotlib)의 모듈(pyplot)을 가져옴
별명(Alias) 사용
긴 이름을 짧게 줄여 사용할 수 있음.
예시:
import matplotlib.pyplot as plt # pyplot을 plt로 사용 plt.plot([1, 2, 3], [4, 5, 6]) plt.show()
핵심 포인트
- 모듈: 파일 단위의 코드 묶음.
- 패키지: 여러 모듈을 묶은 디렉토리.
import
문법:- 특정 클래스/함수/변수 가져오기:
from 모듈명 import 대상명
- 모듈 내 모든 내용 가져오기:
from 모듈명 import *
- 별명 사용:
import 모듈명 as 별명
- 특정 클래스/함수/변수 가져오기:
04-7 파이썬에서 모든 것이 클래스
- 파이썬의 특징
- 파이썬은 모든 자료형을 클래스로 설계하여 사용자가 쉽게 다룰 수 있도록 함.
- 문자열, 리스트, 딕셔너리 등 다양한 자료형에서 클래스 메서드를 활용 가능.
- 5가지 주요 메서드 기능
1. 값의 위치 찾기
.index(값)
리스트에서 원하는 값의 첫 번째 위치(인덱스)를 반환.
예시:
my_list = [1, 2, 3, 2] print(my_list.index(2)) # 결과: 1
2. 값의 개수 세기
.count(값)
리스트에서 특정 값이 몇 번 나타나는지 반환.
예시:
my_list = [1, 2, 2, 3, 4] print(my_list.count(2)) # 결과: 2
3. 값 추가하기 (리스트 전용)
.append(값)
: 리스트의 맨 뒤에 값 추가..extend([값1, 값2])
: 리스트의 맨 뒤에 여러 값 추가..insert(위치, 값)
: 리스트의 원하는 위치에 값 삽입.예시:
my_list = [1, 2, 3] my_list.append(4) # 결과: [1, 2, 3, 4] my_list.extend([5, 6]) # 결과: [1, 2, 3, 4, 5, 6] my_list.insert(2, 99) # 결과: [1, 2, 99, 3, 4, 5, 6]
주의:
append
나insert
에extend
처럼 여러 값을 넣으면 리스트 안에 중첩 리스트가 생성됨.예시:
my_list = [1, 2] my_list.append([3, 4]) # 결과: [1, 2, [3, 4]]
4. 값 삭제하기 (리스트 전용)
.remove(값)
: 리스트에서 특정 값을 찾아 삭제..pop(위치)
: 리스트에서 해당 인덱스 위치의 값을 삭제하고 반환.예시:
my_list = [1, 2, 3, 2] my_list.remove(2) # 결과: [1, 3, 2] my_list.pop(1) # 결과: [1, 2]
5. 순서 변경하기 (리스트 전용)
.reverse()
: 리스트의 순서를 반대로 변경..sort()
: 리스트의 값을 정렬 (오름차순 기본).- 내림차순 정렬:
sort(reverse=True)
- 내림차순 정렬:
예시:
my_list = [3, 1, 4, 2] my_list.reverse() # 결과: [2, 4, 1, 3] my_list.sort() # 결과: [1, 2, 3, 4] my_list.sort(reverse=True) # 결과: [4, 3, 2, 1]
- 핵심 포인트
- 파이썬의 모든 자료형은 클래스이므로 다양한 메서드를 제공함.
- 리스트 전용 메서드: 값 추가, 삭제, 순서 변경 등 다양한 작업 가능.
- 주의:
.append()
나.insert()
로 다차원 리스트가 생성될 수 있음. - 메서드 사용법을 이해하면 자료형을 효율적으로 다룰 수 있음.
04-8 파이썬에서 모든 것이 클래스 (딕셔너리 활용)
- 딕셔너리(Dictionary)의 특징
- 딕셔너리는 key-value 쌍으로 데이터를 저장.
- 리스트나 튜플처럼 순서가 아닌 키(key)로 값을 관리. 즉 방식이 다름.
- 리스트와는 다른 메서드를 제공.
- 주요 딕셔너리 메서드
1. Key 값만 뽑아내기
.keys()
: 딕셔너리의 키 값만 반환.리스트/튜플로 변환:
키값만 = 딕셔너리.keys() 키_리스트 = list(키값만) 키_튜플 = tuple(키값만)
반복문 예시:
for 키값 in 딕셔너리.keys(): print(키값)
2. Value 값만 뽑아내기
.values()
: 딕셔너리의 값(value)만 반환.리스트/튜플로 변환:
벨류만 = 딕셔너리.values() 벨류_리스트 = list(벨류만) 벨류_튜플 = tuple(벨류만)
반복문 예시:
for 벨류값 in 딕셔너리.values(): print(벨류값)
3. Key 값으로 삭제하기
.pop(key)
: 딕셔너리에서 특정 키를 찾아 삭제.리스트처럼 인덱스로 삭제할 수 없으며, key를 사용해야 함.
예시:
my_dict = {'이름': '홍길동', '나이': 30} my_dict.pop('이름') # 결과: {'나이': 30}
4. Key-Value 쌍 추가하기
딕셔너리에 새로운 key-value를 추가.
구문:
딕셔너리[key] = value
예시:
my_dict = {'이름': '홍길동'} my_dict['주소'] = '서울시 송파구 삼전동' print(my_dict) # 결과: {'이름': '홍길동', '주소': '서울시 송파구 삼전동'}
- 핵심 포인트
- 딕셔너리는 key-value로 구성되며 순서가 아닌 key로 값에 접근.
.keys()
와.values()
를 사용해 각각의 키와 값을 쉽게 가져올 수 있음..pop()
메서드로 key 값을 기준으로 삭제 가능 (value나 인덱스로 삭제 불가).- 새로운 key-value 쌍은 대입 연산자로 쉽게 추가.
'리뷰 > 책' 카테고리의 다른 글
[파이썬 코딩의 기술] - 2장 리스트와 딕셔너리 (0) | 2025.02.14 |
---|---|
[파이썬 코딩의 기술] - 1장 파이썬답게 생각하기 (0) | 2025.02.14 |
Do it! 첫 코딩 - 5장 (0) | 2025.02.14 |
Do it! 첫 코딩 - 3장 (0) | 2025.02.14 |
Do it! 첫 코딩 - 2장 (컴퓨터는 어떻게 기억하고 행동할까?) (0) | 2025.02.14 |