[python] python 이해 - 1

남순식·2023년 12월 7일
0

파이썬 기초

목록 보기
1/1

Java, spring을 이용한 신입 백엔드 개발자로 모 스타트업에 취업성공했으나,
여러 상황, 연봉 또 개발 환경 등이 내키지 않았습니다.(엄청난 기대를 하고있지도 않았지만)
그렇게 취업준비를 하는 동안 python을 이용한 back-end 라는 새로운 생태계를 학습해보려고 합니다.

python을 공부하게 된 계기:
취업하고 싶은 기업에서 python 백엔드 개발자를 구하는 것을 보았던 것이 첫 번째,
이후로는 python 개발자 공고를 자주 보게 됐던 것이 두번째 이유

01. 인터프리트 방식 언어

1-1. compile, interpret

1-1-1. compile

언어: c, c++, java ...등등

Note :

  • 소스코드를 한번에 전체를 읽고 기계어로 번역한다.
  • 컴파일하는 시간이 걸린다.
  • 한번 읽는(컴파일) 시간이 필요하지만 이후에는 실행만 하면 돼서 빠르다.

1-1-2. interpret

언어: python, ruby ...등등

Note :

  • 컴파일과 달리 소스코드를 한줄 마다 기계어로 번역한다.
  • 빌드하는 시간이 없다.
  • 실행파일이 필요 없고 한줄 마다 실행하기 때문에 디버깅에 유리하다
  • 실행되는 한줄 마다 기계어로 바꾸어 전달하기 때문에 컴파일에 비하면 성능이 굉장히 느리다.

1-1-3. 비교

02. 동적 타입 방식

2-1. 정적 타입, 동적 타입

2-1-1. 정적 타입

int a;
a = 1; // (o)
int b;
b = "1"; // (x) -> error 
  • a와 b라는 변수는 int형만 담을 수 있다.
  • a = 1은 문제없지만 b = "1"과 같이 사용할 수 없다.

이를 정적 타입언어 라고 하며 변수의 자료형과 일치하는 값만 담을 수 있다.

2-1-2. 동적 타입

a = 1
print(type(a)) # => int
a = "1" #
print(type(a)) # => str, 문제 없음
  • a라는 변수에 integer를 넣었다가 string으로 새로운 값을 넣어도 문제 없다.
  • 코드에 의해 변수의 자료형이 결정된다.

이를 동적 타입이라고 한다.

2-1-3. 문제

동적 타입이 훨씬 더 편리하고 좋을 것 같지만, 사실 문제가 있다.
오류가 발생하거나, 여러 개발자가 같이 작업한다면 다른사람의 코드를 봤을 때 해당 변수의 자료형을 예상하기가 쉽지 않다.

2-1-4. 문제 해결 방안

이를 해결하기 위해 type annotation을 사용해 정적 타입 언어처럼 사용할 수 있다.

def get_bmi(kg: int, m: int) -> float:
	return kg / (m**2)

이처럼 kg, m이라는 변수는 integer type이라고 명시해 정적타입처럼 사용할 수 있다.
또한 -> type: 을 이용해 함수가 return 하는 자료형도 명시할 수 있다.
이렇게 개발하는 것은 협업을 원할하게 할 수 있다.

03. Python 2.x, Python 3.x

3-1. Python 2.x

  • 공식문서에서 레거시라고 표현하고 있다.
  • 더 이상 개발 되지 않는다.

3-2. Python 3.x

  • 미래라고 말한다.
  • 계속해서 업데이트 중이다.
  • python3을 위한 모듈, 라이브러리가 개발되고 있다.

3-3. python2->3에서 바뀐 점

  • 새로운 메서드
  • 바뀐 메서드
  • 바뀐 문법
  • 문자열 처리
    • python 2.x
      기본으로 ascii를 이용해 저장
      unicode로 저장할 수 있지만 별도의 함수 필요
    • python 3.x
      기본으로 unicode를 이용해 저장
  • 모듈, 라이브러리가 호환되지 않는 것이 많다.

04. Python GC(garbage collector)

Note :
파이썬의 가비지 컬렉션은 레퍼런스 카운팅뿐만 아니라, 순환 참조 탐지 및 세대 기반 가비지 컬렉션을 결합하여 사용합니다.

  • 레퍼런스 카운팅

    • 레퍼런스 카운팅은 주로 순환 참조를 해결하기 위한 보조 수단으로 사용
  • 세대 기반 가비지 컬렉션

    • 파이썬의 가비지 컬렉션은 주로 세대 기반 가비지 컬렉션을 사용
    • 객체를 세대별로 분류하여 최근에 생성된 객체는 덜, 오래된 객체는 더 자주 확인하는 방식
    • 세대 0은 최근에 생성된 객체를 의미하며, 세대가 증가함에 따라 더 오래된 객체로 간주
  • 가비지 컬렉션의 작동 시기

    • 레퍼런스 카운팅이나 순환 참조 탐지를 통해 발생한다.
    • 일정 조건이 충족 될 때 실행된다.
  • gc.get_threshold() 함수

    • 가비지 컬렉션의 세대별 임계값을 반환
    • 각 세대의 임계값은 해당 세대에서 수행된 객체 할당 횟수
    • 일반적으로 세대 0의 임계값이 가장 낮고, 세대가 증가함에 따라 임계값이 증가
  • 성능 문제

    • 가비지 컬렉션은 메모리를 해제하기 위해 프로그램의 실행을 멈추는 작업을 필요로 할 수 있음
    • 큰 메모리 해제가 필요한 경우에 발생, 이로 인해 성능 이슈 발생할 수 있다.
    • 성능에 민감한 애플리케이션의 경우 이를 고려하여 최적화를 수행해야 한다.

05. PEP 8

Note:
PEP: Python Enhancement Proposal
파이썬 커뮤니티에서 새로운 기능, 개선 사항, 코딩 스타일 등에 대한 제안을 다루는 문서

Note:
PEP 8 제목: "Style Guide for Python Code"

  • 파이썬 코드의 스타일 가이드를 제공하는 공식 문서
  • 코드의 가독성을 높이고 일관된 스타일을 유지하기 위해 파이썬 코드를 작성하는데 권장되는 규칙들을 제시
  • 들여 쓰기
    • 공백 4개를 사용해 들여쓰기 하는 것을 권장.
    • tap 대신 공백(" " * 4)을 사용하는 것을 권장
    • 블록 구조를 나타내기 위해 사용 됨
    • 코드의 가독성 향상
  • 코드 라인
    • 각 줄은 79자 이내로 작성하는 것을 권장
    • 긴 줄을 여러 줄로 나누어 작성함으로써 가독성을 향상시킬 수 있다
  • 공백
    아래와 같은 곳에서 적절한 공백을 사용하는 것을 권장
    • 함수와 클래스 정의 사이
    • 연산자 주변
    • 괄호 주변
  • 이 외에도 다양한 규칙을 제시하고 있으며, 코드의 일관성과 가독성을 높이기 위해 개발자들 사이에서 널리 사용하고 있다. 개발 프로젝트에서 PEP 8을 준수함으로써 코드의 품질을 유지하고 협업을 원할하게 할 수 있다.
profile
응집력있는 시간을 보내기 위한 블로그

0개의 댓글