[Java] java.lang ํŒจํ‚ค์ง€ ์ •๋ฆฌ: Object, String, Math ํด๋ž˜์Šค ์ด์ •๋ฆฌ

2025. 5. 26. 14:52ยท๐Ÿ› ๏ธBackend/โ˜•Java

โœ… 1. java.lang ํŒจํ‚ค์ง€๋ž€?

import java.lang.*;
  • Java์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋“ค์„ ๋ชจ์•„๋†“์€ ํŒจ์ง€ํ‚ค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • java.lang ํŒจํ‚ค์ง€๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ž๋™์œผ๋กœ import๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ import๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ปดํŒŒ์ผ ์‹œ ๋ชจ๋“  ์ฝ”๋“œ์— ํ•ด๋‹น import ๋ฌธ์ด ์ƒ๋‹จ์— ๋ถ™๊ฒŒ ๋œ๋‹ค.
  • java.lang ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์—๋Š” String, Object, Thread, System ๋“ฑ ์ž๋ฐ”์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ํด๋ž˜์Šค๋“ค์ด ๋“ค์–ด๊ฐ€ ์žˆ์Œ.

โœ… 2. Object ํด๋ž˜์Šค

// ์ปดํŒŒ์ผ ์ „
public class MyClass {
}
// ์ปดํŒŒ์ผ ํ›„ -> .class
public class MyClass extends Object {
}
  • ์ž๋™์œผ๋กœ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์กฐ์ƒ์ด ๋˜๋Š” ํด๋ž˜์Šค์ด๋ฉฐ, ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๋ฃจํŠธ๊ฐ€ ๋˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.
  • ํ•ด๋‹น Object ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์†์„ ๋ฐ›๊ณ  ์žˆ๊ธฐ์— ์ƒ์† ๊ตฌ์กฐ์—์„œ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๋œ๋‹ค.
  • ์ด๊ฑด ์ปดํŒŒ์ผ ์‹œ์ ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์†์ด ์—†๋Š” ํด๋ž˜์Šค์— extends Object๋ฅผ ์ž๋™์œผ๋กœ ๋ถ™์—ฌ์ฃผ๊ธฐ ๋–„๋ฌธ์ด๋‹ค.

(1) Object ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์š” ๋ฉ”์„œ๋“œ

protected Object clone() // ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜์—ฌ ๋ฐ˜ํ™˜
public boolean equals(Object obj) // ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ์ฐธ์กฐ๊ฐ’์œผ๋กœ ๋น„๊ต
public int hashCode() // ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ •์ˆ˜๊ฐ’์„ ๋ฐ˜ํ™˜
public String toString() // ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜

 

(2) toString()

// Object.class
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
  • ํด๋ž˜์Šค์ด๋ฆ„@16์ง„์ˆ˜ํ•ด์‹œ์ฝ”๋“œ๋กœ ํ‘œํ˜„์„ ํ•ด์„œ String ์ฆ‰, ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜์„ ํ•ด์ค€๋‹ค.

(3) equals()

// Object.class
public boolean equals(Object obj) {
    return (this == obj);
}
  • ๋‘ ๊ฐ์ฒด ๋ณ€์ˆ˜๋ฅผ ๋น„๊ตํ•ด์„œ, ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์ด ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ ( ์ฆ‰, ๊ฐ์ฒด ๊ฒ€์ฆ์„ ํ•  ๋•Œ ์‚ฌ์šฉ )
  • ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ์ž๋ฐ”์˜ == (๋™๋“ฑ๋น„๊ต์—ฐ์‚ฐ์ž) ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๊ต๋ฅผ ํ•˜๊ณ  ์žˆ์Œ. ์ฆ‰, ๊ทธ๋ƒฅ ๋™๋“ฑ๋น„๊ต์—ฐ์‚ฐ์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋จ.

(4) clone()

// Object.class
@IntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;
// Cloneable interface
package java.lang;
public interface Cloneable {
}
  • Java์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
  • ๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object๋ฅผ ์ƒ์† ๋ฐ›๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์กฐ๊ฑด์ด ๋ถ™๋Š”๋‹ค.
  • ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implements ํ•ด์•ผํ•˜๋ฉฐ, ํ•ด๋‹น clone()๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ์ง€๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • clone์„ ํ•˜๋ฉด, ํ•ด๋‹น ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋“ค์–ด๊ฐ€์žˆ๋Š” ๊ฐ’ ์ž์ฒด๋„ ๋ณต์‚ฌ๊ฐ€ ๋˜๋ฉฐ, ์ฐธ์กฐ๊ฐ’์ด ๋‹ค๋ฅธ ๋˜‘๊ฐ™์ด ์ƒ๊ธด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•  ๋•Œ try() ๋ฉ”์„œ๋“œ๋ฌธ์˜ ์ž๋™ ์ธํ„ฐํŽ˜์ด์Šค -> close() ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์„ ํ•œ๋‹ค.

