본문 바로가기

강의 내용 정리/JAVA 기초 정리

4-1강 문자열 클래스의 이해

1. 문자열 클래스

2. Wrapper 클래스

3. 예외처리

4. Java Collection Framework의 이해

5. 제네릭

6. Collection 인터페이스

7. Set 인터페이스

8. List 인터페이스

9. Map 인터페이스

 

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------

 

 

1. 문자열 클래스

 

 

Java는 유니코드 체계이기 때문에 char 하나가 2byte로 잡혀있음

Java에서 문자는 char로 관리된다.

String 타입은 자바에서 원시타입이 아닌 타입 중 유일 하게 리터럴로 초기화 가능함

ex_) String name="abc";

 

자바 9 부터는 내부적으로 byte배열을 쓴다. ( 자바 8까지는 char배열 ) -> 왜냐 : 1byte로 표현할 수 있는 문자를 2byte에 넣어두면 메모리 낭비이기 때문에 -> 절약 하는 것이 Compact Strings

 

ex_) 한문자가 1byte인 영어에서는 char[6]은 12byte but byte[6] 은 6byte 이므로 메모리 절약

ex_) 하지만 한글의 경우 char[2] 는 4byte , byte[4] 도 4byte이므로 차이가 없긴함 .

 

 

 

# Java의 힙에는 String pool 이 있다. 

- "Java Programming" 이라는 문자열 상수가 String pool에 잡힌다. ( 같은 문자로 String 변수를 초기화하면 같은 곳을     가리킨다. )

- new String("Java Programming"); 하면 str2는 다른 String객체를 참조한다. -> String 객체 내부적으론 Spring pool의 "Java Programming" 을 참조한다.

- str 참조변수가 "Java"를 가리키다 끊겼으므로 Garbage Collector가 회수 ( 반복문 진행하면 메모리 누수 )

-> 이럴 땐 stringbuffer, stringbuilder

-  concat 메서드 연속적으로 사용 시 메모리leak

 

 

 

# StringBuilder

 

자동으로 capacity 확장 append 메서드는 반환형 X -> 그냥 힙에서 문자열 메모리 확장함.

 

 

 

 

#StringBuilder, StringBuffer

StringBuilder


멀티스레드에서 동기화 안돼 있을 시
: T2에서 12으로 바꿔도 T1에서 바꾼 150으로 간다.

멀티스레드에서 동기화 되어있는 경우:
T1에서 num 이용 시 다른 스레드에서 못 가져가게 깃발 세워둠
StringBuffer

 

StringBuilder는 동기화 처리 안되어있음

StringBuffer는 동기화 처리 되어있음 -> 멀티스레드에서 사용 가능 ( 동기화 처리는 비용이 발생하기 때문에 성능 낮다. )

-> 그래서 단일 스레드에서는 StringBuilder 쓴다.

L1 이 concat 사용 했을 때, L2는 + 연산자 사용시 ( StringBuilder.append 가 사용 됨 )

byte code 는 JVM이 인식할 수 있는 코드 

 

 

 

 

 

# 앞에서 배운 것

: .java -> (컴파일) -> .class -> (인터프리트) -> 바이너리코드

-> 자바는 투트랙언어( 컴파일 + 인터프리트 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 자료를 참고하였습니다.

 

 

꾸준히 다시보자.

 

1. 220725

2. 220814

3. 220910

Recent Posts
Popular Posts
Recent Comments