๐Ÿ“—
JunegLee's TIL
  • TIL
  • python
    • class
    • String Basic
    • regularExpression
    • String function
    • Generator
    • String format
    • getset
    • module
    • while
    • numpy
    • print()
    • matplotlib
    • for
    • Boolean
    • tuple
    • package
    • input(variable)
    • list
    • if
    • file
    • type()
    • pandas
    • function
    • dictionary
    • ๊ตฌ๋ฌธ ์˜ค๋ฅ˜์™€ ์˜ˆ์™ธ
    • builtinFunction
    • Constructor
  • algorithm
    • sort
      • mergeSort
      • insertionSort
      • bubbleSort
      • heapSort
      • quickSort
      • selectionSort
    • recursion
    • Greedy
    • DepthFirstSearch
    • basic
      • DataStructure
    • hash
    • BreadthFirstSearch
  • tensorflow
    • keras
      • layers
        • Flatten
        • Flatten
        • Dense
        • Dense
        • Conv2D
        • Conv2D
    • tensorflow1x
    • tensorflow2x
  • DB
    • setting
    • join
    • subQuery
    • overview
  • deep-learning
    • neuralNetwork
    • perceptron
    • neuralNetworkLearning
    • convolution neural network
    • Gradient Descent
    • Linear Regression
    • backPropagation
    • logistic regression
    • overview
  • textPreprocessing
    • overview
  • java
    • basics
      • generic
      • Variable
      • String
    • theory
      • Object Oriented Programing
  • NLP
    • Embedding
    • Natural Language Processing
Powered by GitBook
On this page
  • String ๋ฌธ์ž์—ด
  • Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— String ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
  • string constant pool ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— String ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
  • String vs StringBuffer ๋น„๊ต์— ๋”ฐ๋ฅธ ์ฐจ์ด์ 
  • ํ•ด๊ฒฐ์ฑ…?
  • String - mutable vs immutable ๊ฐ์ฒด
  • StringBuffer๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜์‚ฌํ•ญ!
  • ๋‹คํ˜•์  ๋ณ€์ˆ˜์™€ toString
  • ๋‹คํ˜•์  ๋ณ€์ˆ˜์™€ ํ˜•๋ณ€ํ™˜, toLoverCaser()
  • Wrapper ํด๋ž˜์Šค

Was this helpful?

  1. java
  2. basics

String

String ๋ฌธ์ž์—ด

Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— String ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

String s1 = new String("Hello"); 
String s2 = new String("Hello");
System.out.println(s1 == s2);  false

=> ๋‚ด์šฉ๋ฌผ์˜ ๋™์ผ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋ฌด์กฐ๊ฑด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. => garbage๊ฐ€ ๋˜๋ฉด garbage collection์— ์˜ํ•ด ์ œ๊ฑฐ๋œ๋‹ค.

string constant pool ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— String ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

String x1 = "Hello";  String ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
String x2 = "Hello";  ๊ธฐ์กด์˜ String ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
System.out.println(x1 == x2);  true

=> Heap ์ด ์•„๋‹Œ String ์ƒ์ˆ˜ํ’€์— ์ƒ์„ฑํ•œ๋‹ค. => ๊ธฐ์กด ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ด, ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. => JVM์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋œ๋‹ค.

String vs StringBuffer ๋น„๊ต์— ๋”ฐ๋ฅธ ์ฐจ์ด์ 

String s1 = new String("Hello"); 
String s2 = new String("Hello");
String s3 = "Hello";
System.out.println(s1.equals(s2));  // ๊ฒฐ๊ณผ: true  ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ๋กœ ๋น„๊ตํ•˜์—ฌ ๊ฐ’์ด ๋™์ผ
System.out.println(s1.equals(s3));  // ๊ฒฐ๊ณผ: true  String ํด๋ž˜์Šค์—์„œ equals()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
// --------------------------------------------------------------------------------------------------------
StringBuffer b1 = new StringBuffer("Hello");
StringBuffer b2 = new StringBuffer("Hello");
System.out.println(b1 == b2);  // ๊ฒฐ๊ณผ : false  b1, b2 ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค๋ฅด๋‹ˆ๊นŒ ๋‹น์—ฐํžˆ ๊ฒฐ๊ณผ๋Š” false์ด๋‹ค.
System.out.println(b1.equals(b2));  // ๊ฒฐ๊ณผ : false ์ƒ์† ๋ฐ›์€ equals()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์•Š๊ณ  Object์˜ equals()๋ฅผ ์‚ฌ์šฉ

