Skip to content
jsjune edited this page Mar 16, 2022 · 6 revisions

- String vs StringBuffer vs StringBuilder

- String

  • String์€ ๋ถˆ๋ณ€(immutable)์˜ ์†์„ฑ์„ ๊ฐ–๋Š”๋‹ค.
String str = "hello";
str = str + "world";
  • ๊ธฐ์กด์— "hello"๊ฐ’์ด ๋“ค์–ด๊ฐ€์žˆ๋˜ String ํด๋ž˜์Šค์˜ ์ฐธ์กฐ๋ณ€์ˆ˜ str์ด "hello world"๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ณ€๊ฒฝ๋˜๊ณ  ์ฒ˜์Œ ์„ ์–ธํ–ˆ๋˜ "hello"๋กœ ๊ฐ’์ด ํ• ๋‹น๋˜์–ด ์žˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ Garbage๋กœ ๋‚จ์•„์žˆ๋‹ค๊ฐ€ GC(garbage collection)์— ์˜ํ•ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
  • String ํด๋ž˜์Šค๋Š” ๋ถˆ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ•˜๋Š” ์‹œ์ ์— ์ƒˆ๋กœ์šด String ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์ด๋‹ค.
  • ์œ„์™€ ๊ฐ™์ด String์€ ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์„ ์ž์ฃผ ์ฝ์–ด๋“ค์ด๋Š” ๊ฒฝ์šฐ String์„ ์‚ฌ์šฉํ•ด ์ฃผ์‹œ๋ฉด ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ž์—ด ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ์˜ ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— String ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํž™ ๋ฉ”๋ชจ๋ฆฌ(Heap)์— ๋งŽ์€ ์ž„์‹œ ๊ฐ€๋น„์ง€(Garbage)๊ฐ€ ์ƒ์„ฑ๋˜์–ด



- StringBuffer/StringBuilder

  • String๊ณผ๋Š” ๋ฐ˜๋Œ€๋กœ StringBuffer/StringBuilder๋Š” ๊ฐ€๋ณ€์„ฑ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— .append() .delete() ๋“ฑ์˜ API๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ผ ๊ฐ์ฒด๋‚ด์—์„œ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด์˜ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ๋ผ๋ฉด Stringํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ StringBuffer/StringBuilder๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
StringBuffer sb = new StringBuffer("hello");
sb.append("world");



- StringBuffer vs StringBuilder

  • ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ๋™๊ธฐํ™”์˜ ์œ ๋ฌด๋กœ์จ StringBuffer๋Š” ๋™๊ธฐํ™” ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๋‹ค๋Š” ์ (thread-safe) ์ด๋‹ค.
  • String๋„ ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง€๊ธฐ๋•Œ๋ฌธ์— ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์•ˆ์ „์„ฑ(thread-sage)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ StringBuilder๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ ํ•ฉํ•˜์ง€ ์•Š์ง€๋งŒ ๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๋งŒํผ ๋‹จ์ผ์“ฐ๋ ˆ๋“œ์—์„œ์˜ ์„ฑ๋Šฅ์€ StringBuffer๋ณด๋‹ค ๋›ฐ์–ด๋‚˜๋‹ค.

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






- Scanner vs BufferedReader

- Scanner

  • InputStream์„ ๋ฐ›์•„์˜จ๋‹ค.
  • InputStreamReader๋ฅผ ํ†ตํ•ด StreamDecoder๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๋ฐ”์ดํŠธ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ Character ๋‹จ์œ„ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • ์ดํ›„ next(), nextInt(), nextDouble(), nextFloat() ๋“ฑ์„ ํ†ตํ•ด ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.
    • ์ฐธ๊ณ ๋กœ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ด์œ ๋Š” ๋’ค์— ์ •๊ทœ์‹ ๊ฒ€์‚ฌ๋ฅผ ๋งŽ์ด ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
Scanner sc = new Scanner(System.in);
  • System.in์€ InputStream์˜ ์ •์ ํ•„๋“œ์ด๋‹ค.
  • System.in์œผ๋กœ๋งŒ ์ž…๋ ฅ์„ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•œ๋‹ค๋ฉด ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฐ›๊ฒŒ๋˜์–ด UTF-8์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.



- BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  • InputStreamReader๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ char๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • buffer๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ž๋ฅผ ์Œ“์•„๋‘๊ณ  ํ•œ ๋ฒˆ์— ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ๋ณด๋‚ธ๋‹ค.
  • br.readline() ๋ฉ”์„œ๋“œ๋Š” ํ•œ์ค„์„ ํ†ต์œผ๋กœ String์œผ๋กœ ๋ฐ›์•„์˜จ๋‹ค.
  • inputStream -> InputStreamReader -> BufferReader
  • ์œ„ ๊ณผ์ •์„ ํ†ตํ•ด byte, char, String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜์ด ๋œ๋‹ค.
  • ๋ฒ„ํผ๊ฐ€ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์ด๊ณ , ์ •๊ทœ์‹ ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๋‹ค.
  • ํ‚ค๋ณด๋“œ์˜ ์ž…๋ ฅ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋ฐ”๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š”, ์ค‘๊ฐ„์— ๋ฒ„ํผ๋ฅผ ๋‘์–ด ํ•œ๋ฒˆ์— ๋ฌถ์–ด ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด๋‹ค.



- Scanner/StringBuffer

  • Scanner : ํ‚ค๋ณด๋“œ๊ฐ€ ๋ˆŒ๋ฆด ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์ง€์— ์ด๋™
  • StringBuffer : ๋ฒ„ํผ์— ๊ฐ’๋“ค์„ ๋ชจ์•˜๋‹ค๊ฐ€ ๋ชจ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์ง€๋กœ ์ด๋™
  • Scanner๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ๋” ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์•„์งˆ ๊ฒจ์šฐ StringBuffer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.




- Object ํด๋ž˜์Šค

- java.lang ํŒจํ‚ค์ง€

  • java.lang ํŒจํ‚ค์ง€๋Š” ์ž๋ฐ”์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.
  • ์ž๋ฐ”์—์„œ๋Š” java.lang ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค๋“ค์€ import๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ํด๋ž˜์Šค ์ด๋ฆ„๋งŒ์œผ๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.



- java.lang.Object ํด๋ž˜์Šค

  • java.lang ํŒจํ‚ค์ง€ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋Š” ๋ฐ”๋กœ Object ํด๋ž˜์Šค์ด๋‹ค.
  • Object ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ์ž๋ฐ” ํด๋ž˜์Šค์˜ ์ตœ๊ณ  ์กฐ์ƒ ํด๋ž˜์Šค๊ฐ€ ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ž๋ฐ”์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



- toString()

  • toString() ๋ฉ”์†Œ๋“œ๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ด๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ๋ฌธ์ž์—ด์€ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ๊ตฌ๋ถ„์ž๋กœ '@'๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ทธ ๋’ค๋กœ 16์ง„์ˆ˜ ํ•ด์‹œ ์ฝ”๋“œ(hash code)๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.
  • 16์ง„์ˆ˜ ํ•ด์‹œ ์ฝ”๋“œ ๊ฐ’์€ ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์œผ๋กœ, ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๋ชจ๋‘ ๋‹ค๋ฅด๊ฒŒ ๋ฐ˜ํ™˜๋œ๋‹ค.
package algorithmn;
class Car{ }
public class Test {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car();
        System.out.println(car1.toString());
        System.out.println(car2.toString());
    }
}
> algorithmn.Car@3f3afe78
> algorithmn.Car@7f63425a

- equals()

  • equals() ๋ฉ”์†Œ๋“œ๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜์™€ ๋น„๊ตํ•˜์—ฌ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ด๋•Œ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋น„๊ตํ•˜๋ฏ€๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐ์ฒด๋Š” ์–ธ์ œ๋‚˜ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.
package algorithmn;
class Car{ }
public class Test {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car();
        System.out.println(car1.equals(car2));
        car1=car2;
        System.out.println(car1.equals(car2));
    }
}
> false
> true



