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ํ์ ์ ์์๊ฐ์ ๊ฐ์ธ์ ํํ. ๋ช ํํ ์๋ฏธ๋ฅผ ์ ๋ฌ
- ์ด์ฒ๋ผ ์์๊ฐ์ ํฌ์ฅํ๋ค๋ ๊ท์น์ ์๊ฒฌ์ด ๋ถ๋ถํ๊ฒ ๋๋ ์ ์๋ ํด์์ ๋จ์ด๋ฅผ ์ ๊ฟฐ์ด์ฃผ๋ ๋์์ ๊ฐ์ ์๋ฏธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ท์น์ด ๋๋ค.