혼공파 p.115 혼공파_2주차 포스팅 中
자바에서는 변수를 사용하기 전에 변수의 자료형을 미리 선언하고 사용했는데, 하나의 변수에 여러 종류에 자료형을 넣을 수 있다는 파이썬의 유연성이 대체 뭐가 좋은지 모르겠다 이거임
그럼 나중에 코드 짤 때 변수의 양이 많아질 거 같다고 생각함.
디코 혼공단 Euno님이 알려주심
데이터분석책으로 공부하는 혼공단인데, 지나가다 질문이보여서 답글 남겨드립니다.
파이썬의 변수는 자료형을 지정하지 않는 '동적타입'이므로 기본적으로 변수를 많이 만들지 않아도 됩니다.
만약, 자료형이 고정된다면 여러 타입의 변수를 사용한다면 이를 계속해서 만들어야합니다. 즉, 메모리를 자료형마다 만드니 메모리 측면에서 비효율적이라 할 수 있습니다.
그리고 자바를 공부하신만큼, 자바에 있는 리스트는 리스트 내부의 데이터 타입을 한가지로 고정한다는 것을 아실겁니다. 하지만 파이썬에서는 자료형이 선언되지 않는 다는 점때문에 리스트에 여러가지 자료형을 저장할수 있습니다. 예를 들어,
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 문자열(String) 타입만 저장하는 리스트
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
// list.add(42); // 컴파일 에러! 정수(int)는 허용되지 않음
System.out.println(list); // [Apple, Banana]
}
}
자바에서는 리스트를 만들땐 리스트에 저장하는 타입을 문자열만 집어넣던, 하나의 자료형만 허용합니다.
그러나 파이썬은
A = [ 1, 2, 'hello', [1, 2], {key:value}] 등 여러자료형을 삽입해도 아무런 문제가 발생하지 않습니다.
그리고, 제가 생각하기엔 오히려 복잡한 코드를 짠다는 가정을 하면 변수를 재사용 하기에 어렵기에 자료형을 선언 하는 것이 코드가 길어지고 변수가 헷갈릴 가능성이 점점 높아질 것 같습니다.
파이썬은 동적 타입 언어
로, 변수의 타입이 실행 시간에 결정됨.
자바는 정적 타입 언어
자료형을 선언하는 측면에 있어서 파이썬은 자바에 비교적 자유롭고, 자바는 제한적임.
파이썬은 a=10, a=apple 가능하지만,
자바는 a=10 또는 a=apple 둘 중 하나만 가능함.
[A] 이 때 파이썬의 자료형이 고정적이어야 한다면, 문자형 변수 따로, 정수형 변수 따로 선언해야함
따라서, [A] 의 조건에서는 메모리를 자료형마다 만들어야 하기 때문에 메모리 측면에서 비효율적임
이정도만 이해하면 될듯.. 내가 자바의 리스트도 제네릭도 다 잊어버려서....
추후 자바 공부할 때 유연성 시즌2 포스팅 해야지
네, 이해하기 어려우셨다니 죄송합니다. 자바의 데이터 타입과 관련해 더 자세히 설명해 드리겠습니다.
자바에는 두 가지 주요 데이터 타입 카테고리가 있습니다:
기본 타입 (Primitive Types)
참조 타입 (Reference Types)
배열은 기본 타입과 참조 타입 모두를 저장할 수 있습니다:
int[] numbers = {1, 2, 3, 4, 5}; // 기본 타입 int의 배열
String[] names = {"Alice", "Bob"}; // 참조 타입 String의 배열
리스트는 Java의 제네릭을 사용하며, 제네릭은 참조 타입만 사용할 수 있습니다. 따라서 리스트에는 직접적으로 기본 타입을 저장할 수 없습니다. 대신, 기본 타입의 래퍼 클래스(Wrapper Class)를 사용해야 합니다:
List<Integer> numbers = new ArrayList<>(); // int의 래퍼 클래스인 Integer 사용
numbers.add(1);
numbers.add(2);
List<String> names = new ArrayList<>(); // String은 이미 참조 타입
names.add("Alice");
names.add("Bob");
여기서 Integer
는 int
의 래퍼 클래스입니다. 자바는 오토박싱(auto-boxing)과 언박싱(unboxing)을 통해 기본 타입과 래퍼 클래스 간의 변환을 자동으로 처리합니다.
자바가 객체 지향 언어라는 점은 맞지만, 성능과 메모리 효율성을 위해 기본 타입도 제공합니다. 리스트와 같은 컬렉션은 객체 지향적 설계를 따르므로 객체만을 다루지만, 배열은 더 낮은 수준의 구조체로 기본 타입도 직접 다룰 수 있습니다. 이런 차이가 있다는 것을 아는 것이 중요합니다.