1011 - 1017


# 1011 - 1017

# 1011 - ์ผ๊ธ‰์ฝœ๋ ‰์…˜(First Class Collection)

# ์ผ๊ธ‰์ฝœ๋ ‰์…˜์ด๋ž€

Collection์œผใ„น Wrappingํ•˜๋ฉด์„œ, Wrappingํ•œ Collection ์™ธ ๋‹ค๋ฅธ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ƒํƒœ๋ฅผ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์ด๋ผ ํ•œ๋‹ค.

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

# ์ผ๊ธ‰์ปฌ๋ ‰์…˜ ์˜ˆ์ œ

public class Person {
    private String name;
    private List<Car> cars;
    // ...
}

public class Car {
    private String name;
    private String oil;
    // ...
}
  • ์ผ๊ธ‰์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณ€ํ™˜
public class Person {
    private String name;
    private Cars cars;
    // ...
}

// List<Car> cars๋ฅผ Wrapping
// ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜
public class Cars {
    // ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜
    private List<Car> cars;
    // ...
}

public class Car {
    private String name;
    private String oil;
    // ...
}
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด List collection ์™ธ ๋‹ค๋ฅธ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ์—†๋‹ค.

# ์žฅ์ 

  • ์ปฌ๋ ‰์…˜์—๊ฒŒ ์ƒํƒœ์™€ ๋กœ์ง ๊ด€๋ฆฌ๋ฅผ ์œ„์ž„ํ•˜์—ฌ ๋กœ์ง์ด ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์˜ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ์ค‘๋ณต์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ปฌ๋ ‰์…˜์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

# 1012 - ๋ชจ๋“  ์›์‹œ๊ฐ’๊ณผ ๋ฌธ์ž์—ด์„ ํฌ์žฅ

# ์›์‹œ๊ฐ’๊ณผ ๋ฌธ์ž์—ด์˜ ํฌ์žฅ์ด๋ž€

๋ชจ๋“  ์›์‹œ๊ฐ’๊ณผ ๋ฌธ์ž์—ด์„ ํฌ์žฅํ•˜๋ผ ๋ผ๋Š” ๋ง์€ ๊ฐ์ฒด์ง€ํ–ฅ ์ฒด์กฐ ์›์น™์—์„œ ๋‚˜์˜จ๋ง๋กœ Primitive Obsession Anti Pattern(๋„๋ฉ”์ธ์˜ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด primitvieํƒ€์ž…์„ ์“ฐ๋Š” ๋‚˜์œ ์Šต๊ด€)์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.
์ฆ‰, ์›์‹œ๊ฐ’ ํฌ์žฅ์€ ์›์‹œ ์œ ํ˜•์˜ ๊ฐ’(๋ณ€์ˆ˜๋ช…)์„ ์ด์šฉํ•ด ์˜๋ฏธ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๊ณ , ์˜๋ฏธ์žˆ๋Š” ๊ฐ์ฒด๋กœ ํฌ์žฅํ•œ๋‹ค๋Š” ๊ฐœ๋….

int ๊ฐ’ ํ•˜๋‚˜ ์ž์ฒด๋Š” ๊ทธ๋ƒฅ ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ์Šค์นผ๋ผ(์ˆ˜์น˜๋งŒ์œผ๋กœ ์™„์ „ํžˆ ํ‘œ์‹œ๋˜๋Š” ์–‘) ๊ฐ’์ผ ๋ฟ์ด๋‹ค. ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ int ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค๋ฉด ๊ทธ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์˜๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ˆ˜๋‹จ๊ณผ ๋ฐฉ๋ฒ•์„ ๊ฐ€๋ฆฌ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๋˜‘๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹œ๊ฐ„์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์„ ๊ฒฝ์šฐ, ๋ฌด์Šจ ์ผ์ด ์ƒ๊ธฐ๋Š”์ง€๋Š” ํ›จ์”ฌ ์ž๋ช…ํ•˜๋‹ค. ์ด๋Ÿฐ ์ž‘์€ ๊ฐ์ฒด๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ๋งค์„œ๋“œ์—๊ฒŒ ์—ฐ๋„ ๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์›์‹œํ˜• ๋ณ€์ˆ˜๋กœ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜๋ฏธ์ ์œผ๋กœ ๋งž๋Š” ํ”„๋กœ๊ทธ๋ž˜ ์ž‘์„ฑ์„ ์•ˆ๋‚ดํ•  ์ˆ˜ ์—†๋‹ค. ๊ฐ์ฒด๋กœ๋ผ๋ฉด ์•„์ฃผ ์‚ฌ์†Œํ•˜๋”๋ผ๋„ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๊ทธ ๊ฐ’์ด ์–ด๋–ค ๊ฐ’์ด๋ฉฐ, ์™œ ์“ฐ๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „ํ•˜๋Š” ์…ˆ์ด๋‹ค. ๋˜ํ•œ ์‹œ๊ฐ„์ด๋‚˜ ๋ˆ๊ณผ ๊ฐ™์€ ์ž‘์€ ๊ฐ์ฒด๋Š” ํ–‰์œ„๋ฅผ ๋†“์„ ๋ถ„๋ช…ํ•œ ๊ณณ์„ ๋งˆ๋ จํ•ด ์ฃผ์„œ, ๊ทธ๋ ‡์ง€ ์•Š์•˜๋‹ค๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ฃผ์œ„๋ฅผ ๊ฒ‰๋Œ์•˜์„์ง€๋„ ๋ชจ๋ฅด๋Š” ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. ์ด๋Š” ํŠนํžˆ ๊ฒŒํ„ฐ์™€ ์„ธํ„ฐ์— ๊ด€๋ จ๋œ ๊ทœ์น™์„ ์ ์šฉํ•˜๊ณ  ๊ทธ๋Ÿฐ ์ž‘์€ ๊ฐ์ฒด๋งŽ์ด ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๊ทธ๋ ‡๋‹ค.

# ์›์‹œ๊ฐ’ ํฌ์žฅ ์˜ˆ์ œ

public class Lotto {
    int number = 1;    
}
  • ํ•ด๋‹น ์ฝ”๋“œ๋กœ๋Š” number๊ฐ€ ์ˆซ์ž๋ผ๋Š” ๊ฒƒ ์ด์ƒ์˜ ์ด์•ผ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋˜ํ•œ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.
public class Lotto {
    LottoNumber number = 1;    
}

public class LottoNumber {
    int value;
}
  • ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด intํƒ€์ž…์˜ ์›์‹œ๊ฐ’์„ ๊ฐ์‹ธ์„œ ํ‘œํ˜„. ๋ช…ํ™•ํ•œ ์˜๋ฏธ๋ฅผ ์ „๋‹ฌ
  • ์ด์ฒ˜๋Ÿผ ์›์‹œ๊ฐ’์„ ํฌ์žฅํ•œ๋‹ค๋Š” ๊ทœ์น™์€ ์˜๊ฒฌ์ด ๋ถ„๋ถ„ํ•˜๊ฒŒ ๋‚˜๋‰  ์ˆ˜ ์žˆ๋Š ํ•ด์„์˜ ๋‹จ์ดˆ๋ฅผ ์ž˜ ๊ฟฐ์–ด์ฃผ๋Š” ๋™์‹œ์— ๊ฐ’์„ ์˜๋ฏธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ทœ์น™์ด ๋œ๋‹ค.
Last update: September 13, 2022 21:44
Contributors: ahnjs