- clone()

  • clone() ๋ฉ”์†Œ๋“œ๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์ œํ•˜์—ฌ, ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ Object ํด๋ž˜์Šค์˜ clone() ๋ฉ”์†Œ๋“œ๋Š” ๋‹จ์ง€ ํ•„๋“œ์˜ ๊ฐ’๋งŒ์„ ๋ณต์‚ฌํ•˜๋ฏ€๋กœ, ํ•„๋“œ์˜ ๊ฐ’์ด ๋ฐฐ์—ด์ด๋‚˜ ์ธ์Šคํ„ด์Šค๋ฉด ์ œ๋Œ€๋กœ ๋ณต์ œํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ clone() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ๋”ฉํ•˜์—ฌ, ๋ณต์ œ๊ฐ€ ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€๋„๋ก ์žฌ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.
package algorithmn;

import java.util.ArrayList;

class Car implements Cloneable{
    private String modelName; // modelName ์„ ์–ธ
    private ArrayList<String> owners = new ArrayList<String>(); // Arraylist 'owners' ์„ ์–ธ

    public String getModelName(){return this.modelName;} // modelName์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ
    public void setModelName(String modelName){this.modelName=modelName;} // modelName์˜ ๊ฐ’์„ ์„ค์ •ํ•จ

    public ArrayList getOwners(){return this.owners;} // owners์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ
    public void setOwners(String ownerName){this.owners.add(ownerName);} // owners์˜ ๊ฐ’์„ ์ถ”๊ฐ€ํ•จ

    public Object clone(){
        try {
            Car clonedCar = (Car)super.clone();
//            clonedCar.owners=(ArrayList)owners.clone();
            return clonedCar;
        } catch (CloneNotSupportedException ex) {
            ex.printStackTrace();
            return null;
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Car car1 = new Car();
        car1.setModelName("์•„๋ฐ˜๋–ผ");
        car1.setOwners("ํ™๊ธธ๋™");
        System.out.println("Car1 : " + car1.getModelName() + ", " + car1.getOwners() + "\n");

        Car car2 = (Car)car1.clone();
        car2.setOwners("์ด์ˆœ์‹ ");
        System.out.println("Car1 : " + car1.getModelName() + ", " + car1.getOwners());
        System.out.println("Car2 : " + car2.getModelName() + ", " + car2.getOwners());
    }
}
Car1 : ์•„๋ฐ˜๋–ผ, [ํ™๊ธธ๋™]

Car1 : ์•„๋ฐ˜๋–ผ, [ํ™๊ธธ๋™, ์ด์ˆœ์‹ ]
Car2 : ์•„๋ฐ˜๋–ผ, [ํ™๊ธธ๋™, ์ด์ˆœ์‹ ]
- ์ฃผ์„ ์ง€์šฐ๋ฉด -
Car1 : ์•„๋ฐ˜๋–ผ, [ํ™๊ธธ๋™]

Car1 : ์•„๋ฐ˜๋–ผ, [ํ™๊ธธ๋™]
Car2 : ์•„๋ฐ˜๋–ผ, [ํ™๊ธธ๋™, ์ด์ˆœ์‹ ]
  • ์ •ํ™•ํ•œ ๋ณต์ œ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์œ„์ฒ˜๋Ÿผ ๋ฐฐ์—ด์ด๋‚˜ ์ธ์Šคํ„ด์Šค์ธ ํ•„๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ๋ณ„๋„๋กœ clone()๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.



- Object ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ์„ค๋ช…
Protected Object clone() ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ณต์ œ๋ณธ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•จ
boolean equals(Object obj) ํ•ด๋‹น ๊ฐ์ฒด์™€ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•จ
Protected void finalize() ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋”๋Š” ์•„๋ฌด๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๊ฐ์ฒด์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœํ•จ.
Class get Class() ํ•ด๋‹น ๊ฐ์ฒด์˜ ํด๋ž˜์Šค ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•จ.
int hashCode() ํ•ด๋‹น ๊ฐ์ฒด์˜ ํ•ด์‹œ ์ฝ”๋“œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ
void notify() ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋Œ€๊ธฐ(wait)ํ•˜๊ณ  ์žˆ๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•  ๋•Œ ํ˜ธ์ถœํ•จ.
void notifyAll() ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋Œ€๊ธฐ(wait)ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•  ๋•Œ ํ˜ธ์ถœํ•จ.
String toString() ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•จ.
void wait() ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ notify()๋‚˜ notifyAll() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ• ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋Œ€๊ธฐ(wait)์‹œํ‚ฌ๋•Œ ํ˜ธ์ถœํ•จ.
void wait(long timeout) ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ notify()๋‚˜ notifyAll() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ „๋‹ฌ๋ฐ›์€ ์‹œ๊ฐ„์ด ์ง€๋‚  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋Œ€๊ธฐ(wait)์‹œํ‚ฌ ๋•Œ ํ˜ธ์ถœํ•จ.
void wait(long timeout, int nanous) ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ notify()๋‚˜ notifyAll() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ „๋‹ฌ๋ฐ›์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ธํ„ฐ๋ŸฝํŠธ(interrrupt) ํ•  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋Œ€๊ธฐ(wait)์‹œํ‚ฌ ๋•Œ ํ˜ธ์ถœํ•จ.





- ๋ž˜ํผ ํด๋ž˜์Šค (Wrapper Class)

