٩(๑•̀o•́๑)و

20200308 - String, Wrapper Class 본문

Java

20200308 - String, Wrapper Class

11mia 2020. 3. 8. 03:11

String Class

String Class 선언시

  • new 사용 - 힙메모리에 할당
  • 리터럴을 사용 - 상수풀에서 가져온다. - 상수풀에 동일한 값이 이미 있다면 그걸 가져다가 씀(공유)
  • new와 리터럴을 사용하는 것은 다른 의미.
  • 혼용하여 사용시 메모리 주소를 비교했을때 예상치 못한 결과를 얻을 수도 있음.
String str1 = new String("abc");	//인스턴스로 생성됨 - 힙메모리
String str2 = "abc";	//상수풀에 있는 문자열을 가리킴

new 사용시엔 힙메모리에 할당 & 리터널 사용시 상수풀에서 가져다 쓰는 것은 Integer , Double 등의 클래스에서도 동일하게 적용됨

String은 immutable (불변성)

  • 한번 선언되거나 생성된 문자열을 변경할 수 없음 - String의 소스를 보면 final로 선언된 배열이 있고 여기에 값을 넣고 빼기때문. final이기때문에 변하지 않음
  • String 클래스의 concat()메서드 혹은 "+"를 이용하여 String을 연결하는 경우 문자열은 새로 생성됨 => 따라서 이전 String값들은 가비지가 됨 => String값을 계속 연결하여 결과를 만들 경우 메모리 낭비가 발생한다.(계속 가비지가 발생)
  • 이 경우에는 StringBuilder나 StringBuffer를 사용하면 됨

String class의 value array

StringBuilder 와 StringBuffer

  • 가변적인 char[] 배열을 멤버변수로 가지고 있는 클래스 - 가변적인 배열을 갖게 됨. 한번 생성된 후 계속 연결하여 덧붙여나감.
  • 문자열을 변경하고나 연결하는 경우 사용하면 편리한 클래스들. 
  • StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(Synchronization)이 보장됨.
  • 단일 쓰레드 프로그래밍에서는 StringBuilder를 사용하는 것이 더 좋음. (StringBuilder는 멀티쓰레드환경에서 동기화가 지원되지 않음)
  • toString() 메서드로 String 반환

StringBuffer 클래스 - AbstractStringBuilder 상속
StrinbBuilder 클래스 - AbstractStringBuilder 상속
 StringBuffer , StringBuilder의 상위클래스인 AbstractStringBuilder - value 배열이 final이 아님
StringBuffer 클래스의 toString() - 동기화가 보장됨(synchronized)
StringBuilder 클래스의 toString()

Wrapper 클래스

  • 기본 자료형에 대한 클래스
  • 기본 자료형은 c, c++에서 넘어온 것
  • 기본 자료형을 감싸고있다는 의미에서 Wrapper클래스라고함
  • Wrapper클래스에는 toString(), hashCode(), equals() 등 Object클래스의 많은 메서드들이 오버라이딩되어있다.
  • 역시 new했을땐 힙메모리에, 리터럴로 사용시엔 상수풀에서 갖고온다.
  • java5이전에는 int타입(기본형)과 Integer타입(Wrapper클래스타입)간의 연산이 불가했었음..지금은 기본형과 Wrapper 클래스간의 호환이 잘 되어있음
기본형 Wrapper 클래스
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

 

'Java' 카테고리의 다른 글

20200308 - 컬렉션 프레임워크  (0) 2020.03.09
20200308 - Generic 프로그래밍  (0) 2020.03.08
20200307 - Object Class  (0) 2020.03.07
20200307 - 인터페이스  (0) 2020.03.07
20200306  (0) 2020.03.06