python

BootCamp Day02 Python ② 문자열 다루기

cinnamonbrown 2026. 5. 21. 20:11

1. 컴퓨터에서 문자를 저장하는 법

컴퓨터는 사람과 달리 문자를 이해하지 못한다.

그래서 컴퓨터에서 각 문자는 숫자 형태로 변환해서 저장한다.

이런 규칙을 문자 인코딩(Character Encoding) 이라고 한다.

그 중 대표적인 것이 ASCII 코드유니코드가 있다.


✅ ASCII 코드(American Standard Code for Information Interchange)

아스키 코드는 총 7비트로 구성되어 총 128개(0-127)의 문자를 표현할 수 있다.

다만 ASCII는 영어 위주라 한글 같은 다양한 언어를 표현하기 어렵다는 한계가 있었다.

예를 들어 영어는 소문자(26개),대문자, 기호까지 포함해서 약 100개 정도 존재한다.

하지만 한국어처럼 표현해야 할 문자의 수가 많은 언어는 ASCII만으로 표현하기 어렵다.

예를 들어 한글은 완성형 기준 11,172개의 글자가 존재하기 때문에 영어보다 훨씬 많은 문자 표현 공간이 필요하다.


✅ Unicode(유니코드)

이를 해결하기 위해 등장한 것이 Unicode이다.

이는 한글과 이모티콘 등 다양한 언어까지도 포함하기 위해 개발된 표준이다.

다양한 인코딩 방식 (UTF-8,UTF-16, UTF-32) 을 지원한다.

이 중 UTF-8은 저장 효율성과 호환성이 뛰어나 현재 가장 널리 이용되는 인코딩 방식이다.


✅ 컴퓨터의 용량 단위

  • 컴퓨터는 데이터를 01로 저장한다
  • 가장 작은 단위는 bit이며, 8bit가 1Byte이다
  • 컴퓨터는 2진수 기반이며, 용량 단위는 1024 기준으로 증가한다

👉 위는 컴퓨터 용량 단위를 정리한 표이다.

컴퓨터 공부를 하는 입장이라면 위의 단위는 상식적으로 기억해두는 것을 권장한다.


2. Python의 문자열

문자열(String)은 문자들의 순서 있는 집합이다

  • Python에서는 작은따옴표(')나 큰따옴표(")로 문자열을 표현한다
  • 인덱스를 통해 각 문자에 접근 🅾️
  • ⭐️⭐️⭐️ 수정이 불가능한(immutable) 특성을 가지고 있다
    • 문자열은 덩어리 형식이기 때문에
  • 결합, 슬라이싱, 길이 체크 등 다양한 문자열 메서드를 지원한다.

🔹 인덱스

인덱스(Index)는 데이터 구조에서 각 요소의 위치를 나타내는 번호이다.

  • 인덱스는 0부터 시작한다
  • 음수 인덱스를 사용하면 뒤에서부터 접근할 수 있다.

예시

str1 = “hello python!”
print(str1[0]) # 출력 결과 : h

🔹 슬라이싱(Slicing)

슬라이싱은 문자열 일부를 잘라오는 기능이다.

text = "hello python"

print(text[0:5]) # hello

🔴 주의할 것은 끝 인덱스(end)는 포함되지 않는다는 점이다.


🔹 리터럴 공유

리터럴 공유(literal sharing)는 동일한 값을 가지는 불변 객체(정수, 문자열 등)를 여러 번 사용할 때,

Python이 메모리 효율을 위해 하나의 객체만 생성하고 여러 변수가 이를 함께 참조하는 동작을 의미한다.

예시

a= “hello”
b=”hello”
print(‘a is b =’, a is b) # 출력 : True (동일한 문자열 객체 공유) 

위의 예시가 이에 해당한다.

하지만 리터럴 공유는 공백이 포함되거나 런타임에 생성된 문자열은 공유되지 않는다.


3. 문자열 메서드

먼저 메서드함수의 차이에 대해서 짚고 넘어가자.

🔸 함수 vs 메서드

  • 함수 : 독립적으로 사용할 수 있다.

예를 들어,

print(“Python”)

👉 이런 함수는 특정 개체 없이 그냥 바로 사용할 수 있다.

✔️ 메서드 : 주체가 있다 (어떤 덩어리( 객체 )만 사용할 수 있게 한다)

예를 들면, 문자열 메서드는 오직 문자열만 사용할 수 있는 함수이다. (ex. upper())

메서드는 호출 방식도 함수와 조금 다르다.

▶︎ 함수 :

print("Python")

처럼 바로 호출하지만

▶︎ 메서드  :

text.upper()

처럼 객체가 먼저 나오고 .을 찍은 뒤 메서드를 호출하는 방식이다.

즉,

객체.메서드명()

형태를 따른다.


자주 사용하는 문자열 메서드

문자열 메서드는 정말 많지만, 그 중에서도 자주 사용할 것 같은 것들 위주로 정리해봤다.

1. 대소문자 변환 : upper() / lower()


2. 문자열 찾기 : find()

 

특정 문자열이 처음 등장하는 위치(index) 를 반환한다.

text = "Hello, Python!"
print(text.find("l")) # 2

✔️ 만약 찾는 문자열이 없다면

print(text.find("z")) # -1


👉 -1를 반환한다.

✔️ 뒤에서부터 문자열을 찾고 싶다면 rfind() 메서드를 이용한다.

print(text.rfind("l")) # 3


👉 앞의 r은 reverse 의 의미라고 이해하면 기억하기 쉬울 것 같다.


✔️ 특정 위치 이후부터 찾고 싶다면

print(text.find("o", 5)) # 11 인덱스 5이후부터 ‘o’를 찾으라는 의미

 


3. 문자열 분리 split()

문자열을 특정 기준으로 분리해 list로 반환하는 함수이다.

 


4. 문자열 합치기 join()

split()과 반대로 list나 tuple 등의 분리되어 있는 것들을 합쳐서 문자열로 반환하는 함수이다


split()join() 함께 세트로 기억하면 좋을 듯 하다.

 


5. 문자열 양쪽 공백 제거 strip()


6. 문자열 대체 replace()

text = "Hello, Python!"

new_text = text.replace("Python", "World")

print(new_text)
print(text)

 

출력 결과는 다음과 같다

Hello, World!
Hello, Python!

 


여기서 주목할 것은
replace()가 기존 문자열을 직접 수정하는 것이 아니라는 점이다.

 

문자열은 불변(immutable) 객체이기 때문에 한 번 만들어진 문자열 내부 값은 바뀌지 않는다.
따라서,

text.replace("Python", "World")를 실행하면


기존 "Hello, Python!"이 바뀌는 것이 아니라,


"Hello, World!"라는 새로운 문자열 객체가 만들어진다.


⭐ 문자열은 immutable(불변 객체)

문자열은 한 번 생성되면 내부 값을 수정할 수 없다.