Day11 - jeremy0405/Codesquad_CS GitHub Wiki
๋ฏธ์
์ค type์ ์ง์ ์ง์ ํด์ type๊ณผ byte ํฌ๊ธฐ๋ฅผ ์ ์ฅํด์ผ ํ ํ์๊ฐ ์์๋ค. ๋จ์ํ Memory class ์์ Map<String, Integer> typeMap = new HashMap<>()
์ฒ๋ผ ๋์ด ๊ด๋ฆฌํ ์๋ ์์๊ฒ ์ง๋ง ์์ธ์ฒ๋ฆฌ๋ ํ์ํ๊ธฐ ๋๋ฌธ์ Memory Class์์ ๋ฐ๋ก ๊ด๋ฆฌํ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์๋ค๊ณ ํ๋จํ๋ค. ๋ฐ๋ผ์ ์ผ๊ธ ์ปฌ๋ ์
์ ํ๋ด๋ด์ TypeStorage Class ๋ฅผ ๋ง๋ค์๋ค.
์ฌ์ค ์๋ฐ์์ ์ผ๊ธ ์ปฌ๋ ์
์ Wrappingํ Collection ์ธ ๋ค๋ฅธ ๋ฉค๋ฒ ๋ณ์๊ฐ ์๋ ์ํ๋ฅผ ๋งํ๋ค. ๋ด๊ฐ ๊ตฌํํ ๐
TypeStorage
๋ typeMap
์ด์ธ์ typeSet
๋ ์๊ธฐ ๋๋ฌธ์ ์ผ๊ธ ์ปฌ๋ ์
์ ์๋๋ค. -> ์ผ๊ธ ์ปฌ๋ ์
์ธ ์ฒ ํ๊ณ ์ถ์ด์ ํ๋ด๋ด์๋ค๊ณ ํํํ๋ค.
Map์์ containsKey()
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์ด๋ฏธ key๊ฐ์ด ์กด์ฌํ๊ณ ์๋์ง๋ฅผ ์ฒดํฌํ ์ ์์๋ค. ๋ฐ๋ผ์ Set์ ์ฌ์ฉํ ํ์๊ฐ ์์ด์ ธ TypeStorage๋ ์ผ๊ธ ์ปฌ๋ ์
์ผ๋ก ๋ฆฌํฉํ ๋ง ํ ์ ์์๋ค. ์ ์ฝ๋๋ฅผ ๋ณด์๊ณ ์กฐ์ธ ํด์ฃผ์ ํ
์๊ฒ ์ ๋ง ๊ฐ์ฌ๋๋ฆฐ๋ค ๐
TypeStorage Class Code
public class TypeStorage {
private final Map<String, Integer> typeMap;
public TypeStorage() {
typeMap = new HashMap<>();
}
public void putType(String type, int length) {
if (this.typeMap.containsKey(type)) {
throw new IllegalArgumentException("์ด๋ฏธ ์ ์๋ type์
๋๋ค.");
}
validateLength(length);
this.typeMap.put(type, length);
}
private void validateLength(int length) {
if (length == 1 || length == 2 || length == 4 ||
length == 8 || length == 16 || length == 32) {
return;
}
throw new IllegalArgumentException("์๋ชป๋ length๊ฐ์ ์
๋ ฅํ์ต๋๋ค.");
}
public int getTypeLength(String type) {
for (String s : typeMap.keySet()) {
if (s.equals(type)) {
return typeMap.get(type);
}
}
throw new IllegalArgumentException("์ ์๋์ง ์์ type์
๋๋ค.");
}
}
Memory Class
private final TypeStorage typeStorage = new TypeStorage();
public void setSize(String type, int length) {
this.typeStorage.putType(type, length);
}
-> type์ ๋ํ ์์ธ์ฒ๋ฆฌ ๋ก์ง์ด ๋ชจ๋ TypeStorage()๋ก ๋ค์ด๊ฐ๋ฉด์ Memory Class๊ฐ ๊ต์ฅํ ๋จ์ํ๋์๋ค.
๋ํ TypeStorage ๊ฐ์ฒด๋ฅผ ๋ค๊ณ ๋ค๋๊ธฐ ์ฉ์ดํด์ StackArea Class์๋ TypeStorage ๊ฐ์ฒด๋ฅผ ๋ค๊ณ ๋ค๋๋ฉฐ ์ฌ์ฉํ๊ธฐ ๊ฐํธํ๋ค.
public class LottoService {
private static final int LOTTO_NUMBERS_SIZE = 6;
public createLottoNumber() {
List<Integer> lottoNumbers = createNonDuplicateNumbers();
validateSize(lottoNumbers);
validateDuplicate(lottoNumbers);
//LottoService ์ ๋ํ ๋ก์ง ๊ณ์ ์คํ
// ex) ๋ก๋ ๋ฒํธ์ ๊ฐ๋ค๋ฉด 1๋ฑ ๋น์ฒจ ...
// -> 1๋ฑ ๊ธ์ก = ์ด ์๊ธ * 0.5 / 1๋ฑ ์ฌ๋ ์ ...
}
private validateSize(List<Integer> lottoNumbers) {
if(lottoNumbers.size() != LOTTO_NUMBERS_SIZE) {
throw new IllegalArgumentException("๋ก๋ ๋ฒํธ๋ 6๊ฐ๋ง ๊ฐ๋ฅํฉ๋๋ค.");
}
}
private validateDuplicate(List<Integer> lottoNumbers) {
Set<Integer> nonDuplicateNumbers = new HashSet<>(lottoNumbers);
if(nonDuplicateNumbers.size() != LOTTO_NUMBERS_SIZE) {
throw new IllegalArgumentException("๋ก๋ ๋ฒํธ๋ ์ค๋ณต๋ ์ ์์ต๋๋ค.");
}
}
}
๋ก๋ ๋ฒํธ ์กฐ๊ฑด
- 6๊ฐ์ ์ซ์
- ์ซ์๋ ์๋ก ์ค๋ณต X
-> ๋ก๋ ๋ฒํธ๊ฐ ํ์ํ ๋ชจ๋ ์ฅ์์์ ๊ฒ์ฆ๋ก์ง์ ๊ฑฐ์ณ์ผ ํจ
๋ก๋ ๋ฒํธ ์กฐ๊ฑด์ ๋ก๋์๋น์ค ํด๋์ค์์ ๋ค ๋ง์กฑ์ํค๋ฉฐ ๊ตฌํํ๊ธฐ์๋ ํด๋์ค๊ฐ ๋ฌด๊ฑฐ์์ง
-> ํญ์ 6๊ฐ์ ์ค๋ณต๋์ง์๋ ์ซ์๋ฅผ List<Integer>
๋ก ๋ฐํํด์ฃผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด ๋จ.
public class LottoTicket {
private static final int LOTTO_NUMBERS_SIZE = 6;
private final List<Integer> lottoNumbers;
public LottoTicket(List<Integer> lottoNumbers) {
validateSize(lottoNumbers);
validateDuplicate(lottoNumbers);
this.lottoNumbers = lottoNumbers;
}
private validateSize(List<Integer> lottoNumbers) {
if(lottoNumbers.size() != LOTTO_NUMBERS_SIZE) {
throw new IllegalArgumentException("๋ก๋ ๋ฒํธ๋ 6๊ฐ๋ง ๊ฐ๋ฅํฉ๋๋ค.");
}
}
private validateDuplicate(List<Integer> lottoNumbers) {
Set<Integer> nonDuplicateNumbers = new HashSet<>(lottoNumbers);
if(nonDuplicateNumbers.size() != LOTTO_NUMBERS_SIZE) {
throw new IllegalArgumentException("๋ก๋ ๋ฒํธ๋ ์ค๋ณต๋ ์ ์์ต๋๋ค.");
}
}
}
public class LottoService {
LottoTicket lottoTicket = new LottoTicket(createNonDuplicateNumbers());
//LottoService ์ ๋ํ ๋ก์ง ๊ณ์ ์คํ
// ex) ๋ก๋ ๋ฒํธ์ ๊ฐ๋ค๋ฉด 1๋ฑ ๋น์ฒจ ...
// -> 1๋ฑ ๊ธ์ก = ์ด ์๊ธ * 0.5 / 1๋ฑ ์ฌ๋ ์ ...
}
์ผ๊ธ ์ปฌ๋ ์ ์ ์ฅ์
- ๋ถ๋ณ์ ๋ณด์ฅ
- ์ผ๊ธ ์ปฌ๋ ์ ์ ํตํด์ ์ฌ์ฉํ ํจ์๋ง public์ผ๋ก ํด๋๊ณ getter()์ setter()๋ฅผ ์์ ์ ๋์ด์ ๋ถ๋ณ์ ๋ณด์ฅํ ์ ์์
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();
}
}
Orders ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค์์๋ ๊ฐ์ ์ ๋ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๊ณ ๋จ์ง getAmountSum()๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์ด๋ ๊ฒ ์ปฌ๋ ์ ์ผ๋ก ๋ถ๋ณ์ ์ ์งํ ์ ์๊ฒ ๋๋ค.
- ์ด๋ฆ์ด ์๋ ์ปฌ๋ ์ -> ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
- ์ผ๊ธ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๊ณ ์๋ ํด๋์ค์ ์ญํ ์ ๊ฐ๋ณ๊ฒ ํ ์ ์์ (ํด๋์ค๊ฐ ๊ฐ๋ฒผ์์ง)
์ฐธ๊ณ ์๋ฃ - jojoldu๋ ๋ธ๋ก๊ทธ ,์ฐธ๊ณ ์๋ฃ - tigger๋ ๋ธ๋ก๊ทธ