Type Casting

파이썬에서는 다양한 내장 함수를 사용하여 데이터 타입을 변환할 수 있다.
데이터 타입을 변환할 때에는

  • 문자열을 숫자로 변환할 때는 해당 문자열이 유효한 숫자 형식이어야 한다.
  • 실수를 정수로 변환할 때는 소수점 이하가 버려진다.
  • 복잡한 데이터 구조(리스트, 딕셔너리 등)를 변환할 때는 주의가 필요하다.
    등을 주의해야 한다.
  1. 정수로 변환 (int())

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    # 정수형 변환
    float_num = 3.14
    int_num = int(float_num)  # 3 (소수점 이하 버림)
    
    # 실수형 변환
    a = float("10.5")  # 문자열을 실수로
    integer = 5	
    # 정수를 실수로
    float_num = float(integer)  # 5.0
    b = float(10)      
    
    # 문자열을 숫자로 변환
    str_num = "123"
    number = int(str_num)    # 123
    float_num = float("3.14") # 3.14
    
    # 진수 변환
    binary_str = "1010"
    decimal = int(binary_str, 2)  # 10 (2진수를 10진수로)
    hex_str = "1A"
    decimal = int(hex_str, 16)    # 26 (16진수를 10진수로)
    
  2. 문자열로 변환 (str())

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    # 다양한 데이터 타입을 문자열로 변환
    number_str = str(42)        # "42"
    float_str = str(3.14)      # "3.14"
    bool_str = str(True)       # "True"
    list_str = str([1, 2, 3])  # "[1, 2, 3]"
    
    # 특수한 문자열 변환
    ascii_char = chr(65)       # "A" (ASCII 코드를 문자로)
    ascii_code = ord('A')      # 65 (문자를 ASCII 코드로)
    
  3. 컬렉션 타입 변환

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    # 리스트 변환
    tuple_data = (1, 2, 3)
    list_data = list(tuple_data)  # [1, 2, 3]
    set_to_list = list({1, 2, 3}) # [1, 2, 3]
    
    # 튜플 변환
    list_data = [1, 2, 3]
    tuple_data = tuple(list_data)  # (1, 2, 3)
    
    # 집합 변환
    list_to_set = set([1, 2, 2, 3])  # {1, 2, 3} (중복 제거)
    
  4. 불리언으로 변환 (bool())

    1
    2
    3
    4
    
    p = bool(1)      # 1은 True로 변환
    q = bool(0)      # 0은 False로 변환
    print(p, type(p))  # True 
    print(q, type(q))  # False 
    
  5. 문자열을 바이트 객체로 변환
    encode() 메서드를 사용하여 문자열을 특정 인코딩의 바이트 객체로 변환할 수 있다.

    1
    2
    3
    
    s = '안녕하세요'
    b = s.encode('utf-8')
    print(b)  # 출력: b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94'
    
  6. 바이트 객체를 문자열로 변환
    decode() 메서드를 사용하여 바이트 객체를 특정 인코딩의 문자열로 변환할 수 있다.

    1
    2
    3
    
    b = b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94'
    s = b.decode('utf-8')
    print(s)  # 출력: 안녕하세요
    

실제 활용 예제

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def process_user_input(data):
    """사용자 입력 데이터를 처리하는 함수"""
    
    # 데이터 타입 확인 및 적절한 처리
    if isinstance(data, str):
        # 문자열이 숫자를 포함하는지 확인
        if data.isdigit():
            return int(data)  # 정수로 변환
        elif data.replace(".", "", 1).isdigit():
            return float(data)  # 실수로 변환
        else:
            return data.strip()  # 문자열 공백 제거
            
    elif isinstance(data, (list, tuple)):
        # 모든 요소를 문자열로 변환
        return [str(item) for item in data]
        
    elif isinstance(data, dict):
        # 딕셔너리의 값들을 문자열로 변환
        return {k: str(v) for k, v in data.items()}
        
    else:
        return str(data)  # 기본적으로 문자열로 변환

# 함수 테스트
test_cases = [
    "123",
    "3.14",
    "  Hello  ",
    [1, 2, 3],
    {"name": "김철수", "age": 25}
]

for test in test_cases:
    result = process_user_input(test)
    print(f"입력: {test} ({type(test)})")
    print(f"출력: {result} ({type(result)})\n")

참고 및 출처