- 내일배움캠프 30일차 목차
[오늘 한일]
- 알고리즘 문제풀이
- 장고 개인과제 진행
- 장고 심화강의 수강
- 선발대 특강 수강
- 알고리즘 강의 수강
[오늘 배운점]
파이썬
<새로 알게된 연산>
- eval(문자열)
eval 연산은 문자열이 계산식이라면 계산한 결과를 반환해준다.
- set 집합형 연산
set은 이터러블한 데이터를 집합으로 만들어주는데,
중복값을 없애기 때문에 적절히 사용될 때가 있다.
집합도 파이썬에서 데이터 타입중 하나이고 몇가지 연산들을 가지고 있다.
집합 in x 로 요소 검사
집합 <= 집합으로 교집합 검사 등이 있다.
- for - else 작성법
알고리즘 강의를 들으며 배운건데,
for 반복문 밑에 else를 작성할수 있다.
그럼 for 반복이 실행되는 동안 한번도 break을 만나지 않았을 경우,
else를 실행하게 된다.
for x in array:
if 조건식:
break
else:
return 값
예컨대 이런식으로 작성할수 있다.
선발대
<재귀함수, 메소드 오버라이딩, 추상 클래스>
재귀함수: 스스로를 호출하는 함수
크게 리턴값이 있는 경우와 없는 경우가 있다.
반복문으로 대체 가능하나, 특정 상황에서는 재귀함수가 훨씬 유리하다.
끝없이 호출되지 않게 유의해야한다.
메소드 오버라이딩: 파생 클래스에서 상위 클래스의 메서드를 재정의 하는것.
추상 클래스(Abstract class): 자체적으로 인스턴스를 생성할수 없고 하위클래스에서 반드시 재정의해야 하는 클래스.
인터페이스만 정의된 클래스.
오늘 선발대 특강과 알고리즘 강의를 들으면서,
영어 단어를 많이 더 외워야 겠다는 생각이 들었다.
기능의 이름에서 어떤 동작인지 알수도 있고,
변수명을 더 동작에 맞게 지을 수도 있을 것이다.
장고
<장고 데이터 처리를 하는 위치>
입력받은 데이터를 어떤 가공을 한다음 저장한다고 했을때,
하고자 한다면 models.py에서도, views.py에서도 처리를 해줄수 있다.
그럼 어느 위치에서 가공이 이뤄지는게 가장 적합할지 궁금했다.
(튜터님께 질문드려 답을 얻을수 있었다.)
(지난 팀프로젝트에서는 models.py에서 save()를 오버라이드 하여,
저장할때 어떤 동작을 하게끔 했었다.
이번 장고 심화강의에서는 serializers.py에서 create, update를 오버라이드 하여,
가공하는 걸 실습했다.
그리고 그냥 views.py에서 가공하는 것들도 있다.)
MVT 모델을 생각했을때, View에 해당하는 views.py에 작성하는게,
가장 일반적이다.
view는 앱의 로직이 위치하는 곳이다.
그렇기에 이런 처리과정등이 있기에 가장 기대되는 위치이고, 적합한 위치이다.
model.py에 작성하는건 일반적으로 적합하지 않다.
모델은 orm에 관한 내용이 있기로 기대되는 곳이다.
만약 save를 오버라이드해서 데이터 저장시에 가공하는건,
하나의 방법이긴 하나 일반적이지 않으므로, 서로 간의 컨벤션이 필요로 해진다.
또 한편, serializers.py에서 가공을 하게끔 하는 부분은,
데이터 처리를 모듈화 한다는 관점에서 좋은 방법이다.
이를 크게본다면 view 단계에서 처리된다고 볼수 있다.
view에서 serializer를 가져다가 작성하기 때문이다.
장고 drf, 그리고 우리나라의 개발 스타일에는 이런 모듈화를 많이 볼수있고,
많이 사용된다고 하셨다.
결론, drf에선 serializers에 데이터 가공처리를 작성하는게 좋겠다.
(반면, 오늘 과제 진행중에 모델에서 save를 오버라이드 하는것도 시도해봤었다.
save를 오버라이드 한채로 serializer.save를 하면,
force_insert, argument 이런 에러가 나오며 잘 동작하지 않았다.)