Python의 기본 - 문자열 (2)

2026. 4. 18. 00:25AI/Python

컴퓨터에서는 문자를 어떻게 표현해야 하는지 이론적인 개념에 대해 알아보도록 하자.

 

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

 

컴퓨터에서 문자는 사람이 사용하는 글자를 그대로 저장하지 않고, 각 문자에 대응되는 숫자 코드로 변환되어 저장된다.

 

이러한 변환 규칙을 문자 인코딩이라고 하는데, 대표적으로 아스키(ASCII)유니코드(Unicode)가 있다.

 

예를 들어, 문자 'A'는 특정 숫자 값으로 바뀌고, 이 숫자는 다시 2진수 형태로 메모리에 저장된다.

 

따라서, 컴퓨터 문자를 직접 처리하는 것이 아닌, 숫자로 변환된 데이터를 처리하며, 화면 출력 시 다시 문자로 변환하여 보여준다.

 

1. 아스키 코드

 

미국에서 개발된 문자 인코딩의 표준으로써, 7비트로 구성되어 128개의 문자를 표현한다.

 

1Byte 안에 글자를 표현하는 것을 목적으로 한다.

 

 

2. 유니코드

 

전세계의 다양한 문자와 기호를 표현하기 위해, 한 글자를 표현하는데 2~3 Byte의 메모리 공간을 할당한다.

 

UTF 계열의 다양한 인코딩 방식을 제공하고 있다.

 

UTF란, 유니코드 문자 집합을 실제 Byte 형태로 표현하는 인코딩 방식으로써, 문자를 서로 다른 Byte 길이로 표현하고,

 

가변길이 인코딩 방식으로서, 영어와 같은 문자는 1 Byte, 한글과 같은 문자는 여러 바이트로 구성해서

 

저장 효율성과 호환성이 뛰어나다.

 

3.  컴퓨터의 용량 단위

 

컴퓨터는 데이터를 0과 1로 저장하며, 8bit = 1 Byte를 기본 단위로 한다.

 

컴퓨터는 2진수 기반으로써 1024 기준으로 증가한다.

 

용량 단위는 다음과 같다.

 

 

본격적으로, Python의 문자열 문법에 대해 공부해보자.

 

2. 문자열

 

문자열은 문자들의 순서있는 집합으로써, 텍스트 데이터를 표현하기 위한 자료형이다.

 

Python에서는 작은 따옴표('')나 큰 따옴표("")로 문자열을 표현하며,

 

내부적으로는 문자를 숫자로 변환한 유니코드 기반 객체로 저장된다.

 

문자열은 인덱스를 통해 각 문자에 접근할 수 있고, 수정이 불가능한 Immutable 특성을 가지며

 

연결, 슬라이싱, 길이 확인 등 다양한 연산을 지원한다.

 

1. 인덱스(Index)

 

데이터 구조에서 각 요소의 위치를 나타내는 번호로

 

Python에서는 리스트나 문자열과 같이 순서가 있는 자료형에서 특정 값을 찾거나 접근할 때 사용된다.

 

인덱스는 0부터 시작하며, 예를 들어 첫번째 요소는 인덱스 0을 가지며, 음수 인덱스를 통해 뒤에서부터 접근할 수도 있다.

 

이를 통해 원하는 위치의 데이터를 효율적으로 조회할 수 있는 특징을 가진다.

 

2. 리터럴 공유

 

동일한 값을 가지는 불변 객체를 여러 번 사용할 때, Python에서 메모리 효율을 위해 하나의 객체만 생성하고

 

여러 변수는 이를 함께 참조한다. 다만, 모든 리터럴이 공유되는 것은 아니며, Python의 내부 최적화에 따라

 

짧고 단순하거나 컴파일 시점에 결정 가능한 문자, 정수 등은 공유되지만, 공백이 포함되거나 런타임에 생성된

 

문자열 등은 공유되지 않을 수도 있다.

 

a = "Hello"
b = "Hello"
print(a is b) # True

#파이썬 환경의 상대적인 주소가 같다.
print(id(a))
print(id(b))

 

3. 문자열 함수와 연산자

 

1. 문자열 길이 확인

text = "Hello, Python!"
print(len(text)) # 14

 

2. 문자열 합치기

name = "김사과"
age = "20살"
message = name + ", " + age
print(message) # 김사과, 20살

 

3. 문자열 반복하기

apple = '❤️' * 10
print(apple) # ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

 

4. 문자열의 인덱싱과 슬라이싱

 

인덱싱은 순서가 있는 자료형에서 인덱스 값을 이용해 특정 위치의 요소에 접근하는 방법이다.

 

슬라이싱은 순서가 있는 자료형에서 인덱스의 범위를 지정해서 원하는 부분만 추출하는 방법이다.

 

데이터[start:end:(step)] 형태로 사용하면, start 인덱스부터 end 이전 인덱스까지의 요소를 반환하고

 

필요에 따라 step 값을 추가해 간격을 지정할 수도 있다.

 

5. 문자열 메소드

 

문자열 메소드는 문자열 객체에 적용되는 함수로서, 문자열을 조작하거나 변환하는 다양한 작업을 수행한다.

 

# 1. 대소문자 변환
text = "Hello Python!"
print(text.upper()) # HELLO PYTHON!
print(text.lower()) # hello python!

# 2. 특정 문자의 등장횟수 반환
text = "Hello Python!"
print(text.count("l")) # 2
print(text.count("ll")) # 1

# 3. 특정 부분 문자열의 첫번째 등장 위치(인덱스) 확인
text = "Hello Python!"
print(text.find("l")) # 2
print(text.find("z")) # -1
print(text.rfind("l") # 3
print(text.find('o',5)) # 5부터 시작해서 o를 찾으라

# 4. 문자열 대체
text = "Hello Python!"
print(text.replace("Python","World") # Hello World!

# 5. 양쪽 공백 제거
text = "  Hello Python!  "
print(text.strip()) # Hello Python!

# 6. 문자열 분리
text = '김사과 반하나 오렌지 이메론'
print(text.split()) # ['김사과','반하나','오렌지','이메론']

text = '김사과,반하나,오렌지,이메론'
print(text.split(",")) # ['김사과','반하나','오렌지','이메론']

# 7. 문자열 결합
city = '서울시'
district = '서초구'
street = '양재동'
print(" ".join((city,distric,street)) # 서울시 서초구 양재동

# 8. 접두사와 접미사 확인
text = "Hello Python!"
print(text.startswith("Hello") # True
print(text.endswith("World") # False

 

6. 문자열은 불변 데이터 타입

 

문자열이 메모리에 올라간 후에는 그 값을 바꿀 수 없다는 것을 의미한다.

 

예를 들어, 한 번 생성된 객체 내에서 특정 문자를 바꿀 수 없다.