개발공부/SK Networks Family AI bootcamp 강의노트

6일차 [파이썬기초(iterator,class,상속)]

HyunJung_Jo 2025. 1. 14. 19:40

1. Iterator

  • 메모리 효율적 사용
  • 한 번에 하나의 요소만을 메모리에 유지하므로 대용량 데이터 처리시 유용하다.
  • 파이토치가 적극적으로 사용한다.
  • for문과 같은 결과를 주지만 메모리 사용량이 훨씬 줄어듬 

next, generator (대용량 데이터 처리시 중요함)

계속 실행하면 결과값이 차례로 1,2,3 나오다가 stop 된다

https://miki3079.tistory.com/52

 

[Python] 파이썬 이터레이터(Iterator) 사용법과 예제

1. 이터레이터란? 이터레이터는 파이썬에서 반복 가능한 객체를 다루는 데 사용되는 개념입니다. 이터레이터를 사용하면 반복 가능한 객체의 요소에 순차적으로 접근할 수 있습니다. 이터레이

miki3079.tistory.com

 


2. import function

아래는 import 하는 법을 상술한 것이다.

2-1. common folder에 utils.py, constant.py생성

2-2. common/constant.py, common/utils.py 작성

  • annotation 쓰는 법
# constant.py
import enum
class TEST(enum.Enum):
    A = enum.auto()
    
# ===============================================
# utils.py 
from .constant import TEST

def get_test(p_test:TEST) -> str: # <== annotation
    return p_test.name
get_test

# a:int #<== annotation (hint)
# hint, not error
def add(a:int, b:int):
    return a+b

def get_test(p_test:TEST): # <== annotation
    print('hi')
    return p_test.name

2-3. import 테스트

# common 폴더 밖에서 임의 파일 생성
from common.constant import TEST
from common import utils as u # alias, 별칭

u.get_test(TEST.A) # 'hi' A

 

3. 테마 색상으로 데이터 구별하기

글꼴 테마를 정했을 때, 색깔별로 클래스,함수, 변수, 명령어 등 다 다르게 표기된다. 이를 유의하여 보면 좀 더 명료하게 프로그램을 볼 수 있다.

 

4. Class

건축가가 아파트 설계도를 만들어서 아파트를 만든다.

= 개발자가 클래스를 설계하여 객체를 만든다.

4-1. 객체 생성

 

4-2. 클래스 함수

 

5. 상속

  • 부모 자식간의 관계

 

6. 기사와 마법사 싸움

# 1.기사와 마법사 캐릭터 구현
# 1-1. 기사
# (1) 변수: 체력
# (2) 함수: 공격(10~40), 방어 (체력0 이면 사망)
# 1-2. 마법사
# (1) 변수: 체력, 마나
# (2) 함수: 공격(10~40,마나소모 20), 방어 (10~40,마나소모 20,체력0 이면 사망), 힐(마나소모 20)
# 기사는 공격이나 방어 중 하나, 마법사는 공격,방어,힐 중 하나 선택해서 활동함.
import random

class Knights:
    def __init__(self,hp=100):
        self.hp = hp

    def attack(self):
        self.attack_point = random.randint(10,40)
        print(f'기사가 {self.attack_point}만큼 공격했다!')
        return self.attack_point
    
    def defend(self,opponent_attack:int)->None:
        if random.random()<0.5: # 방어 확률
            print('기사가 방어 성공했다!')
            return 
        self.hp -= opponent_attack
        print(f'기사가 방어에 실패하여 체력이 {self.hp} 되었다!')
    

class Wizards:
    def __init__(self,hp=100,mana=100):
        self.hp = hp
        self.mana = mana
    
    def attack(self):
        if self.mana <=0:
            print(f'마법사가 마나가 없어서 공격 불가')
            return 0
        attack_point = random.randint(10,40)
        self.mana -=20
        print(f'마법사가 {attack_point}만큼 공격했다! 마나는 {self.mana}남았다.')
        return attack_point

    def defend(self,opponent_attack):
        if self.mana<= 0:
            self.hp -= opponent_attack
            print(f'마법사 마나가 없어서 방어 불가.남은 체력은 {self.hp}입니다.')
            return

        if random.random()<0.5:
            self.mana -=20
            print(f'마법사가 방어 성공하였다.마나는 {self.mana}남았다.')
            return

        if not self.hp <=0:
            self.hp-=opponent_attack
            self.mana -=20
            print(f'마법사가 방어에 실패하여 체력이 {self.hp}남았고 마나는 {self.mana}남았다.')
            return
        
    def heal(self,opponent_attack):
        self.hp -= opponent_attack
        self.hp += 20
        self.hp=100 if self.hp>=100 else self.hp
        if self.mana ==0:
            print('마나가 없어서 힐에 실패하였다.')
            return
        self.mana -=20
        print(f'마법사가 힐에 성공하여 현재 체력은 {self.hp},마나는 {self.mana}')

def play_game():
    knight1 = Knights()
    wizard1 = Wizards()
    while True:
        # 기사 공격, 마법사 방어
        knight_attack_pt = knight1.attack()
        action = random.choice([wizard1.defend,wizard1.heal])
        action(knight_attack_pt)
        if wizard1.hp <=0:
            print('마법사가 져서 게임을 종료합니다.')
            break
        
        # 마법사 공격, 기사 방어
        wizard_attack_pt=wizard1.attack()
        knight1.defend(wizard_attack_pt)
        if knight1.hp <0:
            print('기사가 져서 게임을 종료합니다.')
            break
        print('='*30)

if __name__=="__main__":
    play_game()

 

이걸 어떻게 하면 더 고도화 시킬 수 있을까?

 

[ 번외 ]

IT 개발 직군

솔루션 업체에서 리스크 관리(새로 직원 뽑고 자를 때 위험부담)를 위해서 SI, SM업체를 이용한다.

코드 몽키는 수동적으로 따르기만 하는 사람. 그렇게 되지 않으려면 능동적으로 하는 버릇을 키워야 한다.

  • 솔루션 업체
    • 카카오, 네이버, 쿠팡.. 등
  • SI 업체
    • 솔루션 업체에서 만들고 싶은 서비스 또는 기존 서비스를 고도화하는 작업을 하기 위해 진행하는 모든 개발을 하는 업체
  • SM 업체
    • 새로운 서비스를 유지보수하는 개발업무를 맡는 업체