(5) getClass()

// Object.class
@IntrinsicCandidate
public final native Class<?> getClass();
  • ํ˜„์žฌ ๊ฐ์ฒด์˜ ์‹ค์ œ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ง„ Class ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.
  • ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” native ์ฆ‰, JVM์ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ(C/C++)๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ์ฆ‰, Java ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ JVM ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋ฏ€๋กœ, ๋ฉ”์„œ๋“œ ๋ฐ”๋””๋Š” ํ™•์ธ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ฐ˜ํ™˜ ํƒ€์ž… Class<?>์€ ๋ณดํ†ต Java์˜ ๋ฆฌํ”Œ๋ ‰์…˜์—์„œ ์‚ฌ์šฉ์ด ๋œ๋‹ค.
  • JVM์€ Dogํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค์น˜๋ฉด, ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๋ฉด์„œ Class<Dog> ๊ฐ์ฒด๋„ ๋‚ด๋ถ€์—์„œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ์„ ํ•ด๋‘”๋‹ค.
  • ์ด๊ฑด ๋„ค์ดํ‹ฐ๋ธŒ ์˜์—ญ์—์„œ ์ง„ํ–‰์ด ๋œ๋‹ค.
  • JVM์€ ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ "๋กœ๋“œ(load)"ํ•  ๋•Œ, Class<?> ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑํ•˜๋ฉฐ, ๊ทธ ์•ˆ์— ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ "๋‚ด์žฅ๋œ ๊ตฌ์กฐ"๋ฅผ ํ†ตํ•ด ์ฑ„์›Œ ๋„ฃ์Šต๋‹ˆ๋‹ค.
  • "JVM์€ ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก Class<?>๋ผ๋Š” ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์„ค๊ณ„ํ•ด๋†“๊ณ , ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜๋ฉด์„œ ๊ฑฐ๊ธฐ์— ์ •๋ณด๋ฅผ ์ฑ„์›Œ๋„ฃ๋Š” ์ผ์ข…์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค."

โœ… 3. String ํด๋ž˜์Šค

  • ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • String ํด๋ž˜์Šค ์ƒ์„ฑ ๋ฐฉ์‹์€ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹๊ณผ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.
  • String์€ ๋ถˆ๋ณ€ํด๋ž˜์Šค์ด๋ฉฐ, ํ•„๋“œ์™€ ํด๋ž˜์Šค์—๋Š” final๋กœ ๊ฐ’์˜ ๋ณ€๊ฒฝ์„ ๋ง‰๊ณ  ์žˆ์Œ.

(1) String ๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑ ๋ฐฉ์‹

String a = "Hello";
  • ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์€ ํ•ด๋‹น ๋ฌธ์ž์—ด ๊ฐ’์ด String Constant Pool(๋ฌธ์ž์—ด ์ƒ์ˆ˜ ํ’€)์— ์ €์žฅ์ด ๋œ๋‹ค.
  • ์ƒ์ˆ˜ํ’€์— ์กด์žฌํ•˜๋Š” ํ•ด๋‹น ๋ฌธ์ž์—ด ๊ฐ’์„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋กœ ์ด์šฉ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์žฌ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ฆ‰, Hello ๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ๋ณ€์ˆ˜๋“ค์ด ์ฐธ์กฐํ•ด์„œ ์ด์šฉ์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ๋ฌธ์ž์—ด์€ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๊ฐ€ ๋งŽ์ด ์„ ์–ธ๋  ์ˆ˜ ์žˆ๊ธฐ์—, ๊ฐ์ฒด๋กœ์จ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋˜๋ฉด ๊ฐ™์€ ๋ฌธ์ž ๊ฐ์ฒด๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋งŒ๋“ค๊ฒŒ๋จ.
  • ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ๋งŽ์€ ๋น„ํšจ์œจ๊ณผ ์„ฑ๋Šฅ์˜ ๋–จ์–ด์ง์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ทธ๋ž˜์„œ ์ƒ์ˆ˜ํ’€์„ ํ™œ์šฉํ•˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ๋†’๊ณ  ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ.

