1 minute read

  • 인터프리터 방식의 언어

  • 업데이트마다 개선이 빠름

  • 문법이 쉽고 간단

  • 접근성, 응용력, 생산성, 실사용률이 좋다

  • 디자인 철학은 ‘하나 이상의 해결법이 존재한다’가 아닌 ‘가장 아름다운 하나의 답이 존재한다’ 이기에 문법이 엄격

  • 코드블럭은 괄호가 아닌 ‘들여쓰기’

  • 병적인 객체 위주로 돌아가긴 하지만 패러다임은 멀티 패러다임 언어

  • 순수 객체지향 언어이다. 즉 원시 타입이 존재하지 않음

  • 객체

    • 변경 불가능한(immutable) 객체

      • 상수(숫자), 문자열 바이트, 튜플(보안 떄문)

      • 함수의 매개변수로 넘길 시 값의 복사만 일어나고 불변성을 띄기 때문에 ‘값에 의한 호출’

    • 변경 가능한(mutable) 객체

      • 그 외

      • 함수의 매개변수로 넘길 시 불변성을 띄지 않으며 외부 값을 변경(참조 객체 변경)할 수 있기 떄문에 ‘참조에 의한 호출’

    • 반복 가능한(이터러블) 객체

      • 파이썬의 가장 큰 특징 중 하나

      • 집합, 문자열, 리스트, 튜플, 딕셔너리, 함수 까지 반복 가능 (이터레이터 구현됨)

      • 함수

        • 호출하고 나서도 함수가 완전히 끝나기 전까지 지역 변수 남아있음

        • 함수가 끝나고 나서 지역변수 삭제

        • 제네레이터는 미리 만들어놓는게 아니라 호출 될 떄 반환값을 새로 만들어서 메모리 관리 면에서 이점 있음

    • 장점

      • 높은 생산성

        • 낮은 난이도, 범용성으로 파이썬 수준의 프로그램 개발 속도 따라 잡는 언어 없음

        • 인터프리터 언어 이면서 우수한 자료형과 다양한 모듈 제공

        • c언어와 점착성 좋음 (python으로 빨리 구현하고 병목 일어나는 부분 C++로 전환)

      • 문법 통일에 따른 빠른 피드백

        • 문법 통일에 의해 다른 프로그래머들의 피드백이 빠르고 그로 인해 생산성 향상으로 이어짐
      • 과학/공학 친화

        • 과학/공학 분야에 필요한 여러 기능 기본적으로 생태계가 제공

        • 언어 차원에서 관련 패키지 위한 기능 제공

      • 만능 언어

        • 거의 대부분 가능

        • 동적 타입 언어 인 점이 대규모 프로젝트 일 경우 단점으로 지적(Type Hints 를 이용해 변수 타입 지정 가능)

      • 교육

        • 배우기 좋으며 시제로도 사용

        • 동적 언어이기 때문에 프로그래머의 역량에 크게 좌우

    • 문제점

      • 멀티 스레딩 불가 문제

        • yield 키워드, async 함수 선언자와 await 키워드 포함으로 코루틴 기능 지원
      • 난잡한 패키지 관리 및 하위 호환 에러

        • 패키지 다루는 방식이 여러 차례 바뀜

        • 패키기 서치 및 관리

          • pip 으로 라이브러리 설치하지만 설치된 파이썬에 추가하기 떄문에 문제 생김

          • venv 모듈료 직접 호출해 가상 환경 만들어서 관리

        • 패키지 개발 및 배포

          • pyproject.toml 이라는 package.json 비슷한 설정파일 등장

          • 공개 배포 시 소스 코드 그대로 노출되며 보안 유지 시 숨겨야함

    • 다양한 python 구현체 종류

      • Python은 보통 C로 구현돼있지만 다양한 구현체 존재

Categories:

Updated: