Day 13 (23.08.02)
오늘의 파이썬 필수 과정은 어제와 마찬가지로 심화 파트에서 진행이 되었다.
파이썬 실전 미니 프로젝트 였는데 콘솔 상에 패스트캠퍼스 간이 블로그를 작성하는 미니 프로젝트였다. 강사님의 의도는 파이썬에서 배운 기초적인 프로그래밍 문법을 이용해서 CRUD를 구현함으로써 파이썬 숙련도를 올리는 것이었다.
개인적으로 이전에 리액트를 독학할때 한 번, 시에서 지원하는 리액트 오프라인 실강 때(이 때 만난 강사분 덕에 부트캠프를 지원하고자 마음먹었다!) 한 번하여 이번이 CRUD 구현으로는 세번째이다. 물론 그 이전에는 리액트 & 자바스크립트를 베이스로 하였고 코드 량도 더 많았지만 파이썬으로 CRUD 체계를 구현하는게 처음이어서 뭔가 미니 프로젝트 내내 재미있고 집중할 수 있었던 것 같다. :)
(약간 관련 없는 내용이 다만 리액트를 공부하게된 계기가 이전 회사의 프론트엔드 개발자 분들이 리액트를 사용하셨는데 그 때 여유가 된다면 한번 배워보고 싶다! 해서 공부하게 되었다. 덕분에 웹 개발 체계에 대해서 많은 이해와 도움이 되었다.)
이번 강의 코스 진행 시에서 대부분의 내용은 이때 까지 배운 내용들을 숙련시키는 느낌이었고 크게 기억에 남는 부분은 파이썬의 "얕은 복사(shallow copy)" 부분이었다.
아래는 그 이유가 되는 과정이다.
프로젝트가 진행됨에 따라서 많은 함수들이 추가되고, 반복문이 돌아감에 따라 특정 게시글 객체(objecet)들이 담겨 있는 리스트에서 원하는 타겟 게시글 객체를 반복문 내에 지정해 로컬 변수에 "=" 할당 연산자를 이용해서 할당 하고 수정하는 과정에서 로컬 변수(객체)의 속성을 수정(객체 내 메소드 이용)하였는데 최종적으로 객체들이 담긴 리스트 내의 타겟 객체도 수정되었다. 즉 "얕은 복사"를 이용하는 과정이었고 이 과정에서 내 스스로 이해가 잘 안되어 아! 내가 "얕은 복사"에 대한 이해가 충분하지 않구나!라고 생각해 찾아보고 다시 스터디하게 되었다.
"얕은 복사(shallow copy)"는 언뜻 보면 "=" 할당 연산자를 이용하여 특정 변수에 할당하여 할당하는 데이터와 별개처럼 보이지만 실은 데이터를 할당하는 것이 아닌 참조만을 할당하여 그 내용은 같은 메모리 주소를 가리키게 된다. 특히 재밌는 점은 리스트 내의 원소를 지정하여 할당할 경우 얕은 복사로 참조만 할당이 되는데 이를 이용하면 다양한 응용이 가능하다는 점이다. (이번 프로젝트의 경우 원본의 수정), 이후에 다양한 간이 테스트를 해보았다. 아래는 그 중 일부이다.
list1 = [0,1,2,3,4,5]
list2 = [6,7,8,9]
list3 = [list1, list2]
test_list = list3[0]
test_list2 = list3[1]
test_list[0] = 100
test_list2.remove(9)
print(list3[0])
print(list3[1])
print(list1,list2)
list3[0][0] = 1000
print(list1)
====================================================
>>> [100, 1, 2, 3, 4, 5]
>>> [6, 7, 8]
>>> [100, 1, 2, 3, 4, 5]
>>> [6, 7, 8]
>>> [1000, 1, 2, 3, 4, 5]
결론은 왜 많은 강사님들이 파이썬 데이터 타입 강의를 하실때 id() 함수를 여러번 써가며 설명하셨는지 알 것 같다.
아직 실전에서 헷갈림 없이 완벽히 마스터 했다고는 할 수 없지만 어느 부분에 주의를 하며 진행해야 할지 인사이트를 얻은 것에 기뻤다.
이전에는 개념에 대한 이해만 하고 지나가게 되니 실제로 쓰일 때 이런 방지턱이 등장하는 것 같다. 하지만 부정적이지 않다! 이러한 과정을 통해서 내가 모르는 부분이 더 명확히 들어나고 나는 더 탄탄해지니! 즐거운 미니 프로젝트였다.
TIL