목차
1. 튜플이 필요한 이유
List가 있는데 왜 Tuple이 필요할까요? 이 질문은 Python을 배우는 초반에 반드시 만나게 됩니다.
개발자가 List만 있으면 충분하지 않냐고 묻자 Python은 주민등록번호처럼 바뀌면 안 되는 데이터를 리스트에 저장해도 괜찮겠냐고 되묻습니다. 핵심은 실수로 변경되면 안 되는 데이터를 어떻게 보호할 것인가입니다.
프로그램에는 변해도 되는 데이터와 변하면 안 되는 데이터가 함께 존재합니다. Tuple은 후자에 해당하는 데이터를 안전하게 보관하기 위해 사용합니다.
- 주민등록번호
- GPS 좌표
- 생년월일
- 국가 코드
- RGB 색상값
- 데이터베이스 기본키
- API 응답 포맷
리스트의 위험성
List는 값을 자유롭게 바꿀 수 있습니다. 이 장점은 동시에 위험이 되기도 합니다.
user = ["Lee", "Korea", "Developer"]
user[1] = "USA"
print(user)결과입니다.
['Lee', 'USA', 'Developer']문법적으로는 아무 문제가 없지만, 국가 정보가 실수로 바뀌었습니다. 데이터가 바뀌면 안 되는 상황이라면 이런 변경은 버그가 됩니다.
2. Tuple 기본 개념
Tuple은 List와 비슷하게 여러 값을 순서대로 저장하지만, 한 번 만들어지면 값을 수정할 수 없습니다.
List와 Tuple 문법
List는 대괄호를 사용합니다.
colors = ["red", "green", "blue"]Tuple은 소괄호를 사용합니다.
colors = ("red", "green", "blue")Tuple은 읽기 전용 데이터 저장소에 가깝습니다. 수정, 추가, 삭제를 허용하지 않기 때문에 데이터의 의도를 코드에 드러낼 수 있습니다.
Python이 Tuple을 제공하는 이유는 단순합니다. 절대 변하면 안 되는 데이터를 더 명확하고 안전하게 다루기 위해서입니다.
3. 직접 확인해보기
서버 접속 정보를 Tuple로 저장해보겠습니다.
server = (
"192.168.0.10",
3306,
"mysql"
)출력하면 다음과 같은 형태로 보입니다.
print(server)결과입니다.
('192.168.0.10', 3306, 'mysql')이번에는 포트 번호를 바꾸려고 시도해보겠습니다.
server[1] = 8080결과입니다.
TypeErrorPython은 Tuple 내부 값을 바꾸는 작업을 거부합니다. 이 제한이 바로 Tuple의 존재 이유입니다.
4. Tuple 실무 활용
실무에서 Tuple은 고정된 구조를 가진 값이나 바뀌면 안 되는 설정 값을 표현할 때 자주 사용됩니다.
호스트, 포트, 계정처럼 프로그램 실행 중 임의로 바뀌면 안 되는 설정 값을 묶을 수 있습니다.
위도와 경도처럼 한 쌍으로 움직이는 고정 값을 표현하기 좋습니다.
빨강, 초록, 파랑 값처럼 순서와 개수가 정해진 데이터를 담기 좋습니다.
DB 연결 정보
db_config = (
"localhost",
3306,
"root"
)이 정보는 프로그램 실행 중 마음대로 바뀌면 안 됩니다.
GPS 좌표
location = (37.5665, 126.9780)서울시청의 GPS 좌표처럼 지도 서비스, 배달 시스템, 드론 시스템, 내비게이션에서 좌표는 순서와 의미가 고정된 데이터입니다.
RGB 색상값
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)색상 정보도 보통 임의로 변경하는 값이 아니라 정해진 조합으로 사용합니다.
5. Tuple과 List 비교
Tuple은 수정 기능을 지원하지 않기 때문에 List보다 더 단순하게 동작할 수 있습니다. 일반적으로 Tuple은 List보다 빠르고 메모리 사용량도 더 적은 편입니다.
(1, 2, 3)비슷한 데이터를 List로 만들면 다음과 같습니다.
[1, 2, 3]| 항목 | List | Tuple |
|---|---|---|
| 수정 가능 | O | X |
| 추가 가능 | O | X |
| 삭제 가능 | O | X |
| 속도 | 보통 | 더 빠름 |
| 메모리 | 상대적으로 큼 | 상대적으로 작음 |
| 사용 목적 | 변경되는 데이터 | 고정 데이터 |
개발자들이 Tuple을 좋아하는 이유
실제 프로젝트에서 누군가 실수로 데이터를 바꿔 생기는 버그는 꽤 무섭습니다. Tuple은 이런 실수를 줄이는 데이터 보호 장치가 됩니다.
country_codes = (
"KR",
"US",
"JP",
"CN"
)다음 코드는 허용되지 않습니다.
country_codes[0] = "ABC"6. Tuple 언패킹
Tuple은 여러 값을 한 번에 꺼내는 언패킹과 함께 사용할 때 매우 편리합니다.
person = ("Lee", 30)일반적인 인덱스 접근 방식입니다.
name = person[0]
age = person[1]언패킹을 사용하면 더 간결하게 작성할 수 있습니다.
name, age = person출력해보겠습니다.
print(name)
print(age)결과입니다.
Lee
307. 함수와 Tuple
Python 함수는 여러 값을 반환할 때 Tuple을 자연스럽게 사용합니다.
def get_user():
return "Lee", 30반환값은 언패킹으로 바로 받을 수 있습니다.
name, age = get_user()결과입니다.
Lee
30return "Lee", 30처럼 값을 여러 개 반환하는 코드는 내부적으로 Tuple을 반환하는 방식으로 동작합니다.
8. AI 개발과 표준 라이브러리의 Tuple
AI 개발, 데이터 분석, 딥러닝을 배우면 Tuple을 거의 매일 만나게 됩니다. 특히 크기, 모양, 차원을 표현할 때 자주 사용합니다.
- 이미지 크기
- AI 모델 입력 Shape
- Tensor Shape
- NumPy 배열 차원
- PyTorch와 TensorFlow의 데이터 형태
image_size = (1920, 1080)input_shape = (224, 224, 3)(32, 512)표준 라이브러리와 외부 모듈에서 만나는 Tuple
Tuple은 Python 표준 라이브러리와 데이터베이스 작업에서도 자주 숨어 있습니다.
cursor.fetchone()결과 예시입니다.
(1, "Lee", "Developer")socket.getpeername()결과 예시입니다.
('192.168.0.1', 443)os.path.split()결과 예시입니다.
('/home/user', 'file.txt')Tuple은 단순한 문법이 아니라 Python 생태계 전반에서 널리 쓰이는 기본 데이터 표현 방식입니다.
9. 자주 하는 실수와 면접 질문
실수 1: Tuple을 수정하려고 시도하기
data = (1, 2, 3)
data[0] = 100Tuple은 값을 바꿀 수 없기 때문에 오류가 발생합니다.
실수 2: 원소가 하나인 Tuple 만들기
다음 코드는 Tuple이 아니라 정수입니다.
data = (10)원소가 하나인 Tuple은 반드시 쉼표가 필요합니다.
data = (10,)| 면접 질문 | 답변 방향 |
|---|---|
| Tuple이 있는데 왜 List를 사용할까요? | 데이터가 변경될 가능성이 있으면 List를 사용하고, 변경되면 안 되는 데이터는 Tuple을 사용합니다. |
| Tuple의 장점은 무엇인가요? | 수정 불가능한 구조로 데이터 의도를 명확히 표현하고, 일반적으로 List보다 가볍고 빠릅니다. |
10. 정리와 다음 편 예고
오늘 배운 내용을 한 문장으로 정리하면 List는 자유롭게 수정 가능한 메모장이고, Tuple은 한 번 작성하면 봉인되는 계약서입니다.
- Tuple은 여러 값을 순서대로 저장하는 자료구조입니다.
- Tuple은 한 번 생성되면 값을 수정할 수 없습니다.
- List는 변경되는 데이터에, Tuple은 고정 데이터에 적합합니다.
- Tuple은 좌표, 색상, 설정값, 함수 반환값, Shape 표현에 자주 사용됩니다.
- Tuple 언패킹을 사용하면 여러 값을 간결하게 꺼낼 수 있습니다.
- 원소가 하나인 Tuple은 반드시 쉼표를 포함해야 합니다.
Python 개발자로 성장할수록 단순히 값을 저장하는 것에서 끝나지 않고, 어떤 데이터가 바뀌어도 되는지와 어떤 데이터가 바뀌면 안 되는지를 구분하게 됩니다. 이 차이가 단순 코딩과 소프트웨어 설계의 차이를 만듭니다.
user = ["Lee", 30]처럼 단순히 값을 묶어 저장합니다.
user = {"name": "Lee", "age": 30}처럼 의미 있는 이름으로 데이터를 구조화합니다.
USER_ROLES = ("ADMIN", "MANAGER", "USER")처럼 바뀌면 안 되는 데이터를 명확하게 보호합니다.
user = ["Lee", 30]user = {
"name": "Lee",
"age": 30
}USER_ROLES = (
"ADMIN",
"MANAGER",
"USER"
)- 집합 Set 이해하기
- 중복 데이터를 자동으로 제거하는 방법
- Set이 데이터를 효율적으로 관리하는 방식
