Java, spring을 이용한 신입 백엔드 개발자로 모 스타트업에 취업성공했으나,
여러 상황, 연봉 또 개발 환경 등이 내키지 않았습니다.(엄청난 기대를 하고있지도 않았지만)
그렇게 취업준비를 하는 동안 python을 이용한 back-end 라는 새로운 생태계를 학습해보려고 합니다.
python을 공부하게 된 계기:
취업하고 싶은 기업에서 python 백엔드 개발자를 구하는 것을 보았던 것이 첫 번째,
이후로는 python 개발자 공고를 자주 보게 됐던 것이 두번째 이유
언어: c, c++, java ...등등
Note :
- 소스코드를 한번에 전체를 읽고 기계어로 번역한다.
- 컴파일하는 시간이 걸린다.
- 한번 읽는(컴파일) 시간이 필요하지만 이후에는 실행만 하면 돼서 빠르다.
언어: python, ruby ...등등
Note :
- 컴파일과 달리 소스코드를 한줄 마다 기계어로 번역한다.
- 빌드하는 시간이 없다.
- 실행파일이 필요 없고 한줄 마다 실행하기 때문에 디버깅에 유리하다
- 실행되는 한줄 마다 기계어로 바꾸어 전달하기 때문에 컴파일에 비하면 성능이 굉장히 느리다.
int a;
a = 1; // (o)
int b;
b = "1"; // (x) -> error
이를 정적 타입언어 라고 하며 변수의 자료형과 일치하는 값만 담을 수 있다.
a = 1
print(type(a)) # => int
a = "1" #
print(type(a)) # => str, 문제 없음
이를 동적 타입이라고 한다.
동적 타입이 훨씬 더 편리하고 좋을 것 같지만, 사실 문제가 있다.
오류가 발생하거나, 여러 개발자가 같이 작업한다면 다른사람의 코드를 봤을 때 해당 변수의 자료형을 예상하기가 쉽지 않다.
이를 해결하기 위해 type annotation을 사용해 정적 타입 언어처럼 사용할 수 있다.
def get_bmi(kg: int, m: int) -> float:
return kg / (m**2)
이처럼 kg, m이라는 변수는 integer type이라고 명시해 정적타입처럼 사용할 수 있다.
또한 -> type: 을 이용해 함수가 return 하는 자료형도 명시할 수 있다.
이렇게 개발하는 것은 협업을 원할하게 할 수 있다.
Note :
파이썬의 가비지 컬렉션은 레퍼런스 카운팅뿐만 아니라, 순환 참조 탐지 및 세대 기반 가비지 컬렉션을 결합하여 사용합니다.
레퍼런스 카운팅
세대 기반 가비지 컬렉션
가비지 컬렉션의 작동 시기
gc.get_threshold() 함수
성능 문제
Note:
PEP: Python Enhancement Proposal
파이썬 커뮤니티에서 새로운 기능, 개선 사항, 코딩 스타일 등에 대한 제안을 다루는 문서
Note:
PEP 8 제목: "Style Guide for Python Code"
- 파이썬 코드의 스타일 가이드를 제공하는 공식 문서
- 코드의 가독성을 높이고 일관된 스타일을 유지하기 위해 파이썬 코드를 작성하는데 권장되는 규칙들을 제시