๊ด€๋ฆฌ ๋ฉ”๋‰ด

Coding Planet

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”]chapter2 : [์•„์ดํ…œ6] ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ ๋ณธ๋ฌธ

๐Ÿ’ป Java Study

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”]chapter2 : [์•„์ดํ…œ6] ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ

jhj.sharon 2023. 8. 16. 20:52
๋ฐ˜์‘ํ˜•

์•„์ดํ…œ6 :  ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ

 

๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์˜ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์ƒ์„ฑํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋‚˜์„ ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ์žฌ์‚ฌ์šฉ์€ ๋น ๋ฅด๊ณ  ์„ธ๋ จ๋˜๋‹ค.

 

 

1. String Instance์˜ ์˜ˆ์‹œ

(1) 'new' ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ

  • ๋ฌธ์ž์—ด์€ heap ์˜์—ฌ๊ฒก ์ €์žฅ๋˜๋ฉฐ ์•„๋ž˜ ๋ฌธ์žฅ์ด ์‹คํ–‰๋  ๋•Œ ๋งˆ๋‹ค String ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. 
String s = new String("Effective Java");

 

(2) String Constant Pool

  • String Constant Pool์€ Java์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋กœ, ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์ €์žฅํ•˜๋Š” ํŠน๋ณ„ํ•œ ์˜์—ญ์ด๋‹ค.
  • Java์—์„œ ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€(immutable)ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋™์ผํ•œ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ๋ฒˆ๋งŒ ์ €์žฅ๋œ๋‹ค.
  • ์ด ์ฝ”๋“œ๋Š” ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งค๋ฒˆ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ํ•˜๋‚˜์˜ String ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ™์€ ๊ฐ€์ƒ ๋จธ์‹  ์•ˆ์—์„œ ์ด์™€ ๋˜‘๊ฐ™์€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•จ์ด ๋ณด์žฅ๋œ๋‹ค.
String s = "Effective Java";

(3) ๊ฒ€์ฆ ์ฝ”๋“œ

  • ์•„๋ž˜ ์ฝ”๋“œ์—์„œ str1๊ณผ str2๋Š” ๋™์ผํ•œ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด "Effective Java"๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ, ๋‘˜์€ String Constant Pool์—์„œ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ str1 == str2๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ, new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋ฉด, ๊ทธ ๋ฌธ์ž์—ด์€ ํž™ ์˜์—ญ์— ์ €์žฅ๋˜์–ด String Constant Pool๊ณผ๋Š” ๋ณ„๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. ์ด ๊ฒฝ์šฐ, str3 == str4๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • str1 == str3๋„ false
package jeon.chapter2.item6;

public class StringInstance {

    String str1 = "Effective Java";
    String str2 = "Effective Java";
    String str3 = new String("Effective Java");
    String str4 = new String("Effective Java");

    public void checkStrings() {
        if(str1 == str2) {
            System.out.println("str1๊ณผ str2๋Š” ๋™์ผ");
        } else {
            System.out.println("str1๊ณผ str2๋Š” ๋™์ผํ•˜์ง€ ์•Š์Œ");
        }

        if(str3 == str4) {
            System.out.println("str3๊ณผ str4๋Š” ๋™์ผ");
        } else {
            System.out.println("str3๊ณผ str4๋Š” ๋™์ผํ•˜์ง€ ์•Š์Œ");
        }
    }

    public static void main(String[] args) {
        StringInstance instance = new StringInstance();
        instance.checkStrings();
    }
}

 

 

 

2. ์ •์  ํŒฉํ„ฐ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ถˆ๋ณ€ ํด๋ž˜์Šค

  • ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Boolean(String) ์ƒ์„ฑ์ž ๋Œ€์‹  Boolean.valueOf(String) ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์ƒ์„ฑ์ž๋Š” ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€๋งŒ, ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ „ํ˜€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.
  • ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๊ฐ€๋ณ€ ๊ฐ์ฒด๋ผ ํ•ด๋„ ์‚ฌ์šฉ ์ค‘์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์•ˆ๋‹ค๋ฉด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
public static Boolean valueOf(boolean b) {
    return b ? Boolean.TRUE : Boolean.FALSE;
}

 

3. ๋น„์‹ผ ๊ฐ์ฒด๋Š” ์บ์‹ฑํ•ด์„œ ์“ฐ๊ธฐ

  • ๋น„์‹ผ ๊ฐ์ฒด๋ž€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ์— ๋งŽ์€ ์ž์›(์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ, CPU ๋“ฑ)์ด ์†Œ๋ชจ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฐ์ฒด, ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด ๋“ฑ์ด ์ด์— ํ•ด๋‹น๋œ๋‹ค.
  • ๋น„์‹ผ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์บ์‹œ(๋ฉ”๋ชจ๋ฆฌ์— ์ž„์‹œ๋กœ ์ €์žฅ)์— ์ €์žฅํ•ด๋‘๊ณ , ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

