์๋ฐ ๊ฐ๋ ์ฑ ๋์ด๋ 5๊ฐ์ง ํ
์๋ฐ ๊ฐ๋ ์ฑ ๋์ด๋ 5๊ฐ์ง ํ ๊ด๋ จ
๊ฐ๋ฐ์๋ฅผ ์ค๋นํ๋ ๋ง์ ๋ถ๋ค์ด ์๊ธฐ PR ๋ชฉ์ ์ผ๋ก ์ฝ๋๋ฅผ ๊ณต์ ํฉ๋๋ค. ๊นํ์ด๋ ๋ธ๋ก๊ทธ์ ์ง์ ์์ฑํ ์ฝ๋๋ฅผ ์ฌ๋ ค๋์ผ๋ฉด, ๋ณธ์ธ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ ์ฑ์ด ์ข์ง ์์ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ค๋ฉด, ์คํ๋ ค ์ญํจ๊ณผ๊ฐ ๋ ์ ์์ต๋๋ค.
์๊ฐ๋ณด๋ค ํํ๊ฒ ์ผ์ด๋๋ ์ผ์ธ๋ฐ์. ๊ทธ ์ด์ ์ค ํ๋๋ ๋ฐ๋ก ์ฝ๋ ๋ด์ฉ์๋ง ์ง์คํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ๋ฌ๋ถ์ ์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ํ๋ฉด ํ์ฅ์ฑ ์๊ฒ ๊ตฌํํ ์ ์์๊น์ ๋ํด ๊ณ ๋ฏผํ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๊ฒ๋ค์ ๊ณ ๋ฏผํ๋ค ๋ณด๋ฉด ์ ์ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๊ณ , ์ฝ๊ธฐ ์ด๋ ค์ด ์ฝ๋๊ฐ ๋ฉ๋๋ค.
์ฝ๋๋ฅผ ํตํด ์ฌ๋ฌ๋ถ์ด ๊ณ ๋ฏผํ ๋ด์ฉ์ ์จ์ ํ ์ ๋ฌํ๊ธฐ ์ํด์๋ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์์ ์์ฆIT์ ์ฝ๋ ์คํ์ผ์ ์ค์์ฑ์ ๊ดํ ๊ธ์ ๋ฐํํ ์ ์ด ์์ต๋๋ค. ์ธ๋ดํธ, ๋ณ์์ ํจ์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ฝ๋ ์คํ์ผ์ ์ฝ๋์ ์ฒซ์ธ์์ผ๋ก, ์ด๋ฅผ ์ ๋๋ก ์งํค์ง ์์ผ๋ฉด ์์ ์ฝ๋๋ฅผ ์ฝ์ง ์์ ์๋ ์์ต๋๋ค.
์ฝ๋ ์คํ์ผ์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ์ฒซ ๋จ๊ณ์ ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์ฝ๋ ์คํ์ผ ์ธ์ ๊ฐ๋ ์ฑ ๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค. ์ ๋ํ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ ์ฝ๋๋ฅผ ๊ณต์ ํ ๋ ํญ์ ์ ๊ฒฝ ์ฐ๋ ๋ด์ฉ์ธ ๋งํผ, ์ด๋ฒ ๊ธ์ ํตํด ์์ผ๋ก ์ฝ๋๋ฅผ ๊ณต์ ํ ๋ ํ ๋ฒ์ฉ ์ ์ฉํด ๋ณด๋ฉด์ ์ ์ ๋ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
1. Early Out
Early Out์ ๋ฉ์๋์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ์์๋ก ์ฌ์ฉ์์ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ ๋ค์์ ์ฝ๋๋ฅผ ์ดํด๋ด ์๋ค.
public void processOrder(Order order) {
if (order != null) {
if (order.isValid()) {
try {
if (order.getPaymentStatus() == PaymentStatus.PAID) {
if (order.getShippingAddress() != null) {
if (order.getItems().size() > 0) {
// ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ก์ง
// ...
} else {
throw new OrderException("์ฃผ๋ฌธ ์ํ์ด ์์ต๋๋ค.");
}
} else {
throw new OrderException("๋ฐฐ์ก ์ฃผ์๊ฐ ์์ต๋๋ค.");
}
} else {
throw new OrderException("๊ฒฐ์ ๊ฐ ์๋ฃ๋์ง ์์์ต๋๋ค.");
}
} catch (OrderException e) {
// ์ฃผ๋ฌธ ์์ธ ์ฒ๋ฆฌ ๋ก์ง
// ...
} catch (Exception e) {
// ๊ธฐํ ์์ธ ์ฒ๋ฆฌ ๋ก์ง
// ...
}
} else {
throw new OrderException("์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์ ํจํ์ง ์์ต๋๋ค.");
}
} else {
throw new OrderException("์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์์ต๋๋ค.");
}
}
}
์ด ์ฝ๋๋ ์ฃผ๋ฌธ์ด ์ ์์ ์ธ์ง๋ฅผ ํ์ธํ๊ณ , ์ ์์ ์ผ ๊ฒฝ์ฐ ์ฒ๋ฆฌํฉ๋๋ค. ๋ก์ง์ ์๊ฐํด ๋ณด๋ฉด ์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์๊ณ , ์ ํจํ๊ณ , ๊ฒฐ์ ๊ฐ ์๋ฃ๋์๊ณ , ๋ฐฐ์ก ์ฃผ์๊ฐ ์๊ณ , ์ฃผ๋ฌธํ ์ํ์ด ์์ ๋ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํด์ผ ํ๋ ํ๋ฆฐ ๋ก์ง์ด ์๋๋๋ค. ํ์ง๋ง ๊ฐ๋ ์ฑ์ด ๋งค์ฐ ๋จ์ด์ง๋๋ค.
๊ฐ์ฅ ๋จผ์ ๋ฑ์ฅํ๋ ์กฐ๊ฑด์ธ order != null์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ฉ์๋ ๊ฐ์ฅ ์๋์ ๋ฑ์ฅํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค๋ฅธ ์กฐ๊ฑด๋ค ๋ํ ์์ ์๋ ์กฐ๊ฑด์ผ์๋ก, ์๋์ชฝ์์ ๋์ํ๊ณ ์์ต๋๋ค. ์ด์ฒ๋ผ ์กฐ๊ฑด๋ฌธ๊ณผ ๊ทธ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ๊ฒฝ์ฐ, ๊ฐ๋ ์ฑ์ ์ฌํ๊ฒ ํด์น ์ ์์ต๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ ์กฐ๊ฑด์ ๋ฐ์ ์ํด์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์์ธ ๊ฒฝ์ฐ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ฐ์ ๊ฒ์ฌํ๊ณ , ์ผ์ฐ ๋ฉ์๋๋ฅผ ์ข ๋ฃํ๋ ๊ฒ์ ๋๋ค.
public void processOrder(Order order) {
if (order == null) {
throw new OrderException("์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์์ต๋๋ค.");
}
if (!order.isValid()) {
throw new OrderException("์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์ ํจํ์ง ์์ต๋๋ค.");
}
if (order.getPaymentStatus() != PaymentStatus.PAID) {
throw new OrderException("๊ฒฐ์ ๊ฐ ์๋ฃ๋์ง ์์์ต๋๋ค.");
}
if (order.getShippingAddress() == null) {
throw new OrderException("๋ฐฐ์ก ์ฃผ์๊ฐ ์์ต๋๋ค.");
}
if (order.getItems().isEmpty()) {
throw new OrderException("์ฃผ๋ฌธ ์ํ์ด ์์ต๋๋ค.");
}
// ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ก์ง
// ...
}
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ ํจ์ผ๋ก์จ ๊ฐ์ ๋ก์ง์ ์ ์งํ๋ฉด์, ์์ธ ์ฒ๋ฆฌ์ ๋ํ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ๊ธฐ์กด์ ์๋ ์ธ๋ดํธ ์ง์ฅ์ด ํด๊ฒฐ๋๋ ๊ฒ๋ ํฐ ์ฅ์ ์ ๋๋ค.
2. For-each ์ฌ์ฉํ๊ธฐ
์๋ฐ๋ for-each๋ฌธ์ ํตํ ๋ฐ๋ณต์ ์ง์ํฉ๋๋ค. for-each๋ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๋ฉฐ ์์๋ฅผ ์ํํ๋ ์ผ๋ฐ์ ์ธ for๋ฌธ๊ณผ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ด๋ ์ปฌ๋ ์ ์ ๊ฐ ์์์ ์ง์ ์ ๊ทผํ์ฌ ์์ ํ๊ฒ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ ์ํ๋ค์ ์ด ๊ฐ๊ฒฉ์ ๊ตฌํ๋ ์์ ์ฝ๋๋ฅผ ์ดํด๋ด ์๋ค.
List<Product> products = /* ์ฅ๋ฐ๊ตฌ๋์ ์ํ ๋ฆฌ์คํธ */;
int totalPrice = 0;
for (Product product : product) {
totalPrice += product.getQuantity() * product.getPrice();
}
์ด์ฒ๋ผ for-each๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์์๋ค์ ๋ํด ์ํ๋ ์์ ์ ์ง๊ด์ ์ผ๋ก ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ธ๋ฑ์ค๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง ์๋ ๊ฒ์๋ ์ฌ๋ฌ ์ฅ์ ์ด ์์ต๋๋ค.
์ฐ์ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋๋ค. ์ผ๋ฐ์ ์ธ for๋ฌธ์ ๋ค์ ์ฝ๋์ ๊ฐ์ด ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ณ , ๋ค์ ์ด ์ธ๋ฑ์ค๋ฅผ ํตํด ์์์ ์ ๊ทผํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ์ธ๋ฑ์ค์ ๊ด๋ จ๋ ๋ถ๋ถ์ ์๋ตํจ์ผ๋ก์จ ์ฝ๋๊ฐ ๊น๋ํด์ง๊ณ , ๊ฐ๋ ์ฑ์ด ์ข์์ง๋๋ค.
List<Product> products = /* ์ฅ๋ฐ๊ตฌ๋์ ์ํ ๋ฆฌ์คํธ */;
int totalPrice = 0;
for (int i = 0; i < products.size(); i++) {
totalPrice += products.get(i).getQuantity() * products.get(i).getPrice();
}
๋ํ off-by-one ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ด ์ค๋ฅ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ๋ค๋ฃฐ ๋ ์์ฃผ ๋ฐ์ํ๋ ๋ ผ๋ฆฌ ์ค๋ฅ ์ค ํ๋๋ก, ๊ฒฝ๊ณ๊ฐ์ ์๋ชป ์ฒ๋ฆฌํ์ฌ ์๋ํ ๊ฐ๋ณด๋ค 1๋งํผ ํฌ๊ฑฐ๋ ์์ ๊ฐ์ ์ฌ์ฉํ๊ฒ ๋๋ ์ค๋ฅ์ ๋๋ค.
for (int i = 0; i <= products.size(); i++) { โฆ }
for-each๋ฌธ์ ์ค์ ๋ก ์กด์ฌํ๋ ์์๋ค์ ๋ํด์ ์ํํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ค๋ฅ๋ก๋ถํฐ ์์ ํฉ๋๋ค.
๋ฌผ๋ก ๋ชจ๋ ๋ฐ๋ณต์ for-each๋ก ๋์ฒดํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ธ๋ฑ์ค์ ์ ๋ณด๊ฐ ํ์ํ ๋, ์ง์ ๋ฒ์งธ์ ๊ฐ์ด ๋ชจ๋ ์์๊ฐ ์๋ ํน์ ์์์ ๋ํด์๋ง ์์ ์ ์ํํ๊ณ ์ถ์ ๋, ์ญ์์ผ๋ก ์ํํ๊ณ ์ ํ ๋ ๋ฑ for-each๋ก๋ ํด๊ฒฐํ๊ธฐ ํ๋ ๋ฐ๋ณต ์์ ์ด ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ํน์ํ ์ํฉ์์๋ ranged based for๋ฌธ์ ์ฐ๋, ์๋ฐฉํฅ์ผ๋ก ๋ชจ๋ ์์์ ๋ํด ์์ ์ ๋ฐ๋ณตํ ๋๋ for-each๋ฌธ์ ์ฌ์ฉํด ๋ณด์ธ์.
3. ๋ณ์๋ ์ฌ์ฉํ ๋ ์ ์ธํ๊ธฐ
์๋ ๋ฒ์ ์ C์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ค์ ๋ณ์๋ฅผ ํจ์ ๊ฐ์ฅ ์์ ๋ชฐ์์ ์ ์ธํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์๋ฐ๋ ๋ณ์๋ฅผ ๋ฉ์๋ ๊ฐ์ฅ ์์ ๋ชฐ์์ ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค. ๋ณ์๋ฅผ ๋ชฐ์์ ์ ์ธํ๋ ๊ฒ์ ๋ณ์๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ง, ์ปจํ ์คํธ๊ฐ ์๋ ์ํฉ์์ ์ ์ธํด ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์คํ๋ ค ๊ฐ๋ ์ฑ์ ์ ํ์ํต๋๋ค.
// ์ข์ง ์์ ์์
int result;
// ... ๋ง์ ์ฝ๋ ...
result = calculateSomething();
// ์ข์ ์์
// ... ๋ง์ ์ฝ๋ ...
int result = calculateSomething();
์ด์ฒ๋ผ ๋ณ์๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ๋ ๊ณณ ๊ทผ์ฒ์ ์ ์ธํ๋ ๊ฒ์ ์ฝ๋๋ฅผ ์ฝ์ ๋ ์์๋๋ก ํ์ด๋ด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ด๊ณ , ๋ณ์์ ๋ชฉ์ ์ ์ฝ๊ฒ ํ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
4. Null ๋์ Optional
์ฌ์ฉํ๊ธฐ
ํ๋์ ๋ง์ ์ธ์ด๋ค์ null-safety๋ฅผ ๊ฐ์กฐํฉ๋๋ค. ์๋ฐ์์๋ null
์ ์์ ํ๊ณ ๋ช
์์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ, NullPointerException
์ ๋ฐฉ์งํ๊ธฐ ์ํ ์์ ํ ๋ฐฉ๋ฒ์ด ๋ง๋
์น ์์ต๋๋ค. Optional
์ ์ด๋ฅผ ์ด๋ ์ ๋ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์์ต๋๋ค.
int price = 0;
Product product = getProduct(id);
if (product != null) {
price = product.getPrice();
}
Optional์ ์ฌ์ฉ์ด ํ์คํ๋์ด ์์ง ์์ ์ฝ๋๋ผ๋ฉด, getProduct()๊ฐ ๋ฐํํ ๊ฐ์ด null์ธ์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํด ์ฃผ์ด์ผ ํฉ๋๋ค. Optional์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ํด๋น ๊ฐ์ฒด์ ๊ฐ์ด ์์ ์๋ ์๋ค๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ํํํ ์ ์์ต๋๋ค.
int price = getProduct(id).map(Product::getPrice).orElse(0);
/*
์๋์ ๋์ผํ ์ฝ๋
Optional<Product> product = getProduct(id);
int price = product.map(Product::getPrice).orElse(0);
*/
Optional
์ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ฌ์ฉํ๋ฉด ์ ์ฉํฉ๋๋ค.
- ๋ฉ์๋์ ๋ฐํ ๊ฐ์ด
null
์ผ ์ ์๋ ๊ฒฝ์ฐ null
์ฒดํฌ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ
์ ๊ฒฝ์ฐ Optional
์ ํ์ฉํ๋ฉด NullPointerException
์ ์๋ฐฉํ ์ ์์ต๋๋ค. ๋ํ Optional
ํด๋์ค๊ฐ ์ ๊ณตํ๋ map()
, filter()
, orElse()
์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด ํจ์ํ ์คํ์ผ๋ก ์ฝ๋๋ฅผ ๋์ฑ ์ง๊ด์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
5. ์ธํฐํ์ด์ค ์ฌ์ฉํ๊ธฐ
์๋ฐ์์ ์ ๊ณตํ๋ ๋ง์ ์ปฌ๋ ์
๋ค์ ๊ตฌํ์ฒด์ ์ธํฐํ์ด์ค๋ก ๊ตฌ๋ถ๋์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, List
์ธํฐํ์ด์ค๋ ์ด๋ฅผ ๊ตฌํํ๋ ArrayList
, LinkedList
๋ฑ์ ํด๋์ค๊ฐ ์๊ณ , Set ์ธํฐํ์ด์ค๋ HashSet
, TreeSet
๋ฑ์ด ๊ตฌํํฉ๋๋ค.
๋ง์ ๊ฒฝ์ฐ, ๊ตฌ์ฒด์ ์ธ ํด๋์ค ๋์ ์ธํฐํ์ด์ค ์๋ฃํ์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ผ๋ฉฐ, ์ฝ๋๋ฅผ ๋์ฑ ์ ์ฐํ๊ณ ํ์ฅ์ฑ ์๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
์๋ฅผ ๋ค์ด, ์ ์ฒด ์ํ ๋ฆฌ์คํธ๋ฅผ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๋ถ๋ฅํ๋ ๋ฉ์๋ categorize()๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋์ด ์์ต๋๋ค.
HashMap<Category, ArrayList<Product>> categorize(ArrayList<Product> products) {
HashMap<Category, ArrayList<Product>> result = new HashMap<>();
for (Product product : products) {
if (!result.containsKey(product.category)) {
result.put(product.category, new ArrayList<>());
}
result.get(product.category).add(product);
}
return result;
}
์ ์ฝ๋๋ HashMap
๊ณผ ArrayList
๋ฑ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค์ ์์กดํฉ๋๋ค. ์ด๋ ๊ฒ ์์ฑํ ์ฝ๋๋ TreeMap
, LinkedList
์ฒ๋ผ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋ค๋ฅธ ํํ๋ก ๊ตฌํํ ํด๋์ค์ ๋ํด์๋ ์์
์ ์ํํ ์ ์์ต๋๋ค.
๋ฉ์๋ ๋ด์ฉ์ Map
๊ณผ List
์ธํฐํ์ด์ค์์ ์ ๊ณตํ๋ ์์
๋ค๋ก ์ถฉ๋ถํ๋ฏ๋ก, ๊ตณ์ด ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ๋ช
์ํ์ฌ ์ญํ ์ ์ ํํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐ์ํ์ฌ ์์ ํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Map<Category, List<Product>> categorize(List<Product> products) {
Map<Category, List<Product>> result = new HashMap<>();
for (Product product : products) {
if (!result.containsKey(product.category)) {
result.put(product.category, new ArrayList<>());
}
result.get(product.category).add(product);
}
return result;
}
์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ ๊ตฌํ์ฒด๊ฐ ์์ด์ผ ํ๋ฏ๋ก ํด๋์ค๋ฅผ ์ด์ฉํด ์์ฑํ์ง๋ง, ๋ณ์๋ ๋ฉ์๋์ ๋ฐํํ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํจ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ค๋ง ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ์ด ์์ต๋๋ค. ๋ง์ฝ ๊ตฌํ์ฒด๋ณ๋ก ์ฑ๋ฅ์ด๋ ๋์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๊ณ , ์ด๊ฒ์ด ๋ฉ์๋๋ฅผ ์ํํ๋ ๋ฐ์ ์์ด์ ์ค์ํ ์์๋ผ๋ฉด ์ธํฐํ์ด์ค๋ณด๋ค๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ์ ํ์ผ ์ ์์ต๋๋ค.
๋ฆฌ์คํธ์ ๋ํด ๋ฒ๋ธ ์ํธ๋ฅผ ์ํํ๋ ๋ค์์ ๋ฉ์๋๋ฅผ ์ดํด๋ด ์๋ค.
public static void bubbleSort(List<Integer> list) {
int n = list.size();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (list.get(j) > list.get(j + 1)) {
int temp = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temp);
}
}
}
}
์ ๋ฒ๋ธ ์ ๋ ฌ์ List
์ธํฐํ์ด์ค์์ ์ ๊ณตํ๋ get()
๋ฉ์๋๋ฅผ ์ด์ฉํด ์์ฑ๋์์ต๋๋ค. List์์ ์ ๊ณตํ๋ ๊ฒ์ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ง์๊น์?
List๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ๋ํ์ ์ธ ๋ ํด๋์ค์ธ ArrayList์ LinkedList
๋ฅผ ๋น๊ตํด ๋ณด๋ฉด, random-access ๋์์ ์ํํ๋ get() ๋ฉ์๋๊ฐ ์์ํ๋ ์๊ฐ์์ ํฐ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐฐ์ด ๊ธฐ๋ฐ์ธ ArrayList
๋ ์์ ์๊ฐ์ธ ๋ง์ ์ํ๋๋ ๋ฐ ๋ฐํด, ๋งํฌ๋ ๋ฆฌ์คํธ ๊ธฐ๋ฐ์ธ LinkedList
๋ ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ bubbleSort()
๋ฉ์๋๋ ์
๋ ฅ์ผ๋ก ArrayList
๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ์ ์๊ฐ ๋ณต์ก๋๋ฅผ, LinkedList
๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ ๋ฉ์๋์ ๊ตฌ์ฒด์ ์ธ ๋์ ๋ฐฉ์์ ๋ชจ๋ฅด๋ฏ๋ก, ์ด์ ๊ฐ์ ์ฌ์ค์ ์๊ธฐ ํ๋ญ๋๋ค. ์ด์ฒ๋ผ ๋ฉ์๋ ์ธ๋ถ์์ ์ ๋ฌํด ์ฃผ๋ ๊ตฌํ์ฒด์ ๋ฐ๋ผ ๋ฉ์๋์ ๋์์ด ๋ฌ๋ผ์ง ๊ฒฝ์ฐ, ๊ตฌํ์ฒด๋ฅผ ๋ช ์ํ์ฌ ์ํ๋ ๋์๋ง ์ํํ๋๋ก ์ ํํ๋ ๊ฒ๋ ๊ณ ๋ คํ ๋งํ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค.
public static void bubbleSort(ArrayList<Integer> list) {
int n = list.size();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (list.get(j) > list.get(j + 1)) {
int temp = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temp);
}
}
}
}
๋ง์น๋ฉฐ
์ง๊ธ๊น์ง ์๋ฐ ๊ฐ๋ ์ฑ์ ๋์ด๋ 5๊ฐ์ง ํ์ ์ดํด๋ดค์ต๋๋ค. ์ฌ์ค ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ํ๋ฃจ์์นจ์ ๋๋ ๊ฒ์ด ์๋๋๋ค. ์ฝ๋๋ฅผ ํ ์ค ํ ์ค ์ ์ ๋๋ง๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ , ๊ทธ์ค ํ๋๋ฅผ ์ถฉ๋ถํ ๊ทผ๊ฑฐ๋ฅผ ํตํด ์ ํํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํจ์ผ๋ก์จ ์ฐจ๊ทผ์ฐจ๊ทผ ์์๊ฐ ์ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์ ์๊ฐํ ๊ฐ๋ ์ฑ ๋์ด๋ ํ์ด ์ฌ์ํ ์ ์์ง๋ง, ๊ทธ๋งํผ ๋ช ๋ฒ๋ง ์ ๊ฒฝ ์จ์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ถฉ๋ถํ ์ต๊ด ๋ค์ผ ์ ์๋ ๋ด์ฉ์ ๋๋ค. ์ด๋ ๊ฒ ์์ ๋ด์ฉ๋ถํฐ ์์ํด ์ฒด๋ํ๋ค๋ฉด, ์ ์ ๋ ๊ฐ๋ ์ฑ์ ๋์ฌ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค.