1. 숫자형 (Numeric)
숫자형 (Number)이란 숫자 형태로 이루어진 자료형이다.
1-1. 정수형
정수형 (integer) 이란 말 그대로 정수를 뜻하는 자료형을 말한다.
a = 10
b = -5
print(a + b) # 출력: 5
정수형은 단순해 보이지만, 큰 수를 다룰 때 주의가 필요하다. 한번은 64비트 정수 범위를 초과하는 계산으로 인해 예상치 못한 결과가 나온 적이 있다. 항상 데이터의 범위를 고려해야 한다는 교훈을 얻었다.
1-2. 실수형
실수형 (floating‐point)은 소수점이 포함된 숫자를 말한다.
x = 3.14
y = 2.5
print(x * y) # 출력: 7.85
1-3. 8진수와 16진수
8진수(octal)를 만들기 위해서는 숫자가 0o또는 0O(숫자0+ 알파벳소문자o 또는 대문자O)으로 시작하면 된다.
a = 0o177
print(a) # 출력: 127
16진수(hexadecimal)를 만들기 위해서는 0x 로 시작하면 된다.
a = 0x8ff
b = 0xABC
print(b) # 출력: 2748
1-4. 복소수
복소수는 실수부와 허수부로 구성된다.
z = 2 + 3j
print(z.real) # 출력: 2.0
print(z.imag) # 출력: 3.0
2. 문자열 (String)
문자열은 텍스트 데이터를 나타낸다. 작은따옴표(' ')나 큰따옴표(" ")로 묶어 표현한다.
참조: 2024.11.24 - [파이썬] - 파이썬 문자열 메서드 정리
name = "파이썬"
greeting = '안녕하세요'
message = f"{greeting}, {name}!"
message2 = greeting + name
print(message) # 출력: 안녕하세요, 파이썬!
print(message2) # 출력: 안녕하세요파이썬
문자열 포맷팅은 정말 다양한 방법이 있어서 처음에는 혼란스러웠다. % 포맷팅, str.format(), f-string 등 여러 방식을 사용해봤는데, 최근에는 가독성이 좋은 f-string을 주로 사용하고 있다. 특히 복잡한 로깅 작업에서 f-string의 편리함을 실감했다.
문자열은 다양한 메서드를 제공한다.
text = "Python is awesome"
print(text.upper()) # 출력: PYTHON IS AWESOME
print(text.lower()) # 출력: python is awesome
print(text.split()) # 출력: ['Python', 'is', 'awesome']
3. 불리언 (Boolean)
불리언은 참(True)과 거짓(False) 두 가지 값만 가질 수 있는 자료형이다.
is_python_fun = True
is_coding_hard = False
print(is_python_fun and is_coding_hard) # 출력: False
print(is_python_fun or is_coding_hard) # 출력: True
print(not is_coding_hard) # 출력: True
4. 리스트 (List)
리스트는 여러 항목을 순서대로 저장하는 자료형이다. 대괄호 [ ]로 표현한다.
참조: 2024.11.25 - [파이썬] - 파이썬 리스트 메서드 정리
fruits = ["사과", "바나나", "오렌지"]
print(fruits[0]) # 출력: 사과
fruits.append("키위") # 리스트 가장 마지막 요소로 '키위' 추가
print(fruits) # 출력: ['사과', '바나나', '오렌지', '키위']
fruits.pop() # 리스트의 가장 마지막 요소 추출
print(fruits) # 출력: ['사과', '바나나', '오렌지']
리스트는 파이썬에서 가장 많이 사용하는 자료형 중 하나다. 하지만 대용량 데이터를 다룰 때는 주의가 필요하다. 한 번은 수백만 개의 항목을 가진 리스트를 다루다가 메모리 문제로 고생한 적이 있다. 이후로는 대용량 데이터는 제너레이터나 이터레이터를 활용하는 방법을 선호하게 되었다.
리스트는 다양한 메서드를 제공한다.
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort() # 오름차순 정렬
print(numbers) # 출력: [1, 1, 2, 3, 4, 5, 9]
numbers.reverse() # 리스트 순서 reverse 시키기
print(numbers) # 출력: [9, 5, 4, 3, 2, 1, 1]
리스트 메서드 중에서 sort()는 매우 유용하지만, 대규모 데이터에서는 성능 이슈가 있을 수 있다. 복잡한 정렬 로직이 필요한 경우에는 sorted() 함수와 key 파라미터를 활용하는 것이 더 효율적일 때가 많다는 것을 경험을 통해 배웠다.
5. 튜플 (Tuple)
튜플은 리스트와 비슷하지만 한 번 생성하면 변경할 수 없다. 소괄호 ( )로 표현한다.
참조: 2024.11.26 - [프로그래밍/파이썬] - 파이썬 - 튜플 개념 정리
coordinates = (10, 20)
print(coordinates[0]) # 출력: 10
coordinates[0] = 15 # 오류 발생. 튜플은 한 번 생성하면 기존 값을 변경할 수 없기 때문
a = (30,) # 1개의 요소만 있을 땐 요소 뒤에 반드시 쉼표(,)를 붙여야 한다.
print(coordinates + a) # 출력: (10, 20, 30) - 튜플 간 조합도 가능하다.
6. 딕셔너리 (Dictionary)
딕셔너리는 키-값 쌍을 저장하는 자료형이다. 중괄호 { }로 표현한다.
person = {
"name": "홍길동",
"age": 30,
"city": "서울"
}
print(person["name"]) # 출력: 홍길동
person["job"] = "개발자" # 기존 person 딕셔너리에 job 추가
print(person) # 출력: {'name': '홍길동', 'age': 30, 'city': '서울', 'job': '개발자'}
딕셔너리는 데이터를 구조화하는 데 매우 유용하다. 하지만 대규모 프로젝트에서 중첩된 딕셔너리를 다루다 보면 코드가 복잡해지는 경우가 많았다. 이런 경우 dataclass나 NamedTuple을 사용하여 코드의 가독성을 높이는 방법을 선호하게 되었다.
7. 집합 (Set)
집합은 중복을 허용하지 않는 순서 없는 자료형이다.
fruits_set = {"사과", "바나나", "오렌지", "사과"}
print(fruits_set) # 출력: {'오렌지', '사과', '바나나'}
# 아래처럼 집합을 생성할 수도 있다.
a = set({"사과", "바나나", "오렌지", "사과"})
print(a) # 출력: {'오렌지', '사과', '바나나'}
# 집합 연산
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # 합집합, 출력: {1, 2, 3, 4, 5, 6}
print(a & b) # 교집합, 출력: {3, 4}
print(a - b) # 차집합, 출력: {1, 2}
자료형 변환
파이썬에서는 특정 자료형을 다른 자료형으로 쉽게 변환할 수도 있다.
# 문자열을 정수로
num_str = "123"
num_int = int(num_str)
print(num_int + 7) # 출력: 130
# 정수를 문자열로
num = 456
str_num = str(num)
print("숫자: " + str_num) # 출력: 숫자: 456
# 리스트를 집합으로
numbers_list = [1, 2, 2, 3, 3, 3]
numbers_set = set(numbers_list)
print(numbers_set) # 출력: {1, 2, 3}
자료형 변환은 얼핏 보면 간단해 보이지만, 실제로는 많은 함정이 있다. 문자열을 숫자로 변환할 때 발생할 수 있는 ValueError, 부동소수점 변환 시의 정밀도 문제 등 많은 예외 상황을 겪었다. 특히 사용자 입력을 처리할 때는 항상 예외 처리를 고려해야 한다는 것을 뼈저리게 느꼈다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
파이썬 - 컴프리헨션 (0) | 2024.11.27 |
---|---|
파이썬 - 튜플 개념 정리 (0) | 2024.11.26 |
파이썬 - 리스트 메서드 정리 (0) | 2024.11.25 |
파이썬 - 문자열 메서드 정리 (0) | 2024.11.25 |
파이썬의 기원과 철학, 특징 (1) | 2024.11.24 |