ํ•ด๊ฒฐ์ฑ…?

 System.out.println(b1.toString().equals(b2.toString()));
// => StringBuffer์—์„œ String์„ ๊บผ๋‚ด ๋น„๊ตํ•˜๋ผ! 
// --------------------------------------------------------------------------------------
String s1 = new String("Hello");
System.out.println(s1);  ๊ฒฐ๊ณผ๊ฐ’ : Hello
System.out.println(s1.toString());  ๊ฒฐ๊ณผ๊ฐ’ : Hello

String s2 = s1.toString()
System.out.println(s1 == s2); true

=> ์œ„์˜ ์ฝ”๋“œ๋Š” ํ”„๋กœ์ ํŠธ์˜ toString ๊ณผ์ •์ด๋ž‘ ๋™์ผํ•œ ๊ณผ์ •์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค s1์ด String์ด๊ธฐ ๋•Œ๋ฌธ์— toString()์€ ๋”ฐ๋กœ String์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ s1 ์ฃผ์†Œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ๊ฒฐ๊ตญ ์ธ์Šคํ„ด์Šค์ด ์ฃผ์†Œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋™์ผํ•œ ๊ฐ’์ด ๋˜๊ฒŒ ๋œ๋‹ค

String - mutable vs immutable ๊ฐ์ฒด

  • String ๊ฐ์ฒด๋Š” immutable ๊ฐ์ฒด์ด๋‹ค. ์ฆ‰ ํ•œ ๋ฒˆ ๊ฐ์ฒด์— ๊ฐ’์„ ๋‹ด์œผ๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

  • StringBuffer๋Š” mutable ๊ฐ์ฒด์ด๋‹ค. ์›๋ž˜์˜ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

StringBuffer๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜์‚ฌํ•ญ!

  • StringBuffer์˜ ๋‚ด์šฉ๋ฌผ์„ ๋น„๊ตํ•  ๋•Œ equals() ์‚ฌ์šฉํ•ด๋ด์•ผ ์†Œ์šฉ์—†๋‹ค. == ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

  • Stringbuffer์€ object์—์„œ ์ƒ์† ๋ฐ›์€ equals()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•˜์ง€ ์•Š์€ object์˜ equals() ์ ์šฉ๋˜๊ฒŒ ๋œ๋‹ค

๋‹คํ˜•์  ๋ณ€์ˆ˜์™€ toString

Object obj = new String("Hello");  ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ๊ฐ€ 100์ด๋ผ ๊ฐ€์ •ํ•˜์ž;
String x1 = (String) obj;  x1 = 100
String x2 = obj.toString();  x2 = 100
System.out.println(x1 == x2);

=> ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•ญ์ƒ ์›๋ž˜ ๊ฐ์ฒด์˜ ํด๋ž˜์Šค๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„ ์˜ฌ๋ผ๊ฐ„๋‹ค. => ๋”ฐ๋ผ์„œ obj๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด์˜ ํด๋ž˜์Šค๊ฐ€ String์ด๊ธฐ ๋•Œ๋ฌธ์— obj.toString()์€ String ํด๋ž˜์Šค๋ถ€ํ„ฐ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. => String ํด๋ž˜์Šค๋Š” toString()์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ obj.toString()์€ String ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•œ toString()์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Object (์ตœ์ƒ์œ„)
toString()

A (์ƒ์œ„)
toString(), m1()

B (ํ•˜์œ„, ์ƒ์†)
toString(), m1(), m2()

// ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Object obj์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ™•์ธํ•˜๋ฉฐ, tpye ๋”ฐ๋ผ์„œ๋งŒ ํ™•์ธํ•œ๋‹ค

Object obj = new Object();
obj.toString(); O - object์— ์žˆ๋Š” toString()๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค
obj.m1(); X object์—๋Š” m1๋ผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์„ ์–ธ๋œ ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— m2 ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค

// ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค

Object obj = new A();
obj.toString(); O - B์— ์žˆ๋Š” toString()๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค
obj.m1(); O - B์— ์žˆ๋Š” m1()๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค
obj.m2(); X

// ํ•ด๋‹น ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ๋ฉ”์Šค๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค 

Object obj = new B();
obj.toString(); O - A์— ์žˆ๋Š” toString()๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค
obj.m1(); O - B์— ์žˆ๋Š” m1()๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค
obj.m2(); O
  • ์ด๋Ÿฐ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์ง€ํ–ฅ์€ ๋ฐ˜๋ณต์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— C๋ณด๋‹ค ๋А๋ฆฌ๋‹ค

๋‹คํ˜•์  ๋ณ€์ˆ˜์™€ ํ˜•๋ณ€ํ™˜, toLoverCaser()

  • obj๋ฅผ ํ†ตํ•ด ์›๋ž˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ

Object obj = new String("Hello");

// 1. ์›๋ž˜ ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๋ผ.
String str = ((String)obj).toLowerCase();
System.out.println(str);
// 2. ์›๋ž˜ ํƒ€์ž…์˜ ๋ ˆํผ๋Ÿฐ์Šค์— ์ €์žฅํ•œ ๋‹ค์Œ ์‚ฌ์šฉํ•˜๋ผ.
String x1 = (String) obj;
str = x1.toLowerCase();
System.out.println(str);

Wrapper ํด๋ž˜์Šค

๋ž˜ํผ ํด๋ž˜์Šค์˜ ์ฃผ์š” ์šฉ๋„: => primitive data type์˜ ๊ฐ’์„ ๊ฐ์ฒด๋กœ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. => primitive data type์˜ ๊ฐ’์„ ๊ฐ์ฒด์— ๋‹ด์•„ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ธ์ œ๋“  wrapper ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

Byte b2 = Byte.valueOf((byte)100); 
Short s2 = Short.valueOf((short)20000); 
Integer i2 = Integer.valueOf(3000000); 
Long l2 = Long.valueOf(60000000000L); 
Float f2 = Float.valueOf(3.14f); 
Double d2 = Double.valueOf(3.14159); 
Boolean bool2 = Boolean.valueOf(true); 
Character c2 = Character.valueOf((char)0x41);
 int ==> Integer  Integer.valueOf  ์˜คํ† ๋ฐ•์‹ฑ(auto-boxing) - ์ž๋™์œผ๋กœ 
int i1 = 100;
Integer obj1 = Integer.valueOf(i1);
 Integer ==> int  obj2.intValue
Integer obj2 = Integer.valueOf(200);
int i2 = obj2.intValue();
  • auto-boxing/auto-unboxing ๊ธฐ๋Šฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋กœ primitive data type๊ณผ ํด๋ž˜์Šค๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค

Integer obj1 = new Integer(100);

  • new๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Heap์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ Data์˜ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ==๋ฅผ ํ†ตํ•ด ๋น„๊ตํ•˜๋ฉด ๋™์ผํ•œ ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค

Integer obj1 = 100;

  • ์ •์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ์ด์šฉํ•˜์—ฌ auto-boxing์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ constants pool์— ์ƒ์„ฑ

  • ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” Integer ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

Integer obj5 = Integer.valueOf(100);

  • ์œ„์™€ ๋™์ผํ•œ ์ฝ”๋“œ์ด๋‹ค

int i2 = obj2.intValue();

  • auto-unboxing ???

PreviousVariableNexttheory

Last updated 4 years ago

Was this helpful?