tocoble์ ๋ณด๋ค๊ฐ ์ผ๊ธ ์ปฌ๋ ์ ์ ์๊ฒ ๋์๊ณ ์ด์ ๋ํด ์๊ฒ๋ ๋ด์ฉ์ ์ ๋ฆฌํด๋๋ ค๊ณ ํฉ๋๋ค.
1. ์ผ๊ธ ์ปฌ๋ ์ ๊ท์น
๋จผ์ , ์ผ๊ธ ์ปฌ๋ ์ ์ ๊ท์น์ ๋ํด์ ์์๋ด ์๋ค.
- ํด๋์ค๋ ์ปฌ๋ ์ ์ ์ ์ธํ๊ณ ๋ค๋ฅธ ์ด๋ค ๋ฉค๋ฒ ๋ณ์๊ฐ ์์ด์ผ ํจ
์ปฌ๋ ์ ์ Wrappingํ๋ฉด์ Wrappingํ Collection์ธ ๋ค๋ฅธ ๋ฉค๋ฒ ๋ณ์๊ฐ ์๋ ์ํ๋ฅผ ๋ปํจ
2. ์์
SafariService
์ฌํ๋ฆฌ์๋น์ค๊ฐ ๋๋ฌผ๋ค์ List ์๋ฃ๊ตฌ์กฐ๋ก ์ง์ ๊ด๋ฆฌํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์๋ฒ๋๋์ ์ฌํ๋ฆฌ ์๋น์ค๋ฅผ ์ด์ํ๋ค๋ฉด ์ฌ๋ฌ ๋๋ฌผ๋ค์ ๊ด๋ฆฌํ ๊ฒ์ ๋๋ค.
์ฌํ๋ฆฌ์ ์๋ ๋๋ฌผ๋ค์ ์ ํด์ง ์ต์ ์๋์ง๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผํฉ๋๋ค.
์ด๋ฅผ ์ํด์ SafariService๋ ๊ด๋ฆฌํ๋ ๋๋ฌผ๋ค์ด ์กฐ๊ฑด์ ๋ถํฉํ๋์ง ํ์ธํ๋ ๋ก์ง์ด ํ์ํฉ๋๋ค.
class SafariService {
private static final int MINIMUM_ENERGY = 25;
public void openSafari() {
List<Animal> animals = createAnimals();
validateLowEnergy(animals, MINIMUM_ENERGY);
validateSize(animals);
}
public List<Animal> createAnimals() {
Animal tiger = new Animal("ํธ๋์ด", 30);
Animal cat = new Animal("๊ณ ์์ด", 20);
Animal dog = new Animal("๊ฐ", 10);
return List.of(tiger, cat, dog);
}
private void validateSize(List<Animal> animals) {
if (animals.size() >= 100) {
throw new IllegalArgumentException("100๋ง๋ฆฌ ์ด์์ ๋๋ฌผ์ด ์์ ์ ์์ต๋๋ค.");
}
}
private void validateLowEnergy(List<Animal> animals, int minimumEnergy) {
for (Animal animal : animals) {
if (animal.getEnergy() < minimumEnergy)
throw new IllegalArgumentException("์ต์ ์๋์ง๊ฐ ๋ถ์กฑํฉ๋๋ค.");
}
}
}
public class Animal {
private String name;
private int energy;
public Animal(String name, int energy) {
this.name = name;
this.energy = energy;
}
public String getName() {
return name;
}
public int getEnergy() {
return energy;
}
}
์ ์ฝ๋์์ ์ฌํ๋ฆฌ๋ ์คํ ์ ๋๋ฌผ๋ค์ ์ต์ ์๋์ง ์กฐ๊ฑด๊ณผ ์ต๋ ๋๋ฌผ ์ ์กฐ๊ฑด์ ๋ถํฉํ๋์ง ์ฒดํฌํฉ๋๋ค.
-> ์๋น์ค ๋ฉ์๋์์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ฒ๋ฆฌ๋จ
์ฐ๋ฆฌ๋ ๋๋ฌผ ์์ฑ์ ์ํด์ [์ต์ ์๋์ง, ์ต๋ ๋๋ฌผ ์] ์กฐ๊ฑด์ ๋ง์กฑํด์ผํ๋ค๋ ์ฌ์ค์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํ์ง๋ง, ๋ค๋ฅธ ๊ณณ์์ Animal์ ์์ฑํ๋ ์ฌ๋์ ์ด๋ฅผ ๋ชจ๋ฅผ ์๋ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด ์์ฑ ์ ์ํ๋ ์กฐ๊ฑด์ ์ฒดํฌํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ ๋ง๋ค ์ ์์ต๋๋ค. (์ผ๊ธ ์ปฌ๋ ์ )
class AnimalsManager {
private static final int MINIMUM_ENERGY = 25;
private final List<Animal> animals;
public AnimalsManager(List<Animal> animals) {
validateLowEnergy(animals, MINIMUM_ENERGY);
validateSize(animals);
this.animals = animals;
}
private void validateSize(List<Animal> animals) {
if (animals.size() >= 100) {
throw new IllegalArgumentException("100๋ง๋ฆฌ ์ด์์ ๋๋ฌผ์ด ์์ ์ ์์ต๋๋ค.");
}
}
private void validateLowEnergy(List<Animal> animals, int minimumEnergy) {
for (Animal animal : animals) {
if (animal.getEnergy() < minimumEnergy)
throw new IllegalArgumentException("์ต์ ์๋์ง๊ฐ ๋ถ์กฑํฉ๋๋ค.");
}
}
}
์ ์ฝ๋๋ ์ปฌ๋ ์ ์ Wrappingํ๊ณ ์๊ณ ์์ฑ ์ ํ์ํ ๊ฒ์ฆ ๋ก์ง๋ ์ํํด์ค๋๋ค.
Animal๊ณผ ๊ด๋ จ๋ ๋น์ฆ๋์ค๋ก์ง์ ํฌํจํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ผ๊ธ ์ปฌ๋ ์ ์ผ๋ก ๋ง๋ค์ด์ก๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ด์ SafariService ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์๋น์ค์์๋ ๋์ผํ ๊ฒ์ฆ๋ก์ง๊ณผ ํจ๊ป ๋๋ฌผ์ ์์ฑํ ์ ์์ต๋๋ค.
3. ๋ถ๋ณ
- ์ผ๊ธ ์ปฌ๋ ์ ์ ์ปฌ๋ ์ ์ ๋ถ๋ณ์ ๋ณด์ฅ
๋ง์ฝ, Service์ List ํํ๋ก ์ปฌ๋ ์ ์ด ๋ฐ๋ก ๋ ธ์ถ๋๋ค๋ฉด final๋ก ์ ์ธํด๋ ์ฌํ ๋น๋ง ๋ชปํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
List์ ์๋ก ์ถ๊ฐํ๊ณ ์ญ์ ํ๋ ๊ฒ์ final๋ง์ผ๋ก ๋ง์ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ '์ผ๊ธ ์ปฌ๋ ์ '๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํด์ผํฉ๋๋ค.
class AnimalsManager {
private final List<Animal> animals;
private static final int MINIMUM_ENERGY = 25;
public AnimalsManager(List<Animal> animals) {
validateLowEnergy(animals, MINIMUM_ENERGY);
validateSize(animals);
this.animals = animals;
}
...
public long overSpecificEnergySum(int energy) {
return animals.stream()
.filter(animal -> animal.getEnergy() >= energy)
.mapToLong(Animal::getEnergy)
.sum();
}
}
AnimalManger๋ Animal ๋ฆฌ์คํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์์ต๋๋ค.
๋ํ, ์ปฌ๋ ์ ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก '๋ถ๋ณ ์ปฌ๋ ์ '์ด ๋ณด์ฅ๋ฉ๋๋ค.
-> '์ผ๊ธ ์ปฌ๋ ์ '์ ํตํด '๋ถ๋ณ ์ปฌ๋ ฅ์ ' ๋ง๋ค๊ธฐ
๊ทธ๋ผ ์ด์ SafariService์์ Animal ๋ฆฌ์คํธ๋ฅผ ๊ทธ๋๋ก ๋ ธ์ถํ๋ ์ฝ๋๋ฅผ ์ดํด๋ด ์๋ค.
class SafariService {
private static final int MINIMUM_ENERGY = 25;
public void openSafari() {
List<Animal> animals = createAnimals();
validateLowEnergy(animals, MINIMUM_ENERGY);
validateSize(animals);
// animals์ ๋ฐ๋ก ์ ๊ทผํด์ ์ถ๊ฐ/์ญ์ ๋ด๋ถ ํ๋ ์ ๊ทผ ๊ฐ๋ฅ
animals.add(new Animal("์ฌ์", 100));
long sum = animals.stream()
.filter(animal -> animal.getEnergy() >= 20)
.mapToLong(Animal::getEnergy)
.sum();
}
...
}
์ ์ฝ๋์ฒ๋ผ SafariService์์๋ animals๊ฐ ์ถ๊ฐ/์ญ์ /๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. (๋ถ๋ณ ์ปฌ๋ ์ ์ด ์๋)
4. ์ํ์ ํ์๋ฅผ ํ๊ณณ์์ ๊ด๋ฆฌ
๋ค์ํ๋ฒ ์๋์ Service ์ฝ๋๋ฅผ ๋ณด๋ฉด [ํน์ ์๋์ง ์ด์ ๋๋ฌผ์ ์๋์ง ์ดํฉ]์ ๊ตฌํ๊ณ ์์ต๋๋ค.
์ด๋ฅผ Service์์ ๊ด๋ฆฌํ๋ฉด ๋ค๋ฅธ ์๋น์ค์์ [ํน์ ์๋์ง ์ด์ ๋๋ฌผ์ ์๋์ง ์ดํฉ]์ ๊ตฌํ ๋ 1. ์ค๋ณต ๋ก์ง์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
๋ํ, 2. ๊ณ์ฐ๋ก์ง ๋ณ๊ฒฝ ์ ๊ด๋ฆฌํด์ผํ ํฌ์ธํธ๊ฐ ์ฆ๊ฐํฉ๋๋ค.
3. ์๋น์ค๋ง๋ค ๊ณ์ฐ๋ก์ง์ด ์๋ก ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
class SafariService {
private static final int MINIMUM_ENERGY = 25;
public void openSafari() {
List<Animal> animals = createAnimals();
validateLowEnergy(animals, MINIMUM_ENERGY);
validateSize(animals);
// animals์ ๋ฐ๋ก ์ ๊ทผํด์ ์ถ๊ฐ/์ญ์ ๋ด๋ถ ํ๋ ์ ๊ทผ ๊ฐ๋ฅ
animals.add(new Animal("์ฌ์", 100));
long sum = animals.stream()
.filter(animal -> animal.getEnergy() >= 20)
.mapToLong(Animal::getEnergy)
.sum();
}
...
}
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ '์ผ๊ธ ์ปฌ๋ ์ '์ฒ๋ผ ์ํ์ ๋ก์ง์ ํจ๊ป ๋๋ ํ์์ผ๋ก ๋ง๋ค์ด์ผ ๋ณ๊ฒฝ ๋๋ ์ ์ง๋ณด์ ์ ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ์ค์ด๋ญ๋๋ค.
์ค๋์ jojoldu๋์ด ์ ๋ฆฌํด์ฃผ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ณ ์ด๋์ ์ ์ฉํ ์ ์์ ์ง ์๊ฐํ๋ฉด์ ๊ธ์ ์ ์ด๋ณด์์ต๋๋ค. Enum๊ณผ ์ผ๊ธ ์ปฌ๋ ์ ์ ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ก ๊ฐ๊ธฐ ์ํด ์ค์ํ ๋ถ๋ถ์ด๋ฏ๋ก ๊ผญ ์ตํ๊ณ ๊ฐ์ผํ ๊ฒ ๊ฐ์ต๋๋ค.
'๐ญComputer Science๐ญ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] Enum ํ์ฉํด๋ณด๊ธฐ (0) | 2022.08.10 |
---|---|
์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค ์ฐจ์ด๋ฅผ ์๊ฐํด๋ณด๊ธฐ ๐คจ (0) | 2022.07.15 |
[JAVA] ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ (0) | 2021.05.30 |
[JAVA] ํจํค์ง์ ๋ํด.. (0) | 2021.04.16 |
[JAVA] Classpath : ํด๋์คํจ์ค (0) | 2021.04.05 |