1. int
- 기본 데이터 타입으로 정수의 바이너리 값만 저장한다. Integer에 비해 flexibility가 떨어진다.
- 메서드에서 value를 전달할 시에는 값만 전달한다.
2. Integer
- int 데이터 타입의 wrapper class이다.
- int 데이터 타입에 비해 flexibility가 높다. (저장, 변환, 조작 등에 관해서)
- 하나의 클래스이기 때문에 다양한 method에서 활용이 가능하다.
- 특히 컬렉션프레임워크에 포함되어 있는 List, Set, Map 등에서 자주 쓰일 수 있는데,
int는 값만을 표시하지만 Integer는 하나의 정수 객체이기 때문이다.
(java.util 패키지의 경우 objects만 다루며 그 속에 있는 자료구조들도 마찬가지
=> wrapper class가 유용하게 쓰임)
- 또한 멀티스레딩의 동기화에서도 유용하게 쓰일 수 있다.
autoboxing
- 자동으로 primitive type -> object (wrapper class)로 변환하는 것
- 예시로는 int to Integer, long to Long, double to Double
Unboxing
- autoboxing의 반대라고 생각하면 된다
- Integer to int, Long to long, Double to double
3. int[]
- 타입[] 변수 = new 타입[길이]; 와 같이 객체가 생성된다.
- 배열의 경우 연속된 공간에 값을 나열 시키고, 각 값에 인덱스를 부여해놓은 자료구조이다.
- 배열 변수의 참조 변수는 스택에 저장하고, 배열 자체는 객체로서 힙에 저장한다.
- 또한 이 배열의 경우 같은 타입의 값만 관리하며 배열의 길이는 늘리거나 줄일 수 없다.
- 또한 배열 변수를 미리 선언한 다음에 값 목록을 변수에 대입할 수 없다.
<불가능>
타입[] 변수;
변수 = {v1, v2, v2, ... , vn}
<가능>
타입[] 변수 = new 타입[]{v1, v2, v3, ... };
4. 논외로.. 그럼 String은..?
- String도 객체이다.
- 하지만 조금 주의할 점은 문자열 리터럴로 대입하는 것과 new 연산자로 객체를 생성하는 것에는 차이가 있다.
String name1 = "jamiehun";
String name2 = "jamiehun";
String name3 = new String("jamiehun");
위의 코드에서
name1, name2는 문자열 리터럴로 생성된 객체로서
name1 == name2는 true이다.
이유는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있기 때문이다.
반면에 name3는 String 객체를 별도로 생성했기 때문에
name1 == name3는 false이다.
'Study > Language' 카테고리의 다른 글
[Java] 컬렉션 프레임워크를 알아보자 (2) | 2023.04.19 |
---|---|
[Java] 제어의 역전(IoC)과 의존관계 주입(DI) (0) | 2023.03.16 |
[Java] 상속과 인터페이스 (1) | 2023.03.12 |
[Java] SDK, JVM, JDK, JRE, JIT ... ? (0) | 2023.02.19 |
[Python] 파이썬 int의 최대값은? (0) | 2023.02.14 |