본문 바로가기

TIL

[TIL 2024. 04. 22] 개념정리

  1. 가상환경이란

가상환경은 각 프로젝트마다 필요한 라이브러리, 인터프리터 등을 독립된 디렉토리에 모두 모아둔 것 : .venv나 venv가 대표적 (가상환경 생성→ 필요한 환경 세팅(pip install)

  • 이유: 언어,라이브러리,프레임워크 등은 모두 버전변화가 있음(추가,수정,삭제 등) → 버전이 다르면 코드가 제대로 작동하지 않을 수 있음 → 사용한 툴들의 종류와 버전을 하나의 디렉토리에 모아서 가상환경으로 관리하면→버전 차이로 인한 오류방지
    • 모듈을 모으면 라이브러리가 됨
  • 결과
    • 일관된 버전 환경에서 코드 실행 가능
    • 독립적인 환경이므로 프로젝트 간 버전 충돌 및 종속성 문제 방지

 

2. 환경변수란

  • 환경변수 (PATH) 는 시스템에서 파일을 찾는 기본 경로
  • 운영체제인 os가 참조하는 변수
  • 시스템 내에 필요한 파일을 실행하기 위해서는 항상 파일이 있는 경로에 들어가서 직접 실행해야 합니다.
  • 하지만 파일이 있는 경로를 환경변수로 설정해두면, 어느 위치에서든 파일명 만으로 실행할 수 있게 됩니다.
  • 따라서 우리가 파이썬을 설치하면서 환경변수에 등록하는 이유는 파이썬 코드를 실행하려면 항상 파이썬을 설치한 폴더로 가서// 파이썬을 실행시키고// 그 코드를 실행시켜야// 하는데 환경변수를 등록함으로써 그 번거로움을 줄여줄 수 있습니다.
  • 가장 익숙한 환경변수로는 path.
  • → path는 프로그램을 찾는 기본 경로로 python, pip 등의 명령어를 실행할 때 프로그램이 저장된 경로를 확인하여 실행합니다. 터미널에서 실행시 해당 명령어를 찾지 못한다는 문구가 뜬다면 해당 프로그램의 path를 확인해 보는 것도 좋습니다.

 

3. 인터프리터와 컴파일러

  • 컴파일러와 인터프리터 모두 사람의 언어(프로그래밍 언어)를 0과 1로 이루어진 기계어로 변환하기 위한 것
  • 단, 컴파일이 한번에 기계어로 변환/인터프리터는 한줄씩 기계어로 변환한다는 차이 있을 뿐
  • 두 개의 장단점은 서로 크로스됨
  • 컴파일러 (정적 타입 언어가 사용함)
  • 장점
    • 일단 스캔을 마치면 실행파일을 만들어 두고 계속 사용 → 실행속도가 인터프리터보다 빠름 (실행 전에 사전에 컴파일(기계어로 변환) 되어 있음)
    • 전체 코드를 검사한 후에 오류 메시지를 생성 → 프로그램 실행 전에 오류 발생 가능→상대적으로 디버깅이 어려움
    • 대부분의 플랫폼에서 실행 가능, 이식성 높음
  • 단점
    • 초기 스캔시간이 오래 걸림 (프로그램 실행에 필요한 모든 파일을 스캔하기 때문)
    • 컴파일 이후에 코드 변경시 수정내용을 다시 컴파일해야 하므로 개발 더 오래일수도.
    • 기계어 번역시 만들어진 “object code”들을 묶어서 다시 하나의 실행 파일로 만드는 “링킹 작업(linking)”이 필요함 → 인터프리터 방식모두 메모리 사용 많음
  • 인터프리터 (동적 타입 언어가 사용함)
    • 장점
      • 메모리 효율이 좋음 (목적 코드x, 링킹x)
      • 코드 변경시 중간 컴파일과정 없이 바로 실행 가능
    • 단점
      • 실행 속도가 느림 (한줄씩 읽고,번역,실행)
      • 프로그램을 실행해봐야지만 오류 발견 가능

 

 

4. 정적 타입과 동적 타입

  • 프로그래밍 언어는 대체로 정적타입의 언어와 동적타입의 언어로 나뉨 → 여기에서 먼저 타입이란, 변수의 종류(int, float, bool 등). 즉, 자료형을 말합니다. 이 변수의 타입을 언제 결정하느냐에 따라 언어는 정적타입과 동적타입이 나뉩니다.
  • 정적타입의 언어
    • 변수의 타입을 작성자가 직접 작성하는 언어.
    • 대표적인 언어로는 C, C++ 등 (자바는 정적 타입의 언어이지만, 컴파일과 인터프리터의 특징을 모두 가짐)
    • 정적타입의 언어는 컴파일 시에 변수의 데이터 타입이 결정
      • 타입오류를 사전에 방지
      • 코드의 안정성이 높. 실행 속도가 빠르다
      • 코드의 가독성이 좋기 때문에 유지 보수에 유리
      • 하지만 코드를 수정할 때 많은 선언 작업이 필요하고, 동적언어에 비해 개발시간이 더 소요될 수 있다는 단점이 존재
    • 동적타입의 언어는 코드를 실행할 때 알아서 변수 타입을 판단해주는 언어
    • 대표적인 언어로 Python, JavaScript 등
    • 동적타입의 언어는 실행 시 변수의 타입이 결정
      • 유연성이 좋고, 코드 작성과 수정이 빠르게 이루어질 수 있다
      • 하지만 실행 도중 타입오류가 발생할 수 있다는 단점이 있다
      • -> 정적 타입 언어는 개발 과정에서 변수의 타입을 직접 지정해줘야 하고, 동적 타입 언어는 개발자가 타입을 지정하지 않고 코드가 실행되는 과정에서 타입이 정해진다