[1] String Constant Pool(๋ฌธ์ž์—ด ์ƒ์ˆ˜ ํ’€) ์ด๋ž€?

  • ์ฒ˜์Œ String ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹ ๋˜๋Š” intern() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ์ด ๋˜๋ฉด ๊ทธ๋•Œ ํ•ด๋‹น ์ƒ์ˆ˜ํ’€์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • ์ฆ‰, ํด๋ž˜์Šค๋กœ๋”๊ฐ€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ ๋กœ๋“œ ํ•˜๋Š” ์‹œ์ ์— ์ƒ์ˆ˜ํ’€์ด ๋งŒ๋“ค์–ด์ง„๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  • ํ•ด๋‹น ์ƒ์ˆ˜ํ’€์€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฌธ์ž์—ด์„ 

[2] intern() ๋ฉ”์„œ๋“œ๋ž€?

// String.class
public native String intern();
  • new String("Hello")๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด ๋ฌธ์ž์—ด์„ intern() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์ˆ˜ํ’€์— ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋จ.
  • String ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋กœ, native ์ฝ”๋“œ ์ฆ‰, ๋ฉ”์„œ๋“œ ๋ฐ”๋””๋Š” C๋ž‘ C++๋กœ ๊ตฌํ˜„ ๋˜์–ด์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž„.
  • JVM ์—์„œ ํ•ด๋‹น C๋ž‘ C++๋กœ ๊ตฌํ˜„ ๋˜๊ณ , ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋‚ด์žฅ์ด ๋˜์–ด์žˆ์Œ.
  • ์ฆ‰, ํŒŒ์ผ์„ ์ฝ๋Š” ๋“ฑ์˜ ์ฝ”๋“œ๋Š” ๋‚ด์žฅ์ด ๋˜์–ด์žˆ์–ด์„œ, ๋ฐ”๋กœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ํ•ด๋‹น C++ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์™œ๋ƒํ•˜๋ฉด, ์ด๋ฏธ JVM์ด ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ JVM ๋‚ด๋ถ€์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž„.

(2) String ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹

String b = new String("hello");  // Heap ๋ฉ”๋ชจ๋ฆฌ ์ƒˆ ๊ฐ์ฒด
  • ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ƒˆ๋กœ์šด Heap ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ฆ‰, ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ๋˜‘๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ์„ ํ•˜๊ฒŒ ๋˜๋„ ์ฃผ์†Œ๊ฐ’์ด ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.
String a = new String("hello");  // Heap ๋ฉ”๋ชจ๋ฆฌ ์ƒˆ ๊ฐ์ฒด
String b = new String("hello");  // Heap ๋ฉ”๋ชจ๋ฆฌ ์ƒˆ ๊ฐ์ฒด
System.out.println(a == b);            // false
  • String ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹์€ ๋™์ผํ•œ ๋ฌธ์ž์—ด์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„์ด ๋งค์šฐ ํฐ ๋‹จ์ ์ด๋ผ ๋ณดํ†ต์€ ์‚ฌ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•œ ๋ฌธ์ž์—ด์„ ์ƒ์ˆ˜ํ’€์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.
  • ์ด ๋ฐฉ๋ฒ•์€ ์œ„์— ์„ค๋ช…์—์„œ ๋‚˜์˜จ intern() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ƒ์ˆ˜ํ’€์— ๋„ฃ๋Š” ๋ฐฉ์‹์ด๋‹ค.
String a = "hello";              // Constant Pool ํ™œ์šฉ (๋ฆฌํ„ฐ๋Ÿด)
String b = new String("hello");  // Heap ๋ฉ”๋ชจ๋ฆฌ ์ƒˆ ๊ฐ์ฒด

System.out.println(a == b);            // false
System.out.println(a == b.intern());   // true

 

(3) String - ๋ฌธ์ž์—ด ๋น„๊ต ๋ฉ”์„œ๋“œ

[1] compareTo ๋ฉ”์„œ๋“œ - ์ •์ˆ˜๊ฐ’ ๋ฐ˜ํ™˜

