자바 문자열 객체

  • String
  • StringBuffer
  • StringBuilder


String 객체

String 객체는 new 연산을 이용해서 객체를 생성하면 인스턴스의 메모리 공간이 변하지 않는다. (immutable)
따라서, + 연산이나 concat을 수행하면 새로운 문자열 객체들이 만들어지고
이를 반복하면 새로운 인스턴스들이 생겨나므로 성능이 낮아진다. 

메모리값이 변하지않으므로 조회 연산에서는 다른 클래스보다 성능이 좋고
그렇기때문에 멀티스레드 환경에서 동기화에 대해 신경쓸 필요가 없다.

> String 객체는 문자열 연산이 적고, 조회가 많은 멀티스레드 환경에 적합


StringBuffer, StringBuilder 객체

String 과 다른 점은 mutable 하다는 점이다.
문자열을 생성하고(new) 변경사항이 생기면 메모리 크기를 늘려서 문자열을 바꾼다.

StringBuffer 와 StringBuilder 는 내부적으로 메소드가 동일하지만
StringBuffer 는 동기화를 지원(syncronized)하고 StringBuilder 는 동기화를 지원하지 않는다는 점에서 다르다.

따라서 멀티스레드 환경에서는 StringBuffer 를 사용하고(thread-safe)
싱글스레드 환경에서는 StringBuilder 를 사용하여 연산속도를 빠르게 하는 것이 적합하다.

> 문자열 연산이 많고 멀티스레드이면 StringBuffer를, 동기화를 신경쓸 필요가 없다면 StringBuildrer 사용


JDK 버전에 따른 String 성능 개선

1.5 버전 이상에서는
String 객체로 연산해도 내부적으로 StringBuilder 로 변환되어 성능상 이슈를 해결했다고 한다.



'Language > Java' 카테고리의 다른 글

자바 커뮤니티2 - 상속  (0) 2019.05.28
자바 커뮤니티1 - Class  (0) 2019.05.22
Java 배열 선언, 초기화  (0) 2018.08.04
Java 접근지정자 (Access Modifier)  (0) 2018.08.04
Java String Constant Pool의 이해  (0) 2018.08.02

배열 선언


int[] num;



배열 생성


num = {1, 2, 3};
num = new int[3];
num = new int[] {1, 2, 3};



메모리 계산


int[] num = new int[10];


int(4byte) * 10 => 40 byte



배열 초기화


int num[] = new int[] {1, 2, 3};
int num[] = {1, 2, 3};


'Language > Java' 카테고리의 다른 글

자바 커뮤니티1 - Class  (0) 2019.05.22
Java 문자열 객체  (0) 2018.08.04
Java 접근지정자 (Access Modifier)  (0) 2018.08.04
Java String Constant Pool의 이해  (0) 2018.08.02
Comparator 인터페이스를 이용한 다중 정렬  (0) 2018.08.01

접근지정자 (Access Modifier) 종류

  • public
  • protected
  • default (아무 키워드도 안붙인 상태)
  • private

public > protected > default > private 순으로 접근 범위


범위

 

 범위

 같은 클래스 내

같은 패키지 내 

 다른 패키지의 

자식클래스

다른 패키지 

 public

 접근 제한 없음

 O

O

O

 protected

 같은 패키지나 클래스

상속받은 클래스

 O

O

O

 

 default

같은 클래스나 패키지 

 O

O

 

 

 private

같은 클래스에서만 

 O

 

 

 



public

접근에 제한이 없다.

protected

같은 패키지 내에서 접근 가능하고
다른 패키지이더라도 상속받은 경우는 클래스 내부에서 접근 가능하다.
but, 다른 패키지 외부에서는 접근 불가능하다.

default

변수나 메소드 선언에 아무 키워드도 붙이지 않은 접근 범위이다.
같은 클래스나 패키지 안에서만 접근 가능하다.

private 

같은 클래스 내부에서만 접근 가능하다.

'Language > Java' 카테고리의 다른 글

자바 커뮤니티1 - Class  (0) 2019.05.22
Java 문자열 객체  (0) 2018.08.04
Java 배열 선언, 초기화  (0) 2018.08.04
Java String Constant Pool의 이해  (0) 2018.08.02
Comparator 인터페이스를 이용한 다중 정렬  (0) 2018.08.01

+ Recent posts