  • ์ž๋ฐ”์˜ ์ž๋ฃŒํ˜•์€ ๊ธฐ๋ณธ ํƒ€์ž…(primitive type)๊ณผ ์ฐธ์กฐ ํƒ€์ž…(reference type)์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.
    • ๊ธฐ๋ณธ ํƒ€์ž…์€ ์ •์ˆ˜, ์‹ค์ˆ˜, ๋ฌธ์ž, ๋…ผ๋ฆฌ ๋ฆฌํ„ฐ๋Ÿด์„ ์ €์žฅํ•˜๋Š” ํƒ€์ž…
    • ์ฐธ์กฐ ํƒ€์ž…์€ ๋ฐฐ์—ด, ์—ด๊ฑฐ, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํƒ€์ž…



- ๋ž˜ํผ ํด๋ž˜์Šค๋ž€?

  • ๋ž˜ํผ ํด๋ž˜์Šค๋ž€ 8๊ฐœ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํฌ์žฅํ•ด์ฃผ๋Š” ํด๋ž˜์Šค
  • ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ์ฒดํ™”๋ฅผ ๋งํ•œ๋‹ค.



- ๋ž˜ํผ ํด๋ž˜์Šค ํŠน์ง•

  • ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด์ธ ํฌ์žฅ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ž˜ํผ ํด๋ž˜์Šค๋Š” ๊ฐ ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์•„ ํ•ด๋‹น ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ๋ž˜ํผ ํด๋ž˜์Šค๋กœ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์€ ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒˆ๋กœ์šด ํฌ์žฅ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๊ธฐ๋ณธ ํƒ€์ž… ๋ž˜ํผ ํด๋ž˜์Šค
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean



- ๋ž˜ํผ ํด๋ž˜์Šค ๊ตฌ์กฐ

  • wrapper class๋“ค์€ ๋ชจ๋‘ java.lang ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์–ด ์ œ๊ณต๋œ๋‹ค.
  • Object ํฌ๋ž˜์Šค : ๋ชจ๋“  wrapper class์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค
  • Number ํด๋ž˜์Šค : ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆซ์ž๋ฅผ ๋‹ค๋ฃจ๋Š” wrapper class๋“ค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค



- ๋ฐ•์‹ฑ(Boxing)๊ณผ ์–ธ๋ฐ•์‹ฑ(Unboxing)

  • ๋ฐ•์‹ฑ : ๊ธฐ๋ณธํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ -> ๋ž˜ํผ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  • ์–ธ๋ฐ•์‹ฑ : ๋ž˜ํผ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋œ ๊ฐ’ -> ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋กœ ๊บผ๋‚ด๋Š” ๊ณผ์ •
// ๋ฐ•์‹ฑ
// Integer ๋ž˜ํผ ํด๋ž˜์Šค num์— 21์˜ ๊ฐ’์„ ์ €์žฅ
Integer num = new Integer(21);

// ์–ธ๋ฐ•์‹ฑ
// ๋ž˜ํผ ํด๋ž˜์Šค num์˜ ๊ฐ’์„ ๊บผ๋‚ด ๊ฐ€์ ธ์˜จ๋‹ค.
int n = num.intValue();
// ์˜คํ†  ๋ฐ•์‹ฑ
Integer num = 21;

// ์˜คํ†  ์–ธ๋ฐ•์‹ฑ
int n = num;

Clone this wiki locally