MoonNote

반응형
     

 

 

형 변환(Type Casting)

파이썬에서는 데이터 타입을 변환하는 방법으로 명시적(Explict) 형 변환과 암시적(Implict) 형 변환을 제공합니다. 명시적 변환은 프로그래머가 직접 특정 데이터 타입으로 변환을 명시하는 것으로, 주로 'int()', 'float()', 'str()', 'list()' 등의 함수를 사용합니다. 반면에 암시적 변환은 파이썬이 자동으로 수행하는 변환으로 보통 숫자형 연산에서 일어납니다. 하나씩 살펴보겠습니다.

 

명시적 형 변환(Explict Type Casting)

프로그래머가 직접 명령을 통해 데이터 타입을 변환하는 방법을 의미합니다. 파이썬에서 제공하는 다양한 내장 함수를 이용해 특정 데이터 타입을 다른 데이터 타입으로 변환할 수 있습니다. 주로 다음과 같은 함수들이 사용됩니다.

▪ int() : 다른 데이터 타입을 '정수형'으로 변환

▪ float() : 다른 데이터 타입을 '실수형'으로 변환

▪ str() : 다른 데이터 타입을 '문자열'로 변환

▪ list() : 이터러블(리스트, 튜플, 문자열, 딕셔너리, 세트)을 리스트로 변환

▪ tuple() : 이터러블을 튜플로 변환

▪ set() : 이터러블을 세트로 변환

 

명시적 형 변환의 사용 예

1. 문자열을 정수로 변환

num_str = '123'
num_int = int(num_str)
print(num_int)  # 123

 

2. 실수를 정수로 변환

num_float = 3.14
num_int = int(num_float)
print(num_int)  # 3

 

3. 정수를 문자열로 변환

number = 123
str_number = str(number)
print(str_number)  # "123" (문자열로 변환)

 

 

 주의 사항으로는 형 변환 수행시, 변환하려는 데이터가 형식에 적합하지 않을 경우 오류가 발생할 수 있습니다. 따라서 적합한 형식에 맞는 변환을 입력해야하겠습니다. 예시로 아래는 알파벳 문자를 정수형으로 변환하고자 했을 때입니다.

num_str = 'abc'
num_int = int(num_str)  # ValueError 발생

 

 

암시적 형 변환(Implict Type Casting)

암시적 형 변환은 파이썬이 자동으로 형 변환을 수행하는 경우입니다. 예를 들어, [예시 1]처럼 정수와 실수를 더하면 정수는 실수로 자동 변환됩니다.

 

암시적 형 변환의 사용 예

1. 정수와 실수의 연산

result = 10 + 3.14
print(result)  # 13.14 (정수 10이 실수 10.0으로 변환됨)

 

2. 불리언과 정수의 연산

result = True + 3
print(result)  # 4 (True가 1로 변환됨)

result = False * 10
print(result)  # 0 (False가 0으로 변환됨)

 

3. 정수와 복소수의 연산

result = 7 + 2j
print(result)  # (7+2j) (정수 7이 복소수로 변환됨)

 

4. 문자열과 정수의 곱

result = "hello" * 3
print(result)  # "hellohellohello"

 

5. 리스트와 정수의 곱

result = [1, 2, 3] * 2
print(result)  # [1, 2, 3, 1, 2, 3]

 

 

 주의 사항으로는 암시적 형 변환의 경우 명확하지 않은 상황에서는 파이썬이 자동으로 형 변환을 수행하지 않을 수 있습니다. 따라서 복잡한 연산에서는 명시적 형 변환을 사용하는 것이 권장됩니다.

주의 사항 및 수정된 코드 예시

1. 서로 다른 데이터 타입의 연산이 불가능한 경우

잘못된 코드 (암시적 변환이 일어나지 않음):

num = 10
text = " apples"

# 이 코드는 오류가 발생합니다.
# 파이썬은 정수와 문자열을 자동으로 변환하지 않기 때문입니다.
result = num + text  
# TypeError: unsupported operand type(s) for +: 'int' and 'str'

수정된 코드 (명시적 형 변환 필요):

num = 10
text = " apples"

# 숫자를 문자열로 명시적으로 변환하여 해결
result = str(num) + text
print(result)  # "10 apples"

 

2. 리스트와 문자열의 연산

잘못된 코드 (암시적 변환이 일어나지 않음):

my_list = [1, 2, 3]
my_string = "456"

# 리스트와 문자열을 더하는 것은 불가능합니다.
result = my_list + my_string  
# TypeError: can only concatenate list (not "str") to list

 

수정된 코드 (명시적 형 변환 필요):

my_list = [1, 2, 3]
my_string = "456"

# 문자열을 리스트로 변환한 후 연산 가능
result = my_list + list(my_string)
print(result)  # [1, 2, 3, '4', '5', '6']

 

3. 실수와 복소수의 덧셈에서 타입이 일치하지 않을 경우

잘못된 코드 (암시적 변환이 일어나지 않음):

real_number = 10.0
complex_number = 3 + 4j

# 실수와 복소수는 자동으로 변환되지 않음
result = real_number + complex_number  
# TypeError: can't convert complex to float implicitly

수정된 코드 (명시적 형 변환 필요):

real_number = 10.0
complex_number = 3 + 4j

# 실수는 복소수로 명시적으로 변환 가능
result = complex(real_number) + complex_number
print(result)  # (13+4j)

 

4. 논리 연산과 숫자 연산에서 발생할 수 있는 문제

잘못된 코드 (암시적 변환이 일어나지 않음):

flag = True
number = "100"

# True는 1로 변환되지만, 문자열과 숫자 간 연산이 불가능하여 오류 발생
result = flag + number  
# TypeError: unsupported operand type(s) for +: 'bool' and 'str'

수정된 코드 (명시적 형 변환 필요):

flag = True
number = "100"

# 명시적으로 변환하여 계산 가능
result = str(flag) + number
print(result)  # "True100"

 

 

 

 

 

 

 

 

 

※ 이 글이 도움이 되었다면 "👆🏻구독"과 "🤍공감" 버튼을 클릭해주세요. 클릭 한번이 글 쓰는데 큰 힘이 됩니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band