String a = "Hello";
String b = new String("Hello");
System.out.println(a.compareTo(b)); // ๊ฒฐ๊ณผ: 0
  • ๋‘ ๋ฌธ์ž์—ด์ด ๊ฐ™์œผ๋ฉด 0์„ ๋ฆฌํ„ดํ•˜๊ณ , ๋‹ค๋ฅด๋ฉด 0์ด ์•„๋‹Œ ์ •์ˆ˜๊ฐ’์„ ๋ฆฌํ„ดํ•จ.
  • ์ฃผ์†Œ๊ฐ’์ด ์•„๋‹Œ ๋‚ด๋ถ€์˜ ๊ฐ’ ์ž์ฒด๋ฅผ ๋น„๊ตํ•จ.

[2] equals ๋ฉ”์„œ๋“œ - ๋…ผ๋ฆฌ๊ฐ’ ๋ฐ˜ํ™˜

String a = "Hello";
String b = new String("Hello");
System.out.println(a.equals(b)); // true
System.out.println(a == b); // false
  • Object ํด๋ž˜์Šค์˜ equals() ๋ฅผ ์žฌ์ •์˜ ํ•˜๊ณ  ์žˆ์–ด, ์ฃผ์†Œ๊ฐ’์ด ์•„๋‹Œ ๋ฌธ์ž์—ด ์ž์ฒด์˜ ๊ฐ’์„ ๋น„๊ตํ•จ.

โœ… 4. StringBuffer ํด๋ž˜์Šค

 (1) String ํด๋ž˜์Šค์˜ ๋ฌธ์ œ์ 

  • String์˜ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ํ’€์€ ๋ฌธ์ž์—ด์˜ ์ค‘๋ณต๊ฐ’ ์ €์žฅ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ์„ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ, ๋ฌธ์ž์—ด์ด ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ œ์ ์€ ๊ทธ๋Œ€๋กœ ์žˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋กœ์ธํ•ด, ์žฆ์€ ๋ณ€์ˆ˜๊ฐ’์˜ ์ˆ˜์ •์€ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์˜ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

(2) StringBuffer ํด๋ž˜์Šค

StringBuffer sb = new StringBuffer(); // ์ดˆ๊ธฐ ๋นˆ ๋ฌธ์ž์—ด ๋ฒ„ํผ

sb.append("์•ˆ๋…•ํ•˜์„ธ์š”");
sb.append(" ");
sb.append("XXX์ž…๋‹ˆ๋‹ค.");
sb.insert(6, "[๊ฐœ๋ฐœ์ž] ");
sb.replace(0, 5, "Hello");
sb.delete(17, sb.length()); // ๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ ์ผ๋ถ€ ์‚ญ์ œ

System.out.println(sb.toString());  // ์ถœ๋ ฅ ๊ฒฐ๊ณผ: Hello [๊ฐœ๋ฐœ์ž] XXX
  • StringBuffer ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ์ดํ›„ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํฌ๊ธฐ๊ฐ€ ์กฐ์ ˆ๋˜๋Š” ๋ฒ„ํผ(๋ฐฐ์—ด์ด๋ผ๊ณ  ๋ณด๋ฉด๋จ)๋ฅผ ์‚ฌ์šฉ์„ ํ•œ๋‹ค.
  • ๋ฌธ์ž์—ด์„ ์ž์ฃผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋งŽ์ด ์“ฐ์ด๋Š” ํด๋ž˜์Šค๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€์˜ ๋ฒ„ํผ์— ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

(3) StringBuilder ํด๋ž˜์Šค

  • StringBuffer ํด๋ž˜์Šค์™€ ๊ฑฐ์˜ ๋˜‘๊ฐ™์ด ์ƒ๊ธด ํด๋ž˜์ด๋ฉฐ, ์ฐจ์ด๋กœ๋Š” ๋™๊ธฐํ™” ์—ฌ๋ถ€์—์„œ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • StringBuffer์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€๋งŒ, StringBuilder์€ ๋น„๋™๊ธฐ๋กœ ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Œ.
  • ๋Œ€์‹ ์—, ์†๋„ ์ธก๋ช…์—์„  StringBuilder๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์—์„  StringBuffer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ์—์„  StringBuilder๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•จ.
  • ๊ทธ๋ž˜์„œ ๋ณดํ†ต์€ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์Šค๋ ˆ๋“œ ์•ˆ์ •์„ฑ์ด ์ •๋ง ํ•„์š”ํ•œ ๊ฒฝ์šฐ StringBuffer๋ฅผ ์“ด๋‹ค.

(4) String vs StringBuffer vs StringBuilder

