πŸ’» Computer Science

02. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μž…λ¬Έ - λ‹€ν˜•μ„±κ³Ό 좔상화

μ• μ •μ“° 2021. 5. 10. 09:04

 

λ‹€ν˜•μ„±(Polymoriphism)

μ—¬λŸ¬(poly) λͺ¨μŠ΅(morph)을 κ°–λŠ” 것

 

객체 지ν–₯μ—μ„œλŠ” ν•œ 객체가 μ—¬λŸ¬ νƒ€μž…μ„ κ°–λŠ” 것 

 

좔상화(Abstraction)

λ°μ΄ν„°λ‚˜ ν”„λ‘œμ„ΈμŠ€ 등을 μ˜λ―Έκ°€ λΉ„μŠ·ν•œ κ°œλ…μ΄λ‚˜ 의미 μžˆλŠ” ν‘œν˜„μœΌλ‘œ μ •μ˜ν•˜λŠ” κ³Όμ •

두 가지 λ°©μ‹μ˜ 좔상화

- νŠΉμ •ν•œ μ„±μ§ˆ ex) 톡화, κΈˆμ•‘ 을 'Money class'둜 좔상화할 수 μžˆλ‹€.

- 곡톡 μ„±μ§ˆ(μΌλ°˜ν™”) ex) μ‚Όμ„±μ˜ SL-M2XX, HP MXX 을 'ν”„λ¦°ν„°'둜 좔상화 ν• μˆ˜ μžˆλ‹€.

 

μ„œλ‘œ λ‹€λ₯Έ κ΅¬ν˜„μ„ μΆ”μ„±ν™” ν•œλ‹€. 예λ₯Ό λ“€μ–΄

(SCP둜 파일 μ—…λ‘œλ“œ, HTTP둜 데이터 전솑, DB ν…Œμ΄λΈ”μ— μ‚½μž…) => ν‘Έμ‹œ λ°œμ†‘ μš”μ²­μœΌλ‘œ 좔상화할 수 μžˆλ‹€.

 

νƒ€μž… 좔상화

μ—¬λŸ¬ κ΅¬ν˜„ 클래슀λ₯Ό λŒ€ν‘œν•˜λŠ” μƒμœ„ νƒ€μž… λ„μΆœ

κΈ°λŠ₯에 λŒ€ν•œ 의미만 μ œκ³΅ν•˜κ³  κ΅¬ν˜„μ€ μ œκ³΅ν•˜μ§€ μ•Šμ•„ μ–΄λ–»κ²Œ κ΅¬ν˜„ν• μ§€ μ•Œ 수 μ—†λ‹€ .

-> κ΅¬ν˜„μ„ μ œκ³΅ν•˜λŠ” 클래슀λ₯Ό 콘크리트 클래슀라고 ν•œλ‹€. 

 

예λ₯Ό λ“€μ–΄ 좔상 νƒ€μž…μ„ μ΄μš©ν•œ Notifier.class κ°€ μžˆλ‹€κ³  ν–ˆμ„ λ•Œ 

Notifier notifier = getNotifier(...);

notifier.notify(somenoti);

ν•΄λ‹Ή κΈ°λŠ₯의 κ΅¬ν˜„μ„ 감좜 수 있고, κΈ°λŠ₯의 κ΅¬ν˜„μ΄ μ•„λ‹Œ μ˜λ„λ₯Ό 더 잘 λ“œλŸ¬λ‚΄μ„œ 가독성이 μ’‹λ‹€.

 

λ§Œμ•½ 콘크리트 클래슀λ₯Ό 직접 μ‚¬μš©ν•œλ‹€λ©΄?

1. μ£Όλ¬Έ μ·¨μ†Œκ°€ 되면 Sms λ₯Ό λ³΄λ‚΄λŠ” 둜직이 μžˆλ‹€.

2. μš”κ΅¬μ‚¬ν•­μ΄ λ³€κ²½λ˜μ–΄ μΆ”κ°€μ μœΌλ‘œ kakaoPush도 λ³΄λ‚΄μ•Όν•œλ‹€.