(1 )String.matches ์˜ ๋ฌธ์ œ์ 

  • ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ •๊ทœํ‘œํ˜„์‹๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” Java์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ. ์œ„ ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.
  • โ‘  ์„ฑ๋Šฅ ๋ฌธ์ œ : String.matches๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ 'Pattern'๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ •๊ทœํ‘œํ˜„์‹์˜ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด 'Pattern' ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ String.matches๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ์šด 'Pattern'๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ์— ๋ถ€๋‹ด์ด ๋œ๋‹ค.
  • โ‘ก ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋ฌธ์ œ : String.matches ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋œ Pattern ๊ฐ์ฒด๋Š” ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๊ฒŒ ๋˜๋ฏ€๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.
  • โ‘ข ์œ ํ•œ ์ƒํƒœ ๋จธ์‹  (Finite State Machine) : ์ •๊ทœํ‘œํ˜„์‹์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์œ ํ•œ ์ƒํƒœ ๋จธ์‹ ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋™์ž‘ํ•œ๋‹ค. Pattern ๊ฐ์ฒด๋Š” ์ด ์œ ํ•œ ์ƒํƒœ ๋จธ์‹ ์„ ๊ตฌ์„ฑํ•˜๊ณ , ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ์œ ํ•œ ์ƒํƒœ ๋จธ์‹ ์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์€ ๋น„์šฉ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์ž‘์—…์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค.

** ์œ ํ•œ์ƒํƒœ๋จธ์‹  : ์ฃผ์–ด์ง€๋Š” ๋ชจ๋“  ์‹œ๊ฐ„์—์„œ ์ฒ˜ํ•ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์œ ํ•œ๊ฐœ์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์ฃผ์–ด์ง€๋Š” ์ž…๋ ฅ์— ๋”ฐ๋ผ ์–ด๋–ค ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅ์ด๋‚˜ ์•ก์…˜์ด ์ผ์–ด๋‚˜๊ฒŒ ํ•˜๋Š” ์žฅ์น˜ ๋˜๋Š” ๊ทธ๋Ÿฐ ์žฅ์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ ๋ชจ๋ธ

 

public class RomanNumerals {
    static boolean isRomanNumeral(String s) {
        return s.matches("^(?=.)M*(C[MD]|D?C{0,3})" +
                "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})");
    }
}

 

(2)String.matches์˜ ๋ฌธ์ œ์  ํ•ด๊ฒฐ : ๊ฐ’๋น„์‹ผ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•ด ์„ฑ๋Šฅ์„ ๊ฐœ์„ 

  • ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ์ •๊ทœํ‘œํ˜„์‹์„ ํ‘œํ˜„ํ•˜๋Š” (๋ถˆ๋ณ€์ธ) Pattern ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋ž˜์Šค ์ดˆ๊ธฐํ™”(์ •์  ์ดˆ๊ธฐํ™”) ๊ณผ์ •์—์„œ ์ง์ ‘ ์ƒ์„ฑํ•ด ์บ์‹ฑํ•ด๋‘๊ณ , ๋‚˜์ค‘์— ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ถ”๊ฐ€๋กœ, ๊ฐœ์„  ์ „์—์„œ๋Š” ์กด์žฌ์กฐ์ฐจ ๋ชฐ๋ž๋˜ Pattern ์ธ์Šคํ„ด์Šค๋ฅผ static final ํ•„๋“œ๋กœ ๋„์ง‘์–ด๋‚ด๊ณ  ์ด๋ฆ„์„ ์ง€์–ด์ฃผ์–ด ์ฝ”๋“œ์˜ ์˜๋ฏธ๊ฐ€ ํ›จ์”ฌ ์ž˜ ๋“œ๋Ÿฌ๋‚œ๋‹ค.
  • ์ง€์—ฐ ์ดˆ๊ธฐํ™”(lazy initialization)๋กœ ๋ถˆํ•„์š”ํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ์—†์•จ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๊ถŒํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ์ฝ”๋“œ๋Š” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋งŒ ์„ฑ๋Šฅ์€ ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์ง€ ์•Š์„ ๋•Œ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(์ง€์—ฐ์ดˆ๊ธฐํ™” : https://sharonprogress.tistory.com/223)
package jeon.chapter2.item6;

import java.util.regex.Pattern;

public class RomanNumerals {
 
    private static final Pattern ROMAN = Pattern.compile("^(?=.)M*(C[MD]|D?C{0,3})" +
            "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})");
    //compile : ์ •๊ทœํ‘œํ˜„์‹์„ ์ปดํŒŒ์ผํ•˜์—ฌ 'pattern'๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ •๊ทœํ‘œํ˜„์‹์˜ ์œ ํšจ์„ฑ๋„ ๊ฒ€์‚ฌ
    static boolean isRomanNumeral(String s) {
        return ROMAN.matcher(s).matches();
    }

    public static void main(String[] args) {
        String[] testStrings = {"III", "IV", "IX", "LVIII", "MCMXCIV", "ABC", "100"};

        for (String test : testStrings) {
            System.out.println(test + " is a Roman numeral? " + isRomanNumeral(test));
        }
    }
    
}

 

 

 

4. ๋ถˆํŽธ ๊ฐ์ฒด ์‚ฌ์šฉ์ง€ ์ฃผ์˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋ถˆ๋ณ€ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ์— ์•ˆ์ •ํ•˜๊ฒŒ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๋ช…ํ™•ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ช‡๋ช‡ ๊ฒฝ์šฐ์— ๋ถ„๋ช…ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์–ด๋Œ‘ํ„ฐ๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด, ์–ด๋Œ‘ํ„ฐ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ๋’ค์— ์žˆ๋Š” ๊ฐ์ฒด๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฐ์ฒด๋ผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • Map ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” keySet์€ Map์ด ๋’ค์— ์žˆ๋Š” Set ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ทฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. keySet์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋‚˜์˜ฌ๊ฑฐ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํ„ด ๋ฐ›์€ Set ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด, ๊ฒฐ๊ตญ์— ๊ทธ ๋’ค์— ์žˆ๋Š” Map ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค.
package jeon.chapter2.item6;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class KeySetExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("One", 1);
        map.put("Two", 2);
        map.put("Three", 3);

        Set<String> keys = map.keySet();
        for (String key : keys) {
            System.out.println(key);
        }

        // "Two" ํ‚ค๋ฅผ Set์—์„œ ์ œ๊ฑฐํ•˜๋ฉด ์›๋ž˜์˜ ๋งต์—์„œ๋„ ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์ œ๊ฑฐ๋œ๋‹ค.
        keys.remove("Two");
        System.out.println(map);  // {One=1, Three=3}
    }
}

 

 