public class Main {
    public static void main(String[] args) {

        final String tmp = "test";
        long start, end;

        String str = new String();
        StringBuffer sb1 = new StringBuffer();
        StringBuilder sb2 = new StringBuilder();

        start = System.nanoTime();
        for(int i = 0; i < 100; i++) str += tmp;
        end = System.nanoTime();
        System.out.println((end-start) / 1000000.0 + " msecs"); // 4.155299 msecs

        start = System.nanoTime();
        for(int i = 0; i < 100; i++) sb1.append(tmp);
        end = System.nanoTime();
        System.out.println((end-start) / 1000000.0 + " msecs"); // 0.054601 msecs

        start = System.nanoTime();
        for(int i = 0; i < 100; i++) sb2.append(tmp);
        end = System.nanoTime();
        System.out.println((end-start) / 1000000.0 + " msecs"); // 0.047 msecs
    }
}
  • String = 4.155299 msecs
  • StringBuffer = 0.054601 msecs
  • StringBuilder = 0.047 msecs
  • StringBuilder๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๋‹ค์Œ์œผ๋กœ StringBuffer๊ฐ€ ๋น ๋ฅด๊ณ  ๋‹ค์Œ์œผ๋กœ String์ด ๋‚˜์™”์Œ.

โœ… 5. ํฌ์žฅ ํด๋ž˜์Šค ( ๋ž˜ํผ ํด๋ž˜์Šค )

Double double = new Double(2.59) // ์ƒ์„ฑ์ž ๋ฐฉ์‹, ๊ถŒ์žฅ ์•ˆ๋จ
DOuble double = Double.valueOf(10.4); // ValueOf() ์‚ฌ์šฉ ๋ฐฉ์‹ ๊ถŒ์žฅ
Double double = 3.14; // ์ž๋™ boxing
  • ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์„ ์ฐธ์กฐ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋‹ค. ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์€ int, double, char, boolean ๋“ฑ์„ ์˜๋ฏธํ•จ.
  • ๊ธฐ๋ณธํ˜•๊ณผ ์ƒ์‘ํ•˜๋Š” ๊ฐ์ฒด ์‚ฌ์ด์˜ ํ˜•๋ณ€ํ™˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ.
  • ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ์ฐธ์กฐํ˜• ์ฆ‰, ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์„ ์ฐธ์กฐํ˜•์œผ๋กœ ๋ฐ•์‹ฑํ•ด์„œ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ์Œ.
  • ๋˜ํ•œ. ๋ž˜ํผ ํด๋ž˜์Šค๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต์„ ํ•ด์คŒ.
  • Number ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ๊ตฌํ˜„ ๋œ ํด๋ž˜์Šค๋“ค์„ ์˜๋ฏธํ•จ.

(1) ๋ฐ•์‹ฑ(Boxing)

Double d = Double.valueOf(10.4); // ValueOf() ์‚ฌ์šฉ ๋ฐฉ์‹ ๊ถŒ์žฅ
Double pi = 3.14; // ์ž๋™ boxing
// ๋‚ด๋ถ€์ ์œผ๋กœ Double.vlauleOf(3.14) ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋จ.
  • ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์˜ ๊ฐ’์„ ๋ฐ•์‹ฑํ•ด์„œ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ž๋™๊ณผ valueOf() ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.
  • ์ž๋™ ๋˜ํ•œ ์–ด์ฐจํ”ผ valueOf() ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, valueOf()๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์ž‘์šฉ๋จ.
  • ์ธ์ž์— ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜์— ๋Œ€์ž…๋  ๋•Œ ์ž๋™์œผ๋กœ ๋ฐ•์‹ฑ๋˜์–ด์„œ ์ ์šฉ์ด ๋จ.

(2) ์–ธ๋ฐ•์‹ฑ(Unboxing)

Double pi = 3.14; // ์ž๋™ boxing
double d = Double.doubleValue(pi); // doubleValue() : ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€๊ฒฝ ๋ฉ”์„œ๋“œ
double d = pi; // ์ž๋™ unboxing
  • ๋ž˜ํผํด๋ž˜์Šค์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์˜ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ž๋™๊ณผ doubleValue() ๋ฐฉ์‹์ด ์กด์žฌํ•จ
  • ๋ฐ•์‹ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ž๋™ ์–ธ๋ฐ•์‹ฑ ๋˜ํ•œ doubleValue()๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด๋จ.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธ์ž์— ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜์— ๋Œ€์ž…๋  ๋•Œ ์ž๋™์œผ๋กœ ๋ฐ•์‹ฑ๋˜์–ด์„œ ์ ์šฉ์ด ๋จ.

