Chapter 1: 메모리 안 정보

내용 정리

  • 변수

    • 메모리 내 데이터 위치(or 주소)를 표현하는 이름

    • 프로그램 실행 중 변경되는 정보를 추적할 수 있게 한다

      • 변수가 없으면 프로그램의 내부 상태를 추적, 평가(evalutate), 변경(update)할 수 없다

    • 충분한 정보가 포함된 이름을 사용하는 것이 중요하다

  • 복합 자료 구조

    • 여러 개별 변수를 한 그룹으로 엮은 구조체(struct)나 객체(object)가 속한다

    • 관련 있는 데이터 조각을 한데 모아서 한꺼번에 전달할 수 있게 한다

    • 자신의 데이터나 작동에 대한 함수를 모두 포함하는 객체가 될 수 있다

  • 배열

    • 관련된 다수의 값을 저장할 때 사용한다

    • 배열의 구조는 위치(or 인덱스)를 지정하여 배열 내 개별 값인 원소(element)에 접근할 수 있게 해준다

      • 배열 내 원소들은 메모리에서 서로 인접해 있으므로, offset을 계산해서 해당하는 위치의 메모리를 읽는 방식으로 접근할 수 있다

    • 배열을 전체적으로 바꾸려면 모든 상자를 하나하나 바꿔야 한다

  • 삽입 정렬

    • 배열의 값을 정렬하는 알고리즘으로, 순서를 정할 수 있는 모든 유형의 값에서 작동한다

    • 배열의 일부를 정렬하고, 정렬된 범위를 전채 배열이 정렬될 때까지 확장한다

    • 정렬되지 않은 배열의 각 원소를 반복하면서 정렬된 부분의 올바른 위치로 이동한다

    • e.g.

      # Time Complexity: O(n²) / Space Complexity: O(1)
      
      from typing import List
      
      def insertion_sort(arr: List[int]) -> List[int]:
          n = len(arr)
          if n <= 1:
              return arr
          
          for i in range(1, n):
              key = arr[i]
              j = i - 1
              while j >= 0 and arr[j] > key:
                  arr[j + 1] = arr[j]
                  j -= 1
              arr[j + 1] = key
          return arr
    • 단점

      • 최악의 경우 알고리즘의 비용은 시퀀스 원소 수의 제곱에 비례한다 → O(n²)

  • 문자열

    • 특수한 종류의 배열로 생각할 수 있는, 순서가 지정된 문자의 리스트다

    • 문자열의 각 칸에는 문자, 숫자, 기호, 공백 또는 제한된 특수 기호 중 하나가 포함된다

      • 마지막 칸에 있는 특수 기호 / 는 종종 문자열의 끝을 나타낸다

    • 인덱스를 사용하여 문자열의 문자에 직접 접근할 수 있다

    • 일부 프로그래밍 언어에서는 문자열을 그냥 문자 배열로 구현하고, 몇몇 다른 언어에서는 문자열이 객체일 수 있다

      • Python에서는 문자열이 immutable obejct 라서 한 번 생성된 문자열은 변경할 수 없다!

    • 문자열의 동등성 검사

      • 한 번의 연산으로 직접 비교할 수 있는 정수와 달리, 문자열은 각 문자를 반복하면서 비교해야 한다

      • 문자열 비교에서 최악의 경우 계산 비용은 문자열의 길이에 비례해 증가한다

      • Python 에서는 직접 비교할 수 있는 문자열 클래스를 제공한다

        • e.g.

          • Python의 Operator overloading: __eq__, __lt__, __gt__

            • 객체 간 비교 연산(e.g. ==, <, >)을 수행할 때 호출됨

          • Python의 str 클래스

            • 이미 __eq__, __lt__, __gt__ 등 비교 연산 메서드를 구현하고 있어서, 문자열을 별도의 사용자 정의 클래스 없이도 직접 비교 가능함

느낀점

  • 내용이 많지 않아서 좋았다

  • 기초를 다지기 좋은 책인 것 같다

Last updated

Was this helpful?