벌써 2주차이다. 파이썬 기초와 SQL 에 대해 배운 바, 이에 대해 정리하는 시간을 갖겠다. 내가 주로 잘 몰랐던 개념이나, 다시 상기하고 싶은 개념에 대해서 자세히 정리 및 실제 구현해보고, 이미 알았던 부분은 키워드만 적겠다.
1. 함수
- 입출력 유무에 따른 함수의 경우의 수 4가지
- 전역변수,지역변수
- 입력변수 디폴트값 설정 `def func(a=20):...`
- 키워드 가변 파라미터 (*args tuple, **args dict) `def func(*args)`
- 람다함수 :`lambda a,b: a+b`
- closure : 내부함수 (함수 안의 함수)
- call back : 함수를 입력인자로 전달
- decorate: @decorator_func
# decoration
# 직접 짜본 코드
# 마나가 부족한 것을 알려주는 경고문구
def lack_of_mana(param_func):
def wrapper(mana):
if mana <=0:
print('마나가 0입니다!!')
return # 마나가 부족하면 함수 호출 중단
param_func(mana)
return wrapper
@lack_of_mana
def check_mana_capacity(mana):
print(f'현재 마나는 {mana}입니다.')
mana=-10
check_mana_capacity(mana)
2. Iterator
- 대용량 데이터 처리시 효율적!!-
for문과 달리 한번에 하나의 요소만을 메모리에 유지하여 훨씬 효율적이며, 대용량 데이터 처리시 유용하다. 파이토치에서 많이 쓰인다.또한 지연 평가를 지원하는데, 계산 비용이 큰 작업 수행시 효율적이다.
# iteration
icecream = ['chocolate','vanilla','green tea']
iter_ic= iter(icecream)
for i in iter_ic:
print(i)
class NumberIterator:
def __init__(self, start, end):
self.start = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.start > self.end:
raise StopIteration
else:
num = self.start
self.start += 1
return num
# 숫자 이터레이터 사용 예제
my_iterator = NumberIterator(1, 5)
for num in my_iterator:
print(num)
3. import
- 외부 스크립트 1에서 함수 1을 만들어 스크립트2에서 함수1을 가져다 쓰는 방법
4. 깨알 팁
- annotation하는 법 : `def add(a:int, b:int): -> int ...` I/O type 힌트 주기
- alias : import pandas as pd
- 테마 색상으로 데이터 타입 구별 (클래스,함수,변수,명령어 등)
5.class (상속)
# 아이스크림 클래스 기본속성: 차갑다, 부드럽다.
# 인스턴스 속성: 맛, 가격
class Icecream:
temperature='cold'
texture='soft'
def __init__(self,flavor,price):
self.flavor=flavor
self.price = price
def sell(self):
print(f'{self.flavor}맛 아이스크림 가격은 {self.price}원입니다.')
choco_icecream = Icecream('choco',3000)
choco_icecream.sell()
class haagendazs(Icecream):
def __init__(self, flavor, price,seller):
super().__init__(flavor, price)
self.seller = seller
def describe_seller(self):
print(f'{self.seller}에서 파는 아이스크림입니다.')
gs25_haagendazs = haagendazs('그린티',10000,'gs25')
gs25_haagendazs.sell() # sell() 함수 발동됨.
gs25_haagendazs.describe_seller()
6.private, public function
# 마나 사용
class Mana:
def __init__(self,initial_mana=100):
self.__mana = initial_mana
def use_mana(self,amount):
if self.__mana < amount:
print('마나 부족해요.')
self.__show_mana()
return
self.__mana -= amount
self.__show_mana()
def get_mana(self,amount):
if self.__mana+amount > 100:
print('마나 maximum 도달')
self.__mana = 100
self.__show_mana()
return
self.__mana += amount
self.__show_mana()
def __show_mana(self):
print(f'현재 마나양은 {self.__mana}입니다.')
athour_mana = Mana()
athour_mana.use_mana(10)
athour_mana.use_mana(30)
athour_mana.use_mana(50)
athour_mana.get_mana(30)
athour_mana.get_mana(100)
athour_mana.use_mana(110)
"""
현재 마나양은 90입니다.
현재 마나양은 60입니다.
현재 마나양은 10입니다.
현재 마나양은 40입니다.
마나 maximum 도달
현재 마나양은 100입니다.
마나 부족해요.
현재 마나양은 100입니다.
"""
7. magic method
__init__, __len__, __getitem__ , __call__ 함수들
8. 표준 라이브러리
- collection.Counter() 클래스, dict를 상속받아 딕셔너리로 시퀀스형 데이터 값 갯수를 반환한다.
- math.pi, e, log(), exp(), sqrt(),ceil(), floor(), pow()
- td= datetime.now() -> td.year, td.month, day, hour, minute, second, microsecond,
- td.date(), td.time(),td.weekday()
- strftime (string format time): 날짜/시간 객체를 문자열로
- strptime (string parse time) : 문자열을 날짜와 시간 객체로
- timedelta 날짜나 시간에 대한 연산
- dateutil 월 단위 연산가능
- encode():str to byte / decode() : byte to str
드디어 파이썬이 끝났다. 아직도 많이 배워야할 것이 보인다. 나는 클래스까진 이해하고 왔는데, 데코레이터, 가변함수,상속, private, public 함수 등을 알 수 있어서 좋았던 시간이었다. 알려주신 공부법으로 직접적으로 내가 지지고 볶는 식으로 공부해보니 많이 배워지는 것을 느낀다.
9. RDB
- 데이터 종류: 정형/반정형/비정형 , 요즘은 엄청나게 늘어나고 있는 비정형 데이터를 AI로 쉽게 다뤄지고 있음
- DB 필요성: 실시간, 최신화, 공유, 내용참조, 논리적 독립성
- DBMS: 디비버 app으로 dbms 접속하여 데이터 조회 및 조작 가능
- RDB (관계형,schema) , NoSql (구조화 없음)
10. DB modeling
- 업무파악 >
설계 [개념 Data modeling (도식화) >
논리 DM (데이터타입,관계도) >
물리 DM (개체,인덱스 생성) ]
> 구현 - 실습했는데 이 부분은 따로 복습예정
11. DDL (Data Definition Language)
- DB 생성, 수정, 삭제
- create, alter, drop
- 디비 생성,삭제는 중요한 문제이기에 신입이 DDL할 일은 별로 없다.
- `create table mytable(id int unsigned auto_increment,...)
- auto_increment: 기존 id값보다 1이 큰 값을 id에 넣는 함수
- unsigned: 양수 데이터만 쓰게
12. DCL (Data Control Language,권한제어)
- 계정 조회 `use mysql; select * from user;`
- localhost: 외부 접속 불가 , %는 가능
- 계정 생성: `create user 'test_id'@localhost identified by 'pw1234'`
- 비번 변경: `set password for 'test_id'@localhost ='pw2345'`
- 사용자 삭제 : drop user 'test_id'@localhost;
- 계정 권한 주기 : `grant all previleges on DB_name.table_name to 'teset_id'@localhost`
13. DML (Data Manipulation Language)
- 흔히 우리가 아는 select문이 여기에 해당함
- select, insert, update, delete
- `insert table (col1,col2) values(data1,data2)`
- `select * from table where 1=1 and col1='test' ` => select문 쓸 때 where 1=1은 추가 조건 쉽게 관리 가능
- `delete from table where 1=1 and name='test'` => delete 쓸 때 꼭 where 넣어주기, 안그러면 싹 사라
- 줄 맞춰서 예쁘게 쓰는 연습!
- `select * from DB where 1-1 order by col1` => 셀렉 쓸 땐 기준을 잡자
- or 쓸 땐 괄호 항상 치기 (a or b)
SQL은 DDL,DCL,DML,TCL로 구성되어 있다. 이 중에 DDL은 테이블과 디비를 생성, 삭제,수정할 수 있으며 신입은 극히 하는 경우가 드물다. DCL은 권한 제어이며, DML은 데이터 조회, 삽입, 수정,삭제 등을 할 수 있다. 나는 흔히 실무에서 select문을 썼다. 그 외의 것은 별로 써본 적이 없다. 아무래도 신입이 디비를 직접적으로 만진다는 것엔 리스크가 따랐을 것이다. 이 기회에 디비를 SQL로 다루는 것에 대해 공부해 볼 수 있었고, 꿀팁도 배울 수 있었다.
이상 2주차 공부 정리였다. 생각보다 정리해보니 참 많다. 언제 이렇게까지 시간이 흘렀나 싶고, 공부할 것이 천지라고 생각한다. 내가 겁없이 뛰어든 개발분야이니, 이제 마지막이라고 생각하면서 매진해보련다. 매일 공부하고, 익히고, 운동하면서 기나긴 백수기간을 벗어나고자 한다. 나 자신 화이팅!
'개발공부 > SK Networks Family AI bootcamp 강의노트' 카테고리의 다른 글
10일차 [DML 심화, streamlit과 mysql 연동] (0) | 2025.01.20 |
---|---|
10일차 [ github (clone, branch,merge) ] (0) | 2025.01.20 |
9일차 [SQL(DML)] (0) | 2025.01.17 |
9일차 [SQL (DDL,DCL)] (0) | 2025.01.17 |
8일차 [ DB(RDB,DDL) ] (0) | 2025.01.16 |