3. μ£Όλ¬Έ μ·¨μ†Œ λ˜λŠ” λ‘œμ§μ— μ•„λž˜μ™€ 같이 μΆ”κ°€λœλ‹€.

 

if(pushEnabled){

    kakaoPush.push();

} else {

    smsSender.send():

}

 

μ£Όλ¬Έ μ·¨μ†Œ 둜직이 λ³€κ²½λ˜μ§€ μ•Šμ•˜μ§€λ§Œ μ•ˆμ— μžˆλŠ” sms, kakaoPush 등이 λ³€κ²½λœλ‹€.

 

좔상 νƒ€μž… μ‚¬μš© 

곡톡점을 λ„μΆœν•˜μ—¬ 좔상 νƒ€μž…μ„ μ‚¬μš©ν•œλ‹€.

public void cancel(String ono){
// μ£Όλ¬Έ μ·¨μ†Œ 처리
	Notifier notifier = getNotifier(..);
	norifier.notify(..);
}

private Notifier getNotifier(..){

	if(pushEnabled)
		return new KakaoNotifier();
	else
		return new SmsNotifier();
    
}

 

μΆ”μƒν™”λŠ” 의쑴 λŒ€μƒμ΄ λ³€κ²½ν•˜λŠ” μ‹œμ μ— ν•œλ‹€.

좔상화 -> 좔상 νƒ€μž… 증가 -> λ³΅μž‘λ„ 증가

- 아직 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” κΈ°λŠ₯에 λŒ€ν•œ 이λ₯Έ μΆ”μƒν™”λŠ” μ£Όμ˜ν•œλ‹€. -> 잘λͺ»λœ 좔상화 κ°€λŠ₯μ„±, λ³΅μž‘λ„λ§Œ μ¦κ°€ν•œλ‹€.

- μ‹€μ œ λ³€κ²½, ν™•μž₯이 λ°œμƒν•  λ•Œ 좔상화 μ‹œλ„

 

좔상화λ₯Ό 잘 ν•˜λ €λ©΄ μ–΄λ–€κ±Έ 생각해야 ν• κΉŒ?

κ΅¬ν˜„μ„ ν•œ μ΄μœ κ°€ 무엇 λ•Œλ¬ΈμΈμ§€ 생각해야 ν•œλ‹€.

 

μ˜ˆμ‹œ)

 

κΈ°λŠ₯ μ˜ˆμ‹œ

- ν΄λΌμš°λ“œ 파일 톡합 관리 κΈ°λŠ₯ 개발

- λŒ€μƒ ν΄λΌμš°λ“œ - λ“œλ‘­λ°•μŠ€, λ°•μŠ€

- μ£Όμš”κΈ°λŠ₯ - 각 ν΄λΌμš°λ“œμ˜ 파일 λͺ©λ‘ 쑰회, λ‹€μš΄λ‘œλ“œ, μ—…λ‘œλ“œ, μ‚­μ œ ,검색

 

 -> μΆ”μƒν™”ν•˜μ§€ μ•Šμ„ 경우 λŒ€μƒ ν΄λΌμš°λ“œκ°€ μΆ”κ°€λ˜μ—ˆμ„ λ•Œ ( NCLOUD ) λ‹€μš΄λ‘œλ“œ, μ—…λ‘œλ“œ, 쑰회 등에 if block이 각각 λŠ˜μ–΄λ‚œλ‹€.

-> ν•˜μ§€λ§Œ μ•„λž˜μ™€ 같이 좔상화λ₯Ό ν•΄μ€€λ‹€λ©΄ κΈ°λŠ₯의 λŒ€ν•œ μ½”λ“œ μˆ˜μ • 없이 μƒˆλ‘œμš΄ μ’…λ₯˜μ˜ ν΄λΌμ΄λ“œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

객제 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μž…λ¬Έ - μ΅œλ²”κ·  / μΈν”„λŸ°

μ΄λŸ¬ν•œ ꡬ쑰λ₯Ό OCP 라고 ν•œλ‹€. ν™•μž₯에 μ—΄λ € 있고 μˆ˜μ •μ—” λ‹«ν˜€ μžˆλ‹€.

λ°˜μ‘ν˜•