πŸ“Œλͺ¨λ˜ μžλ°” 인 μ•‘μ…˜ - Chapter 2. λ™μž‘ νŒŒλΌλ―Έν„°ν™” μ½”λ“œ μ „λ‹¬ν•˜κΈ°

λͺ¨κΉ…Β·2023λ…„ 12μ›” 3일
0

μš°λ¦¬κ°€ μ–΄λ–€ μƒν™©μ„Έμ„œ 일을 ν•˜λ“  μ†ŒλΉ„μž μš”κ΅¬μ‚¬ν•­μ€ 항상 바뀐닀. λ³€ν™”ν•˜λŠ” μš”κ΅¬μ‚¬ν•­μ€ μ†Œν”„νŠΈ
웨어 μ—”μ§€λ‹ˆμ–΄λ§μ—μ„œ ν”Όν•  수 μ—†λŠ” λ¬Έμ œλ‹€. 예λ₯Ό λ“€μ–΄ 농뢀가 재고λͺ©λ‘ 쑰사λ₯Ό μ‰½κ²Œ ν• μˆ˜ μžˆλ„
둝 λ•λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μžˆλ‹€κ³  κ°€μ •ν•˜μž. λ†λΆ€λŠ” μ΄λ ‡κ²Œ 말할 것이닀. '녹색 사과λ₯Ό λͺ¨λ‘ μ°Ύκ³ 
μ‹Άμ–΄μš”β€™ 그런데 ν•˜λ£»λ°€μ„ 자고 μΌμ–΄λ‚¬λ”λ‹ˆ 농뢀가 λ‹€μ‹œ μ΄λ ‡κ²Œ λ§ν•˜λŠ” 것이닀. "150그램 이상
인 사과λ₯Ό λͺ¨λ‘ μ°Ύκ³  μ‹Άμ–΄μš”β€™ 또 ν•˜λ£»λ°€μ„ 자고 μΌμ–΄λ‚¬λ”λ‹ˆ β€˜150그램 μ΄μƒμ΄λ©΄μ„œ 녹색인 사과
λ₯Ό λͺ¨λ‘ 찾을 수 μžˆλ‹€λ©΄ μ’‹κ² λ„€μš”β€™λΌκ³  λ§ν•˜λŠ” κ²ƒμ΄μ—ˆλ‹€. μ΄λ ‡κ²Œ μ‹œμ‹œκ°κ° λ³€ν•˜λŠ” μ‚¬μš©μž μš”κ΅¬
사항에 μ–΄λ–»κ²Œ λŒ€μ‘ν•΄μ•Ό ν• κΉŒ? 특히 우리의 μ—”μ§€λ‹ˆμ–΄λ§μ μΈ λΉ„μš©μ΄ κ°€μž₯ μ΅œμ†Œν™”λ  수 있으면
쒋을 것이닀. 그뿐 μ•„λ‹ˆλΌ μƒˆλ‘œ μΆ”κ°€ν•œ κΈ°λŠ₯은 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμ–΄μ•Ό ν•˜λ©° μž₯기적인 κ΄€μ μ—μ„œ
μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ•Ό ν•œλ‹€. - 67page

λ™μž‘ νŒŒλΌλ―Έν„°ν™”λ₯Ό μ΄μš©ν•˜λ©΄ 효과적으둜 λŒ€μ‘κ°€λŠ₯ν•˜λ‹€!
-> μ§€κΈˆκΉŒμ§€λŠ” λ³€μˆ˜λ§Œ νŒŒλΌλ―Έν„°λ‘œ μ§€μ •ν–ˆμ§€λ§Œ λ™μž‘(λ©”μ„œλ“œ)도 νŒŒλΌλ―Έν„°λ‘œ κ°€λŠ₯ν•˜λ‹€λŠ” μ–˜κΈ°!

πŸ“– 2.1 λ³€ν™”ν•˜λŠ” μš”κ΅¬μ‚¬ν•­μ— λŒ€μ‘ν•˜κΈ°

