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
'Java, Spring > JAVA 기초 정리' 카테고리의 다른 글
4-7강 Java Collection Framework의 이해 (0) | 2022.07.23 |
---|---|
4-4강 Wrapper 클래스와 예외처리의 이해 (0) | 2022.07.23 |
3-15강 배열의 이해 (0) | 2022.07.22 |
3-13강 추상 클래스와 인터페이스 (0) | 2022.07.22 |
3-11강 Object 클래스의 이해 (0) | 2022.07.22 |