2022. 3. 23. 03:27ㆍCSE/JAVA
Java의 데이터 타입에 대해 글을 쓴 줄 알았더니, Java script의 데이터 타입에 대해서 쓴 글이랑 착각했었다.
그래서 복습 하는 겸, Java의 데이터 타입에 대해 알아보겠다.
1. Java의 데이터 타입
- Java의 데이터 타입은 크게 두 가지, "기본 타입(primitive type)", "참조 타입(reference type)"으로 나뉘어진다.
데이터 타입 | 기본 타입(primitive type) | 참조 타입(reference type) |
---|---|---|
종류 | 정수 타입, 실수 타입, 논리 타입 | 배열 타입, 열거 타입, 클래스, 인터페이스 |
2. 기본 타입 (Primitive Type)
- 기본 타입을 이용해서 선언된 변수는 실제 값을 변수 안에 저장한다.
- 위의 표 처럼 기본 타입은 다시 정수 타입, 실수 타입, 논리 타입으로 나뉘어진다.
값의 종류 | 기본 타입 | 메모리 사용 크기 | 저장되는 값의 범위 |
정수 | byte | 1 byte | -27 ~ (27-1) |
char | 2 byte | 유니코드 : 0~216-1 | |
short | 2 byte | -215 ~ (215-1) | |
int | 4 byte | -231 ~ (231-1) | |
long | 8 byte | -263 ~ (263-1) | |
실수 | float | 4 byte | (+/-)1.4E-45 ~ (+/-)3.4028235E38 |
double | 8 byte | (+/-)4.9E-324 ~ (+/-)1.7976931348623157E308 | |
논리 | boolean | 1 byte | true, false |
3. 참조 타입 (Reference Type)
- 참조 타입을 통해 선언된 변수는 메모리의 번지를 값으로 갖는다.
- 변수가 스택 영역에 생성되고 객체는 힙 영역에 생긴다.
- 종류 : 배열 타입, 열거 타입, 클래스, 인터페이스
4. String의 특징
String name1 = "Ella";
String name2 = "Ella";
- String변수는 동일한 문자열을 참조할 경우, 동일한 String 객체를 참조하게 된다.
- 따라서 강제로 다른 값을 참조하게 하기 위해서는 다음과 같이 new 연산자로 생성해야한다.
String name3 = new String("Ella");
- name1과 name2는 같은 객체를 참조하므로 == 결과가 true가 나오지만, name1과 name3는 다른 객체를 참조하므로 false가 나온다.
=> String의 == 비교는 같은 객체를 참조하는지 확인한다.
- String 문자열 비교는 equals를 사용해야 한다.
name1.equals(name2); //true
name1.equals(name3); //true
- String 객체는 내부의 문자열을 수정할 수 없다. 따라서 수정하려는 시도(+ 연산, replace 메소드 등)를 하게 되면 원래의 객체에 값을 추가하는 것이 아니라 새로운 객체를 만들고 해당 객체를 참조하게 한다.
String name1 = "Ella";
name1 += "!!!";
=> 이와 같은 단점들 때문에 StringBuilder와 StringBuffer를 사용하는 것이 좋다.
5. StringBuilder vs StringBuffer
(1) 공통점
- 둘 다 내부 버퍼에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있다.
- 내부 버퍼가 부족할 경우, 자동으로 버퍼 크기를 늘린다.
- 초기 버퍼 크기를 지정할 수 있다.
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder(16); //초기 버퍼 크기 지정
StringBuilder sb3 = new StringBuilder("Java");
(2) 차이점
- StringBuffer는 멀티 스레드 환경에서 사용할 수 있도록 동기화가 적용되어 있다. => Thread Safe
- StringBuilder는 단일 스레드 환경에서만 사용할 수 있도록 설계되어 있기 때문에, 멀티 스레드 환경에서 사용하면 동기화 문제가 발생할 수 있다.
- StringBuilder는 동기화를 고려하지 않기 때문에, 단일 스레드 상황에서는 StringBuffer보다 좋은 성능을 보인다.
'CSE > JAVA' 카테고리의 다른 글
[자바 객체 지향] 객체 지향의 4대 특성 - 추상화 (0) | 2022.03.24 |
---|---|
[자바 객체 지향] 객체 지향의 4대 특성과 클래스&객체 (0) | 2022.03.24 |
Varargs : 가변 인자 (0) | 2022.01.21 |
[자바 객체 지향] 스프링이 사랑한 디자인 패턴 2 (0) | 2021.09.06 |
자바 JDBC (0) | 2021.08.16 |