5. ์˜คํ† ๋ฐ•์‹ฑ : ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์œ„ํ—˜

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

(1) sum ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด Wrapperํด๋ž˜์Šค Long์ผ ๋•Œ 

  • ๊ฐ’์€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜์ง€๋งŒ ๋Š๋ฆฌ๋‹ค.
package jeon.chapter2.item6;

public class AutoBoxingExample {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        Long sum = 0l;
        for (long i = 0 ; i <= Integer.MAX_VALUE ; i++) {
            sum += i;
        }
        System.out.println(sum);
        System.out.println(System.currentTimeMillis() - start);
    }
}

(2)sum ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๊ธฐ๋ณธํ˜• long์ผ ๋•Œ 

package jeon.chapter2.item6;

public class AutoBoxingExample {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        long sum = 0l;
        for (long i = 0 ; i <= Integer.MAX_VALUE ; i++) {
            sum += i;
        }
        System.out.println(sum);
        System.out.println(System.currentTimeMillis() - start);
    }
}

 

 

๐Ÿ‘ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ํ†ต์ฐฐ๋ ฅ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„

  • ์ด ์•„์ดํ…œ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋น„์‹ธ๋‹ˆ ๋ฌด์กฐ๊ฑด ํ”ผํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ๋ช…ํ™•์„ฑ, ๊ฐ„๊ฒฐ์„ฑ, ๊ธฐ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” ์ถ”๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋ชซ์ด๋‹ค.
  • ๊ฐ์ฒด ์ƒ์„ฑ์„ ํšจ์œจ์ ์œผ๋กœ ํ•ด๋ณด๊ฒ ๋‹ค๊ณ  ์‚ฌ์†Œํ•œ ๊ฒƒ๋“ค๋„ ๋‹ค ์บ์‹ฑํ•˜๊ฑฐ๋‚˜ ์ž์ฒด ํ’€(pool)์„ ๋งŒ๋“ค์–ด์„œ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ณต์žกํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ํ”ผํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค (JVM์—๊ฒŒ ์œ„์ž„ํ•  ๋ถ€๋ถ„์€ ์œ„์ž„ํ•ด๋ผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์‹ ๋ขฐํ•˜์ž)
  • [Item50]๋ฐฉ์–ด์  ๋ณต์‚ฌ(defensive copy) ์™€ ๋Œ€๋น„๋˜๋Š” ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์™€ ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ๊ฒƒ์„ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๊ฐœ๋ฐœ์ž์˜ ์—ญ๋Ÿ‰์— ๋‹ฌ๋ ค์žˆ๋‹ค (ํ˜น์€ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง์ ‘ ํ•ด์„œ ๋น„๊ตํ•ด๋ณด์•„๋ผ)
๋ฐ˜์‘ํ˜•
Comments