โœ… 6. System ํด๋ž˜์Šค

  • System ํด๋ž˜์Šค๋Š” ์ž๋ฐ”์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋กœ, ์šด์˜์ฒด์ œ์™€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ผ๋ถ€ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ ์ž…์ถœ๋ ฅ, ์‹œ์Šคํ…œ ์†์„ฑ, ์‹œ๊ฐ„ ์ธก์ •, ์ข…๋ฃŒ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ํ•œ๋งˆ๋””๋กœ, ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด JVM ๋ฐ OS์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ˆ˜๋‹จ ์ค‘ ํ•˜๋‚˜์ž„.
  • ๋ชจ๋“  ๋ฉค๋ฒ„๋Š” static, ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๋Š” ์ „ํ˜€ ์—†์Œ.
  • ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ๊ฐ์ฒด ์ œ๊ณต, JVM ์†์„ฑ๊ณผ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ๊ณผ ์ œ์–ด, ๋ฐฐ์—ด ๋ณต์‚ฌ, ์‹œ๊ฐ„ ์กฐํšŒ, ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ๋“ฑ์„ ํ•ด์คŒ.

(1) System ํด๋ž˜์Šค - ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ํ•„๋“œ

  • System.in: ํ‘œ์ค€ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ InputStream ์œ ํ˜•, ํ‚ค๋ณด๋“œ๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•จ.
  • Systme.out: ํ‘œ์ค€ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ PrintStream ์œ ํ˜•, ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•จ.
  • System.err: ํ‘œ์ค€ ์—๋Ÿฌ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ PrintStream ์œ ํ˜•, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•จ.

โœ… 7. ๊ทธ ์™ธ

  • java.lang ํŒจํ‚ค์ง€์—๋Š” ๊ทธ ์™ธ Process, Thread, Exception, Package, Class, Math ๋“ฑ์ด ์žˆ์Œ.

'๐Ÿ› ๏ธBackend > โ˜•Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] java.nio ์‚ฌ์šฉ๋ฒ• | Path, Files, FileChannel ์˜ˆ์ œ ๋ชจ์Œ  (3) 2025.05.30
[Java] java.io ํŒจํ‚ค์ง€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ  (2) 2025.05.28
[Java] ์ž๋ฐ” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋žŒ๋‹ค์‹(Lambda Expression) ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๊ธฐ  (1) 2025.05.23
[Java] ์ œ๋„ค๋ฆญ(Generic) ๋ฌธ๋ฒ• ์ •๋ฆฌ: ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ์ œํ•œ๊นŒ์ง€  (0) 2025.05.23
[Java] ์ต๋ช… ํด๋ž˜์Šค(Anonymous Class)  (1) 2025.05.22
'๐Ÿ› ๏ธBackend/โ˜•Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Java] java.nio ์‚ฌ์šฉ๋ฒ• | Path, Files, FileChannel ์˜ˆ์ œ ๋ชจ์Œ
  • [Java] java.io ํŒจํ‚ค์ง€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ
  • [Java] ์ž๋ฐ” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋žŒ๋‹ค์‹(Lambda Expression) ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๊ธฐ
  • [Java] ์ œ๋„ค๋ฆญ(Generic) ๋ฌธ๋ฒ• ์ •๋ฆฌ: ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ์ œํ•œ๊นŒ์ง€
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (167)
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (32)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ’ป์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก  (3)
        • ๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ (3)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
      • ๐Ÿ› ๏ธBackend (58)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (23)
        • ๐ŸŒณSpring (13)
        • โš™๏ธC (2)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Data Structure (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์ •๋ณด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    spring
    Spring Framework
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ํŒŒ์ด์ฌ
    ์ž๋ฃŒ๊ตฌ์กฐ
    ๋ฐฉํ†ต๋Œ€
    ๋ฐฉ์†ก๋Œ€
    ์šด์˜์ฒด์ œ
    ํด๋ผ์šฐ๋“œ
    ์ปดํŒŒ์ผ๋Ÿฌ
    ์ž๋ฐ”
    Python
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    Java
    ๋ฐฐ์—ด
    ์Šคํ”„๋ง
    ์ž…์ถœ๋ ฅ
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[Java] java.lang ํŒจํ‚ค์ง€ ์ •๋ฆฌ: Object, String, Math ํด๋ž˜์Šค ์ด์ •๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”