뭐어? 문자 비교 연산이 숫자 비교 연산보다 불리하다고??!

2

파이썬

목록 보기
1/2
post-thumbnail

특별히, 결론부터 얘기하자면 !
"문자비교는 숫자 비교에 비해 따져야할 게 많다"

💡 대소 관계가 명확하지 않다

문자는 본질적으로 숫자와 같은 방식의 명확한 질서가 존재하지 않음

💡 대/소문자도 구분해야 한다.(한국어는 대소문자가 없음)

💡 문자인코딩을 하면서 예기치 않은 오류가 있을 수 있음

다른 문자 인코딩은 동일한 문자에 대해 서로 다른 표현을 가질 수 있으므로 잠재적인 불일치 현상

💡 문자의 길이가 일반적으로 숫자보다 긴 경우가 많기 때문

num = 5
char = five

예시 처럼 그냥 숫자 '5'만 비교하면 되는데, 문자는 'f'비교, 'i'비교, 'v'비교, 'e'비교...이런느낌?🤔

💡 숫자보다 특정 요구가 많을 수 있음

🌟 문자는 그럼, 어떤 문자가 더 크고, 더 작은지 어떻게 알 수 있을까?

ASCII 또는 유니코드 값을 기반으로 비교

🖥 ASCII

  • 1960년대 미국 표준 협회(ANSI)에서 영어 알파벳을 기반으로 표준화한 7비트 부호체계이다. 8비트 중에서 7비트만 사용하여 총 128개의 부호를 표기할 수 있으며 나머지 1비트는 통신상의 에러 검출을 위한 것
  • 아스키 코드에서는 다음과 같이 0 ~ 31번과 127번은 제어 문자, 32 ~ 64번은 특수 문자와 숫자, 65 ~ 96번은 알파벳 대문자와 특수문자, 97 ~ 126번은 알파벳 소문자와 특수문자를 나타냄

    결국 숫자로 변환해서 비교하게 하는 것.

🖥 UNICODE

  • 유니코드(Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 인코딩 표준
  • 유니코드는 표현상의 한계를 극복하기 위해 용량을 크게 확장해 2바이트(=16비트), 즉 2의 16승인 65536개의 문자를 표현
  • 유니코드 인코딩은 UTF-8, UTF-16, UTF-32 등이 있으며, 가장 일반적으로 UTF-8이 사용된다. 영문, 숫자, 기호는 1바이트로, 한글, 한자는 3바이트로 표현

파이썬은 UNICODE로 문자를 비교할 수 있음

  • 같은 a(A)지만 유니코드로 변환시 각각 다른 유니코드를 가지고 있음 !

📌 파이썬에서 문자열을 비교하는 방법 !

  • 비교 연산자(<, >, <=, >=, ==, !=)를 사용하여 두 문자 또는 문자열을 비교할 때 Python은 다음을 수행(서수 비교. 문자열에 있는 문자의 유니코드 코드를 비교)
  • 파이썬은 내장 ord() 함수를 사용하여 문자의 유니코드 코드 포인트를 검색
  • ord() 함수는 문자(길이 1의 문자열)를 입력으로 받아 해당 유니코드(정수)를 반환
  • 'ord()'를 사용하여 문자의 유니코드 코드 포인트를 얻으면 Python은 이러한 코드 포인트 간의 표준 수치 비교를 수행함
  • 두 문자열을 비교할 때 Python은 해당 위치의 문자를 하나씩 비교
  • 같은 위치에 있는 문자가 다른 경우 유니코드 코드(정수)비교
  • 대소문자가 다른 문자('a' 및 'A')를 서로 다른 유니코드 코드를 가지고 있기 때문에 별개의 문자로 취급
  • 한 문자열이 다른 문자열의 접두사인 경우 더 긴 문자열이 더 큰 것으로 간주

결론 :

👏대조적으로 숫자 대 숫자 비교는 숫자가 자연스러운 순서와 간단한 비교 규칙을 가지고 있기 때문에 더 간단하고 직관적인 비교가 가능 ! 그러니깐 문자간의 비교는 숫자간의 비교보다 불리할 수 밖에 없음👏

profile
`나는 ${job} 개발자`

0개의 댓글