์ผ๊ธ ์ปฌ๋ ์ ์ด๋(First Class Collection)
๐ฒ ์ผ๊ธ ์ปฌ๋ ์ : Collection์ Wrappingํ๋ฉด์, ๊ทธ ์ธ ๋ค๋ฅธ ๋ฉค๋ฒ ๋ณ์๋ ์๋ ์ํ๋ฅผ ๋งํ๋ค.
public class GameRanking {
private Map<String, String> ranks;
public GameRanking(Map<String, String> ranks) {
this.ranks = ranks;
}
}
์ผ๊ธ ์ปฌ๋ ์ ์ ์ฅ์
๐ถ ๋น์ฆ๋์ค์ ์ข ์์ ์ธ ์๋ฃ๊ตฌ์กฐ
์ผ๋ฐ์ ์ผ๋ก MVC ํจํด์์ Model์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ด๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ ๋ํ๋จ์ ๋ฐ๋ผ Model์์ Service ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํ๋๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ์ฝ๋์์ ํน์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ฃผ ๋ํ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ก๋ ๋ณต๊ถ ๊ฒ์๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ ๋ค๊ณ ํด๋ณด์.
๋ก๋๋ 6๊ฐ์ ๋ฒํธ๋ง์ด ์กด์ฌํ๋ฉฐ, ์ค๋ณต๋์ง ์์์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ 6๊ฐ์ ๋ฒํธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ฆฌ์คํธ์ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ ์ฌ๋ฆด ์ ์๋ค. ํ์ง๋ง ํด๋น ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค ์์ ๋งํ ๊ฒ์ฆ ๋ก์ง์ ๋งค๋ฒ ์ฒ๋ฆฌํด ์ฃผ์ด์ผ ํ๋ค.
์ด๋ ๋๋ฉ์ธ๊ณผ ์ฝ๋๋ฅผ ์ ๋๋ก ์์ง ๋ชปํ๋ ์ํฉ์์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์๋ค. ๊ฒฐ๊ตญ ๊ฒ์ฆ ๋ก์ง ์์ฒด๋ฅผ ์ง๋ ํน์ํ ์๋ฃ๊ตฌ์กฐ์ ํ์์ฑ์ ๋๋ผ๊ฒ ๋์๊ณ , "์ผ๊ธ ์ปฌ๋ ์ " ์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ํตํด ํด๊ฒฐํ ์ ์๋ค.
public class LottoTicket {
private static final int LOTTO_NUMBERS_SIZE = 6;
private final List<Long> lottoNumbers;
public LottoTicket(List<Long> lottoNumbers) {
validateSize(lottoNumber);
validateDuplicate(lottoNumbers);
this.lottoNumbers = lottoNumbers;
}
priavte void validateSize(List<Long> lottoNumbers) {
...
}
private void validateDuplicate(List<Long> lottoNumbers) {
...
}
}
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ผ๊ธ ์ปฌ๋ ์ ์ ๋น์ฆ๋์ค ๋ก์ง์์ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ์ด๋ค. ์ฆ, "๋น์ฆ๋์ค์ ์ข ์์ ์ธ ์๋ฃ๊ตฌ์กฐ"๊ฐ ๋ง๋ค์ด ์ก๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฅผ ์ต์ํ ํ ์ ์๋ค.
๐ถ ์ปฌ๋ ์ ์ ๋ถ๋ณ์ ๋ณด์ฅํ๋ค.
Java์์ _final_์ ๋ถ๋ณ์ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด ์๋๋ผ, ์ฌํ ๋น๋ง์ ๊ธ์งํ๋ค. ์ด๋ง์ด ์๋ฏธํ๋ ๋ฐ๋ ๊ฐ์ด ์ถ๊ฐ๋ ์๋ ์๋ค๋ ๊ฒ์ด๊ณ ์ค์ง์ ์ผ๋ก๋ "๋ฐ์ชฝ์๋ฆฌ ๋ถ๋ณ" ์ด๋ผ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ถ์์ ํ ๋ถ๋ณ์ ํด๊ฒฐํ๊ธฐ ์ํด Java์์๋ "์ผ๊ธ ์ปฌ๋ ์ "๊ณผ "๋ํผ ํด๋์ค(Wrapper Class)"๋ฅผ ์ฌ์ฉํ๋ค.
public class Orders {
private final List<Order> orders;
public Orders(List<Order> orders) {
this.orders = orders;
}
public long getAmountSum() {
return orders.stream()
.mapToLong(Order::getAmount)
.sum();
}
}
์ผ๊ธ ์ปฌ๋ ์ ์ ์ ์ํ ๋ setter ์์ฒด๋ฅผ ๋ง๋ค์ง ์๊ณ , ๊ฐ์ ์๋ก ๋ง๋ค๊ฑฐ๋ ๊ฐ์ ธ์ค๋ ๋ฉ์๋๋ง ์๋ค๋ฉด ์ฌ์ฉ์ ์ ์ฅ์ผ๋ก์จ๋ List์ ์ ๊ทผํ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ์ด๋ค.
๐ถ ์ํ์ ํ์๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌ
๊ฐ์ฒด ์งํฅ์ ์ธ ๊ด์ ์์ "๊ฐ์ฒด๋ ๊ฐ์ฒด ๋ต๊ฒ ์ฌ์ฉํ๋ผ"๊ณ ๋งํ๊ณค ํ๋ค. ์ฆ, ์ํ๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด์ ๋ํด์๋ ๊ทธ ๊ฐ์ฒด๊ฐ ์ ๋๋ก๋ ์ญํ , ๋ก์ง์ ๊ตฌํํ๋๋ก ๊ถ์ฅ๋๋ค.
๊ทธ ์ด์ ๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง, ์ํ์ ๋ฐ๋ผ ์ง์ ๋ ๋ฉ์๋์์๋ง ์ํํ ์ ์๋ ๊ฒ์ด ํฐ ์ฅ์ ์ด๋ผ ์๊ฐํ๋ค. ๋ํ ํ์คํ ๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ ์ฌ๋์ด๋๋ผ๋, ์ํ์ ์ฐ๊ด์ง์ด ํ์ ๋ก์ง์ ์ถ๊ฐํ ์ ์๋ค๋ ๊ฒ ๋ํ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
๐ถ ์ด๋ฆ์ด ์๋ ์ปฌ๋ ์
๋ง์ง๋ง์ผ๋ก ์ปฌ๋ ์ ์ ์ด๋ฆ์ ๋ถ์ผ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํตํด ๋ช ํํ ํํ๊ณผ ๊ฒ์์ ์ฉ์ดํ๋๋ก ํ ์ ์๋ค.
References
'๐ซ Language > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ชจ๋ ๊ฐ์ฒด๋ ๋ถ๋ณ ๊ฐ์ฒด์ฌ์ผ ํ ๊น? (0) | 2024.02.28 |
---|---|
[Java] ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5์์น(SOLID)์ด๋? (2) | 2024.01.13 |
[Java] JUnit5 ์ฌ์ฉ๋ฒ ์์๋ณด๊ธฐ (0) | 2024.01.09 |
[Java] ๋ฉํฐ์ค๋ ๋์ ๋๊ธฐํ์ ๋ํด์ (1) | 2024.01.06 |
[Java] ๋๊ธฐ/๋น๋๊ธฐ & ๋ธ๋ญํน/๋ ผ๋ธ๋ญํน์ด๋? (0) | 2024.01.02 |