파이썬(python)으로 변수 지정 코드를 짤 때,
x = 10 # x는 자동으로 정수(int) 타입이 됩니다.
y = "Hello" # 같은 x에 문자열(str)을 재할당할 수 있습니다.
이렇게 써서 변수 지정을 해줍니다.
자바(java)로 변수 지정 코드를 짠다면,
// 정수(Integer) 타입임을 명시
int age = 30;
// 문자열(String) 타입임을 명시
String name = "Alice";
// 실수(Double) 타입임을 명시
double price = 19.99;
이런식으로 문자형인지, 숫자형인지 명시를 해주고선 변수를 지정해야 합니다.
즉, 파이썬은 변수 지정할 때 이게 어떤 타입인지 지정을 안해도 자동으로 숫자인지 문자인지 알아서 지정해줍니다. 반대로 자바는 어떤 타입인지 지정을 하고 변수 선언을 해줘야 합니다.
이를 다른 말로 파이썬은 동적타입(Dynamically Typed), 자바는 정적타입(Statically Typed) 이라고 합니다.
파이썬은 변수 선언을 어떤 타입인지 말 안해도 알아서 변환해서 선언해주는구나~ 동적이구나
자바는 변수 선업을 어떤 타입인지 꼭 말해줘야지 선언을 해주는구나~ 정적이네
이렇게 이해하시면 좋을 것 같습니다.
동적 타입 언어라는 것은 변수의 타입이 프로그램을 실행하는 도중에 결정되며, 개발자가 변수를 선언할 때 타입을 명시할 필요가 없다는 것을 의미합니다.
Python
x = 10
y = "Hello"
이러한 유연성은 코드를 빠르게 작성하고 간결하게 만드는 장점이 있습니다.
동적 타입 언어 (파이썬): 타입 검사를 코드가 실행(런타임)될 때 수행합니다. 따라서 타입 관련 오류는 실행 시에 발견될 수 있습니다.
파이썬은 동적 타입(Dynamically Typed) 언어이지만, 데이터를 다룰 때 데이터 타입(Data Type)을 이해하는 것은 매우 중요합니다. 타입은 데이터가 메모리에 어떻게 저장되고, 어떤 연산이 가능하며, 해당 데이터가 코드에서 어떤 역할을 하는지를 결정하기 때문입니다.
메모리 관리와 저장 방식
파이썬에서 모든 데이터는 객체로 저장됩니다. 데이터 타입은 파이썬 인터프리터에게 다음을 알려줍니다.
메모리 할당: 정수(int), 실수(float), 문자열(str), 리스트(list) 등 타입마다 데이터를 저장하는 데 필요한 메모리 크기와 구조가 다릅니다.
데이터 구조: 예를 들어, 정수(int)는 단순한 값 자체를 저장하지만, 리스트(list)는 여러 항목의 참조(reference)를 순서대로 저장하는 복잡한 내부 구조를 가집니다.
허용되는 연산의 결정
데이터 타입은 해당 데이터에 적용할 수 있는 연산의 종류를 정의합니다. 잘못된 타입에 연산을 시도하면 오류가 발생합니다.
수학 연산: 숫자 타입(int, float)만 덧셈, 뺄셈, 곱셈 등의 수학적 연산이 가능합니다.
예: 은 이 되지만, 는 문자열을 연결하여 가 됩니다.
순서 연산: 리스트, 튜플, 문자열 등 순서가 있는(sequence) 타입만 인덱싱([0]), 슬라이싱([1:3]) 연산이 가능합니다.
타입 오류 방지: 5 (정수)와 "3" (문자열)을 그냥 더하려고 하면 파이썬은 를 발생시킵니다. 이는 개발자가 의도하지 않은 비정상적인 결과를 방지해 줍니다.
함수의 동작 방식 (다형성)
같은 연산자나 함수라도 입력된 데이터 타입에 따라 동작이 달라집니다. 이를 다형성(Polymorphism)이라고 합니다.
연산자:
숫자 타입: 덧셈
문자열/리스트 타입: 연결 (Concatenation)
len() 함수:
리스트/튜플: 항목의 개수 반환
문자열: 문자(글자)의 개수 반환
딕셔너리/집합: 키-값 쌍/요소의 개수 반환
논리적 오류 방지 및 코드 가독성
타입을 명확히 아는 것은 개발자의 의도를 코드로 표현하는 가장 기본적인 방법이며, 논리적 오류를 줄이는 데 도움을 줍니다.
가독성: 변수의 타입을 통해 그 변수가 무엇을 나타내는지 (예: \text{total_price}는 일 가능성이 높음, \text{is_active}는 일 가능성이 높음) 쉽게 파악할 수 있어 코드를 읽고 이해하기 쉬워집니다.
데이터 무결성: 데이터가 항상 예상한 형태(예: 나이는 항상 int)를 유지하도록 타입을 관리하면, 프로그램의 신뢰성이 높아집니다.
파이썬은 명시적으로 타입을 선언할 필요가 없지만, 내부적으로는 모든 것을 타입 기반으로 처리하기 때문에, 개발자가 타입을 정확히 알고 다루는 것이 안정적이고 효율적인 프로그래밍의 핵심입니다.
파이썬이 동적 타입 언어임에도 불구하고 데이터 타입이 중요합니다. 그 이유는 내부적으로는 모든 객체가 특정 타입을 가지며, 그 타입에 따라 허용되는 연산과 메모리 사용 방식이 결정되기 때문입니다.
파이썬의 데이터 타입이 중요한 이유가 이렇게 4가지나 됩니다. 그런데 이러한 파이썬의 동적 타입은 또 2가지로 나뉘게 됩니다. 불변형과 가변형으로 나뉘게 되죠.
: 이 타입들의 핵심 특징은 객체가 생성된 후에는 그 값을 바꿀 수 없다는 것입니다. 변수가 바뀔 때는 사실 새로운 객체를 만들어 그 객체를 참조하게 됩니다.
예시
int 10, -5 정수형입니다.
float 3.14, 1.0e-5 실수형입니다.
bool True, False 논리형입니다.
str "hello", 'A' 문자열입니다. 문자열의 내용을 변경하려 하면 새 문자열 객체가 생성됩니다.
NoneType None 값이 없음을 나타내는 특별한 타입으로, 변경 불가능합니다.
tuple (1, 'a', 3.14) 불변형의 핵심 요소입니다. 요소의 순서와 값을 변경할 수 없습니다.
📌 tuple은 일반적으로 '기본형'보다는 '시퀀스형'으로 분류되지만, 불변성이라는 특성 때문에 위의 Primitive (불변) 그룹에 속하는 것이 더 논리적입니다.
: 이 타입들은 객체가 생성된 후에도 그 객체 내부의 내용을 바꿀 수 있습니다. 즉, 객체의 는 그대로 유지되면서 값이 수정됩니다.
예시
list [1, 2, 'a'] 순서가 있는 가변 시퀀스입니다. 요소를 추가(append), 삭제(pop), 수정할 수 있습니다.
dict {'key': 1, 'b': 2} 순서가 없는(Python 3.7+부터는 순서 유지) 키-값 쌍의 컬렉션입니다. 키와 값의 쌍을 추가, 수정, 삭제할 수 있습니다.
set {1, 2, 3} 중복을 허용하지 않는 순서 없는 컬렉션입니다. 요소를 추가(add)하거나 제거(remove)할 수 있습니다.