✏️ 2.1.1 첫 번째 μ‹œλ„ : 녹색 사과 필터링

기쑴의 농μž₯ 재고λͺ©λ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ¦¬μŠ€νŠΈμ—μ„œ 녹색 μ‚¬κ³Όλ§Œ ν•„ν„°λ§ν•˜λŠ” κΈ°λŠ₯을 μΆ”κ°€ν•œλ‹€κ³  κ°€μ •ν•˜μž. 비ꡐ적 쉽닀고 λŠλ‚„ 것이닀.

public static List<Apple> filterGreenApples(List<Apple> inventory) {
	List<Apple> result = new ArrayList<>(); <- μ‚¬κ³Όλˆ„μ λ¦¬μŠ€νŠΈ
	for (Apple apple: inventory) {
		if (GREEN. equals (apple. getColor()) { <- λ…Ήμƒ‰μ‚¬κ³Όλ§Œμ„ νƒ
			result.add(apple);
		}
	}
	return result;
}

λΉ¨κ°„ 사과도 필터링 ν•˜κ³  μ‹Άλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?
filterRedApplesλΌλŠ” μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό λ§Œλ“€κ³ , if문의 쑰건을 λΉ¨κ°„ μ‚¬κ³Όλ‘œ λ°”κΎΈλŠ” 방법을 선택할 수 μžˆλ‹€. 이와 같은 λ°©λ²•μœΌλ‘œ λΉ¨κ°„ 사과λ₯Ό 필터링할 μˆ˜λŠ” μžˆκ² μ§€λ§Œ λ‚˜μ€‘μ— 농뢀가 μ’€ 더 λ‹€μ–‘ν•œ 색(열은 λ…Ήμƒ‰οΌŒμ–΄λ‘μš΄ 빨간색, λ…Έλž€μƒ‰ λ“±)으둜 ν•„ν„°λ§ν•˜λŠ” λ“±μ˜ λ³€ν™”μ—λŠ” μ μ ˆν•˜κ²Œ λŒ€μ‘ν•  수 μ—†λ‹€.
-> 거의 λΉ„μŠ·ν•œ μ½”λ“œκ°€ 반볡 μ‘΄μž¬ν•œλ‹€λ©΄ κ·Έ μ½”λ“œλ₯Ό μΆ”μƒν™”ν•œλ‹€.

✏️ 2.1.2 두 번째 μ‹œλ„ : 색을 νŒŒλΌλ―Έν„°

색을 νŒŒλΌλ―Έν„°μ— μΆ”κ°€ν•˜λ©΄ μ’€ 더 μœ μ—°ν•˜κ²Œ λŒ€μ²˜ κ°€λŠ₯ν•˜λ‹€!

public static List<Apple> filterApplesByColor(List<Apple> inventory, Color color) {
	List<Apple> result = new ArrayList<>(); 
	for (Apple apple: inventory) {
		if (apple.getColor().equals(color)) {
			result.add(apple);
		}
	}
	return result;
}

λ†λΆ€λŠ” λ‹€μŒκ³Ό 같이 λ©”μ„œλ“œλ₯Ό 호좜 ν•  수 μžˆλ‹€!

List<Apple> greenApples = filterApplesByColor(inventory, GREEN);
List<Apple> redApples = filterApplesByColor(inventory, RED);

그런데 μΆ”κ°€μ μœΌλ‘œ 색 이외에도 'κ°€λ²Όμš΄ 사과와 무거운 μ‚¬κ³Όλ‘œ ꡬ뢄할 수 μžˆλ‹€λ©΄ 정말 μ’‹κ² λ„€μš”. 보톡 λ¬΄κ²Œκ°€ 150그램 이상인 사과가 무거운 μ‚¬κ³Όμž…λ‹ˆλ‹€β€™ 라고 μš”κ΅¬ν•œλ‹€.
-> λ¬΄κ²Œμ •λ³΄λ„ νŒŒλΌλ―Έν„°μ— μΆ”κ°€ν•˜λ©΄ λœλ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜μ„ 것이닀.

public static List<Apple> filterApplesByColor(List<Apple> inventory, Color color) {
	List<Apple> result = new ArrayList<>(); 
	for (Apple apple: inventory) {
		if (apple.getWeight() > weight) {
			result.add(apple);
		}
	}
	return result;
}

색깔과 무게λ₯Ό ν•„ν„°λ§ν•˜λŠ” λŒ€λΆ€λΆ„μ΄ λ°˜λ³΅λœλ‹€λŠ” 것을 λˆˆμΉ˜μ±˜μ„ 것이닀.
μ΄λŠ” μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ μœΌλ‘œ 쒋지 μ•Šλ‹€. 예λ₯Ό λ“€μ–΄ 탐색 과정을 κ³ μ³μ„œ μ„ λŠ₯을 κ°œμ„ ν•œλ‹€κ³  ν–ˆμ„ λ•Œ λͺ¨λ“  λ©”μ„œλ“œμ˜ μ½”λ“œλ₯Ό 고쳐야 ν•˜κΈ° λ•Œλ¬Έμ— λΉ„μš©μ΄ 많이 듀것이닀.

색과 무게λ₯Ό 합쳐 필터링 ν•  수 μžˆλ‹€. 그러면 색깔을 필터링 ν•  것 인지 무게λ₯Ό 필터링 ν•  것인지 κ²°μ •ν•΄μ•Ό ν•œλ‹€. -> flag μ‚¬μš©

✏️ 2.1.3 μ„Έ 번째 μ‹œλ„ : κ°€λŠ₯ν•œ λͺ¨λ“  μ†μ„±μœΌλ‘œ 필터링

public static List<Apple> filterApples(List<Apple> inventory, Color color, int weight, boolean flag){
	Listγ€ˆApple> result = new ArrayList<>(); 
	for (Apple apple: inventory) {
		if ((flag && apple.getColor().equals(color)) || (!flag && apple.getWeightO > weight)) {
			result.add(apple);
		}
	}
	return result;
}

λ‹€μŒκ³Ό 같이 μ‚¬μš© ν•  수 μžˆλ‹€.

List<Apple> greenApples = filterApples(inventory, GREEN, 0, true);
List<Apple> heavyApples = filterApples(inventory, null, 150, false);

쒋지 μ•Šμ€ μ½”λ“œμž„μ„ λŠκΌˆμ„ 것이닀.
-> true와 falseκ°€ 뭔데???
-> μš”κ΅¬μ‚¬ν•­μ΄ λ°”λ€Œμ—ˆμ„ λ•Œ μœ μ—°ν•˜κ²Œ λŒ€μ‘ν•  μˆ˜λ„ μ—†λ‹€. 크기, λͺ¨μ–‘, μΆœν•˜μ§€ λ“±μœΌλ‘œ 사과λ₯Ό λͺ¨λ‘ ν•„ν„°λ§ν•˜κ³  μ‹Άλ‹€λ©΄ κ±°λŒ€ν•œ λ©”μ„œλ“œλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•  것이닀.

μ–΄λ–€ κΈ°μ€€μœΌλ‘œ 필터링할 κ²ƒμ΄λ‹ˆμ§€ 효과적으둜 μ „λ‹¬ν•˜λ©΄ 쒋을 것이닀. λ™μž‘ νŒŒλΌλ―Έν„°ν™”λ₯Ό μ΄μš©ν•΄μ„œ μœ μ—°μ„±μ„ μ–»μ–΄λ³΄μž!

πŸ“– 2.2 λ™μž‘ νŒŒλΌλ―Έν„°ν™”

✏️ 2.2.1 λ„€ 번째 μ‹œλ„ : 좔상적 쑰건으둜 필터링

profile
λ©ˆμΆ”μ§€ μ•ŠκΈ°

0개의 λŒ“κΈ€