We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JAVA의 기본 자료형에 속하지 않는 class 이다.
Immutable (불변성) : 한 번 생성한 문자열 객체는 수정할 수 없다! → thread-safe
thread-safe
String str = "Hello" // (1)문자열 리터럴 str += "world!" // (2) String str1 = new String("Hello"); // (1)new str1 += " world"; // (2)
(2)번 연산 수행하면서 새롭게 (2)Hello World! 를 위한 메모리를 할당하고, (1)로 초기화한 str 객체는 GC의 대상이 된다. → 반복되면 성능에 안좋음..
String str1 = "Hello"; String str2 = "Hello";
동일한 문자열 리터럴 사용 시, 새로운 메모리를 할당하지 않으므로 메모리 낭비가 덜하다.
== 연산자로 정확한 비교 가능(메모리 주소 비교) (But, 리터럴 방식이든 new 방식이든 상관없이, 문자열 비교는 항상 equals()로 하는 것이 좋다.)
==
new
equals()
System.out.println(str1 == str2); // true
String str3 = new String("Hello"); String str4 = new String("Hello");
StringBuilder sb = new StringBuilder(); @Override public StringBuilder append(String str) { super.append(str); return this; }
StringBuffer sb = new StringBuffer(); @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }
String
StringBuffer
StringBuilder
*유니코드 : 각 문자를 고유한 숫자로 매핑한 것
✅ UTF-8
✅ UTF-16
✅ UTF-32
ㅇㅇ 대소문자 구분 여부는 데이터베이스의 정렬 규칙(Collation) 과 밀접한 연관이 있므므로 중요하다!
정렬 규칙(Collation)
CHAR, VARCHAR, TEXT 과 같은 문자열 Datatype 에는 Character set과 Collation 이라는 속성이 있다.
Character set
Collation
u**tf8_general_ci
utf8_bin
원래는 전 세계 모든 언어가 21bit 에 저장되기 때문에, mysql 에서 utf8 을 3바이트 가변 자료형으로 설계했다.
→ 널리 사용되던 MYSQL / MariaDB 의 구축 환경은 charset-utf8 , collation-utf8_general_ci 였다.
⏩ 하지만….. Emoji 문자열은 모두 4 Byte !!
(+) 기존 utf8 시스템을 utf8mb4 로 바꿔도 값의 손실은 없다.
The text was updated successfully, but these errors were encountered:
choyeongju
No branches or pull requests
⭐ TODO
String 에 대해 고민해보세요.
String 에 대한 고민..
❓String
✅ 특징
JAVA의 기본 자료형에 속하지 않는 class 이다.
Immutable (불변성)
: 한 번 생성한 문자열 객체는 수정할 수 없다! →
thread-safe
(2)번 연산 수행하면서 새롭게 (2)Hello World! 를 위한 메모리를 할당하고, (1)로 초기화한 str 객체는 GC의 대상이 된다. → 반복되면 성능에 안좋음..
✅ 메모리 할당 (1)문자열 리터럴 : String Constant Pool 사용
동일한 문자열 리터럴 사용 시, 새로운 메모리를 할당하지 않으므로 메모리 낭비가 덜하다.
==
연산자로 정확한 비교 가능(메모리 주소 비교)(But, 리터럴 방식이든
new
방식이든 상관없이, 문자열 비교는 항상equals()
로 하는 것이 좋다.)✅ 메모리 할당 (2)
new
키워드 사용 : Heap 영역new
키워드로 생성할 때마다 heap 에 새로운 String 객체 생성==
연산자가 아니라equals()
메소드로 객체의 내용을 비교해야 한다.❓StringBuilder 와 StringBuffer
✅ 특징
→ 문자열을 더할 때, 기존의 데이터에 저장하는 방식 사용하므로 메모리 낭비가 적고, 속도가 빠르다.
✅ StringBuilder
✅ StringBuffer
정리
String
StringBuffer
StringBuilder
UTF
❓ 무엇인가?
*유니코드 : 각 문자를 고유한 숫자로 매핑한 것
❓종류
✅ UTF-8
✅ UTF-16
✅ UTF-32
대소문자 구분에 대하여..
❓대소문자 구분은 중요할까?!
ㅇㅇ 대소문자 구분 여부는 데이터베이스의
정렬 규칙(Collation)
과 밀접한 연관이 있므므로 중요하다!❓MySQL Collation
CHAR, VARCHAR, TEXT 과 같은 문자열 Datatype 에는
Character set
과Collation
이라는 속성이 있다.✅ Character set
✅ Collation
u**tf8_general_ci
: 대소문자 구분을 하지 않는 Collationutf8_bin
: 대소문자 구분을 하는 Collation💬 Emoji
원래는 전 세계 모든 언어가 21bit 에 저장되기 때문에, mysql 에서 utf8 을 3바이트 가변 자료형으로 설계했다.
→ 널리 사용되던 MYSQL / MariaDB 의 구축 환경은 charset-utf8 , collation-utf8_general_ci 였다.
⏩ 하지만….. Emoji 문자열은 모두 4 Byte !!
(+) 기존 utf8 시스템을 utf8mb4 로 바꿔도 값의 손실은 없다.
The text was updated successfully, but these errors were encountered: