λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“šμ½μ€ μ±… 정리/객체지ν–₯λ””μžμΈνŒ¨ν„΄

[JAVA 객체 지ν–₯ λ””μžμΈ νŒ¨ν„΄] 3μž₯ : SOLID 원칙

3.1 단일 μ±…μž„ 원칙 (SRP)

3.11 μ±…μž„μ˜ 의미

객체 지ν–₯ μ„€κ³„κ΄€μ μ—μ„œ μ±…μž„μ˜ κΈ°λ³Έ λ‹¨μœ„λŠ” λ°”λ‘œ '객체'이닀. (이 '객체'λŠ” 단 ν•˜λ‚˜μ˜ μ±…μž„λ§Œμ„ κ°€μ Έμ•Ό ν•œλ‹€)

 

학생 '객체'κ°€ μ—¬λŸ¬ μ±…μž„(μˆ˜μ—…λ“£κΈ° + μ•Œλ°”ν•˜κΈ°)을 가진닀고 κ°€μ •ν•΄λ³΄μž.

public class Student {
public void getCourses() {...}
    public void addCourses() {...}
    
    public void save() {...}
    public Student load() {...}
    
    public void printOnReport() {...}
    public void printOnBook() {...}
}

학생 κ°μ²΄λŠ” μˆ˜μ—…μ— κ΄€ν•œ μ±…μž„λ§Œ κ°€μ§€λŠ” 것이 μ’‹κ³  μ΄μ™Έμ˜ μ±…μž„μ€ 이λ₯Ό 더 잘 μˆ˜ν–‰ν•  수 μžˆλŠ” λ‹€λ₯Έ 객체가 κ°€μ§€λŠ” 것이 μ’‹λ‹€.

학생 -> μˆ˜μ—… - SRP 만쑱

 

3.12 λ³€κ²½

객체지ν–₯ 섀계원칙을 ν•™μŠ΅ν•˜λŠ” μ΄μœ λŠ” 뭘까?

-> κ·Έ μ΄μœ λŠ” μ˜ˆμΈ‘ν•˜μ§€ λͺ»ν•œ 변경사항이 λ°œμƒν•˜λ”λΌλ„ μœ μ—°ν•˜κ³  ν™•μž₯성이 μžˆλ„λ‘ μ‹œμŠ€ν…œ ꡬ쑰λ₯Ό μ„€κ³„ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.

 

쒋은 μ„€κ³„λž€ λ¬΄μ—‡μΌκΉŒ?

-> μ‹œμŠ€ν…œμ— μƒˆλ‘œμš΄ μš”κ΅¬μ‚¬ν•­μ΄λ‚˜ 변경이 μžˆμ„ λ•Œ κ°€λŠ₯ν•œ ν•œ 영ν–₯을 λ°›λŠ” 뢀뢄을 μ€„μ΄λŠ” 것이닀.

 

객체 ν•˜λ‚˜μ— μ±…μž„μ΄ λ§Žμ•„μ§€λ©΄ 클래슀 λ‚΄λΆ€μ—μ„œ μ„œλ‘œ λ‹€λ₯Έ 역할을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλΌλ¦¬ κ°•ν•˜κ²Œ κ²°ν•©λ˜κ²Œ λœλ‹€.

ν•™μƒμ˜ course()κ΄€λ ¨ λ©”μ„œλ“œμ™€ λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ ¨ λ©”μ„œλ“œ(save, load)κ°€ κ²°ν•©λ˜μ–΄ μΌν•˜λŠ” 방식이 λ³€ν•˜λ©΄ 학생이 μˆ˜μ—…μ„ λ“£λŠ” 데 영ν–₯을 미치게 될수 μžˆλ‹€!! γ… γ…  (κ°•ν•œ κ²°ν•©μ˜ 문제점)

νšŒκ·€ ν…ŒμŠ€νŠΈ

μ–΄λ–€ λ³€ν™”κ°€ μžˆμ„ λ•Œ κΈ°μ‘΄ μ‹œμŠ€ν…œμ— 영ν–₯을 μ£ΌλŠ” 지 ν‰κ°€ν•˜λŠ” ν…ŒμŠ€νŠΈ

-> μ±…μž„μ„ λΆ„λ¦¬ν•˜λ©΄ 변경사항 λ°œμƒ μ‹œ 영ν–₯을 λ°›λŠ” 뢀뢄을 쀄여 'νšŒκ·€ ν…ŒμŠ€νŠΈ' λΉ„μš©μ„ 쀄일 수 μžˆλ‹€.

3.13 μ±…μž„ 뢄리

"ν•œ ν΄λž˜μŠ€μ— 단 ν•˜λ‚˜μ˜ μ±…μž„λ§Œ μˆ˜ν–‰ν•˜λ„λ‘ ν•΄ λ³€κ²½ μ‚¬μœ κ°€ 될 수 μžˆλŠ” 것을 ν•˜λ‚˜λ‘œ λ§Œλ“œλŠ” 것"

μ±…μž„ 뢄리 ν•˜λ©΄ AκΈ°λŠ₯이 λ³€κ²½λ˜λ©΄ AκΈ°λŠ₯을 직간접을 μ‚¬μš©ν•˜λŠ” μ½”λ“œλ§Œ λ‹€μ‹œ ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.

κ°œμ„ λœ 학생 클래슀 λ””μžμΈ

κ°œμ„ λœ λ””μžμΈ

μœ„μ˜ 그림처럼 학생 클래슀의 μ±…μž„μ„

1. λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ ¨ 학생 DAO

2. 성적을 λ‹΄λ‹Ήν•˜λŠ” μ„±μ ν‘œ 클래슀

3. μΆœμ„μ„ λ‹΄λ‹Ήν•˜λŠ” μΆœμ„ν‘œ 클래슀

이 3κ°€μ§€λ‘œ μ±…μž„μ„ μ μ ˆν•˜κ²Œ λΆ„λ¦¬ν–ˆλ‹€.

 

이둜써 학생 ν΄λž«λŠλŠ” λ³€ν™”κ°€ λ°œμƒν–ˆμ„ λ•Œ νŒŒμƒλ˜λŠ” 영ν–₯을 μ΅œμ†Œν™”ν•  수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄, λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆκ°€ λ³€κ²½λœλ‹€λ©΄ 였직 학생 DAO클래슀만 영ν–₯을 λ°›κ³  μ„±μ ν‘œ, μΆœμ„λΆ€λŠ” 영ν–₯을 받지 μ•Šμ„ 수 μžˆλ‹€.

3.1.4 산탄총 수술

ν•˜λ‚˜μ˜ μ±…μž„μ΄ μ—¬λŸ¬ 개의 ν΄λž˜μŠ€λ“€λ‘œ λΆ„μ‚°λ˜μ–΄ μžˆλŠ” 경우라면?

산탄총 μˆ˜μˆ μ€ μƒμ²˜ λΆ€μœ„κ°€ λ§Žμ•„ λͺ¨λ“  뢀뢄을 빠짐없어 μ°Ύμ•„ μΉ˜λ£Œν•΄μ•Όλ§Œ ν•œλ‹€.

즉, μ—¬λŸ¬ 개의 ν΄λž˜μŠ€μ— μ±…μž„μ΄ λΆ„μ‚°λ˜μ—ˆμ„ λ•Œ 변경이 λ°œμƒν•œ κ²½μš°μ΄λ‹€.

 

예λ₯Ό λ“€μ–΄ λ‘œκΉ…, λ³΄μ•ˆ, νŠΈλžœμž­μ…˜κ³Ό 같이 νš‘λ‹¨ κ΄€μ‹¬μœΌλ‘œ λΆ„λ₯˜ν•  수 μžˆλŠ” κΈ°λŠ₯듀이 μ‘΄μž¬ν•˜λŠ” 것듀이닀.

λ§Œμ•½ νŠΉμ • λ©”μ„œλ“œ μ‹€ν–‰ 둜그λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•œλ‹€κ³  ν•œλ‹€λ©΄ λΆ„λͺ… λ©”μ„œλ“œμ—λŠ” '둜그 κΈ°λŠ₯'이 μ‘΄μž¬ν•  것이닀.

이 둜그λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ '파일'둜 μ €μž₯ν•˜κ³  μ‹Άλ‹€λ©΄ 둜그 κΈ°λŠ₯이 μ‚½μž…λœ λͺ¨λ“  λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ μ°Ύμ•„μ„œ λ³€κ²½ν•΄μ•Όλ§Œ ν•œλ‹€...,,

(ν•˜λ‚˜μ˜ μ±…μž„μ΄ μ—¬λŸ¬ 개의 클래슀둜 λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄μ„œ μƒκΈ°λŠ” 문제)

 

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 'λΆ€κ°€ κΈ°λŠ₯'을 λ³„λ„μ˜ 클래슀둜 뢄리해 μ±…μž„μ„ λ‹΄λ‹Ήν•˜κ²Œ ν•˜λ©΄ λœλ‹€!!

AOP : 관심 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

νš‘λ‹¨ μ½”λ“œλ₯Ό AspectλΌλŠ” νŠΉλ³„ν•œ 객체둜 λͺ¨λ“ˆν™”ν•˜κ³  Weavingμ΄λΌλŠ” μž‘μ—…μ„ 톡해 λͺ¨λ“ˆν™”ν•œ μ½”λ“œλ₯Ό 핡심 κΈ°λŠ₯에 λΌμ›Œλ„£λŠ” 것을 λœ»ν•œλ‹€.

이λ₯Ό 톡해 기쑴의 μ½”λ“œλ₯Ό μ „ν˜€ λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λΆ€κ°€ κΈ°λŠ₯을 효과적으둜 λ³€κ²½ν•  수 μžˆλ‹€. (Aspect만 λ³€κ²½ν•˜λ©΄ 이λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  μœ„μΉ˜μ˜ κΈ°λŠ₯이 λ°”λ€œ)

 

3.2 개방 - 폐쇄 원칙 (OCP)

"기쑴의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ–΄μ•Ό ν•œλ‹€"

 

κΈ°μ‘΄ μ½”λ“œμ˜ λ³€κ²½μ—λŠ” λ‹«ν˜€μžˆκ³  ν™•μž₯μ—λŠ” μ—΄λ €μžˆλŠ” 원칙!!

 

학생 관리 ν”„λ‘œκ·Έλž¨

학생 관리 ν”„λ‘œκ·Έλž¨μ— λ„μ„œκ΄€ λŒ€μ—¬ 여뢀와 같은 μƒˆλ‘œμš΄ 맀체에 ν•™μƒμ˜ λŒ€μ—¬κΈ°λ‘μ„ 좜λ ₯ν•˜λŠ” 경우 λ„μ„œκ΄€ λŒ€μ—¬ λͺ…λΆ€ 클래슀λ₯Ό λ§Œλ“€μ–΄ client와 μ—°κ²°ν•΄μ€˜μ•Όλ§Œ ν•œλ‹€.

 

ν•˜μ§€λ§Œ μ΄λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κΈ° μœ„ν•΄ Clinet 클래슀λ₯Ό μˆ˜μ •ν•΄μ•Όλ§Œ ν•˜λ―€λ‘œ OCP에 μœ„λ°˜ λœλ‹€.

OCP μ„€κ³„μ‹œ κ°€μž₯ μ€‘μš”ν•œ 것은 "무엇이 λ³€ν•˜λŠ” 것인지, 무엇이 λ³€ν•˜μ§€ μ•ŠλŠ” 것인지 κ΅¬λΆ„ν•˜λŠ” 것" 이닀.

 

μœ„ 섀계λ₯Ό OCPλ₯Ό λ§Œμ‘±ν•˜λŠ” μ„€κ³„λ‘œ μˆ˜μ •ν•˜κ²Œ 되면..

ClinetλŠ” printable μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•΄ 'ꡬ체적인 좜λ ₯ 맀체'λ₯Ό μΊ‘μŠν™” ν•˜λ„λ‘ μ²˜λ¦¬ν•œλ‹€.

OCPλŠ” 클래슀λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ λŒ€μƒ 클래슀의 ν™˜κ²½μ„ λ³€κ²½ν•  수 μžˆλŠ” 섀계이닀.

λ‹¨μœ„ ν…ŒμŠ€νŠΈ = λΉ λ₯Έ ν…ŒμŠ€νŠΈ

λͺ¨μ˜ 객체 = ν…ŒμŠ€νŠΈμš© κ°€μ§œ 객체

3.3 λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 (LSP)

"LSPλŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ μžμ‹ 클래슀 μ‚¬μ΄μ˜ ν–‰μœ„κ°€ 일관성이 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€."

LSPλ₯Ό λ§Œμ‘±ν•˜λ©΄ λΆ€λͺ¨ 클래슀의 μΈμŠ€ν„΄μŠ€ λŒ€μ‹ μ— μžμ‹ 클래슀의 μΈμŠ€ν„΄μŠ€λ‘œ λŒ€μ²΄κ°€ κ°€λŠ₯ν•˜λ‹€.

 

μΌλ°˜ν™” 관계(상속)λ₯Ό λ‹€μ‹œ ν•œλ²ˆ μƒκ°ν•΄λ³΄μž. μΌλ°˜ν™” κ΄€κ³„λŠ” 'is kind of 관계'둜 ν‘œν˜„ν•  수 μžˆλ‹€.

λΆ€λͺ¨ 클래슀둜 포유λ₯˜, μžμ‹ 클래슀λ₯Ό μ›μˆ­μ΄λ‘œ κ°€μ •ν•΄λ³΄μž.

 

  • 포유λ₯˜λŠ” μ•Œμ„ 낳지 μ•Šκ³  μƒˆλΌλ₯Ό λ‚³μ•„ λ²ˆμ‹ν•œλ‹€.
  • 포유λ₯˜λŠ” 젖을 λ¨Ήμ—¬μ„œ μƒˆλΌλ₯Ό ν‚€μš°κ³  폐λ₯Ό 톡해 ν˜Έν‘ν•œλ‹€.

μœ„μ˜ 포유λ₯˜μ˜ νŠΉμ§•μ„ μ›μˆ­μ΄λ„ 가지고 μžˆλŠ”κ°€? -> 포유λ₯˜λ₯Ό μ›μˆ­μ΄λ‘œ λ°”κΏ”μ„œ ν•΄λ³΄μž.

  • μ›μˆ­μ΄λŠ” μ•Œμ„ 낳지 μ•Šκ³  μƒˆλΌλ₯Ό λ‚³μ•„ λ²ˆμ‹ν•œλ‹€.
  • μ›μˆ­μ΄λŠ” 젖을 λ¨Ήμ—¬μ„œ μƒˆλΌλ₯Ό ν‚€μš°κ³  폐λ₯Ό 톡해 ν˜Έν‘ν•œλ‹€.

μ „ν˜€ λ¬Έμ œκ°€ μ—†κΈ° λ•Œλ¬Έμ— μ›μˆ­μ΄μ™€ 포유λ₯˜μ˜ ν–‰μœ„(λ²ˆμ‹, 호흑, μ–‘μœ‘)에 [일관성]이 μžˆλ‹€κ³  말할 수 μžˆλ‹€!!!!

 

κ·Έλ ‡λ‹€λ©΄ μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀의 μΈμŠ€ν„΄μŠ€μ˜ ν–‰μœ„λ₯Ό μΌκ΄€μ„±μžˆκ²Œ μ‹€ν–‰ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ??

λͺ…ν™•ν•œ 방법은 λ°”λ‘œ 슈퍼 ν΄λž˜μŠ€μ—μ„œ 상속받은 λ©”μ„œλ“œλ“€μ΄ μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œ(μž¬μ •μ˜)λ˜μ§€ μ•Šλ„λ‘ ν•˜λ©΄ λœλ‹€.

 

3.4 의쑴 μ—­μ „ 원칙 (DIP)

"의쑴 관계λ₯Ό 맺을 λ•Œ λ³€ν™”ν•˜κΈ° μ‰¬μš΄ κ²ƒλ³΄λ‹€λŠ” 거의 λ³€ν™”κ°€ μ—†λŠ” 것에 μ˜μ‘΄ν•˜λΌλŠ” 원칙이닀"

μ–΄λ–€ 객체가 μ˜μ‘΄ν•˜λŠ” 객체가 자주 λ³€ν™”ν•œλ‹€λ©΄ 객체의 μˆ˜μ •μ΄ μž¦μ•„μ§€κ²Œλœλ‹€..

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— κ°μ²΄λŠ” λ³€ν™”κ°€ 적은 좔상적인 객체에 μ˜μ‘΄ν•΄μ•Όν•œλ‹€.

 

좔상적인 μžλ™μ°¨μ— μ˜μ‘΄ν•˜λŠ” μ‚¬λžŒ

μœ„μ˜ κ·Έλ¦Ό 처럼 μ‚¬λžŒμ΄ 좔상적이 μžλ™μ°¨μ— μ˜μ‘΄ν•˜κ²Œ 되면 μ‹€μ œλ‘œ BMWλ₯Ό νƒ€λ˜ λ²€μΈ λ₯Ό νƒ€λ˜ 상관없이 μžλ™μ°¨λ₯Ό μ΄μš©ν•  수 μžˆκ²Œλœλ‹€.

μ΄λŸ¬ν•œ 좔상적인 것을 객체지ν–₯ κ΄€μ μ—μ„œλŠ” '좔상 클래슀'와 'μΈν„°νŽ˜μ΄μŠ€'둜 ν‘œν˜„ν•  수 μžˆλ‹€.

 

=> DIPλ₯Ό λ§Œμ‘±ν•˜λŠ” μ„€κ³„λŠ” μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 ν΄λž˜μŠ€μ— μ˜μ‘΄κ΄€κ³„λ₯Ό 맺게되고 μ΄λŠ” 변화에 μœ μ—°ν•œ μ‹œμŠ€ν…œ 섀계이닀.

 

μ˜μ‘΄μ„± μ£Όμž…

λ§Œμ•½ DIPλ₯Ό λ§Œμ‘±ν•˜λ©΄ "μ˜μ‘΄μ„± μ£Όμž…"μ΄λΌλŠ” 기술둜 λ³€ν™”λ₯Ό μ‰½κ²Œ μˆ˜μš©ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

public class Kid{
  private Toy toy;

  public void setToy(Toy toy){
    this.toy = toy;
  }
  public int play(){
    sysout(toy.toString());  
  }
}

KidλŠ” μž₯λ‚œκ°μ„ setToy()λ₯Ό 톡해 λ‘œλ΄‡μ΄λ“  μžλ™μ°¨λŠ” μœ μ—°ν•˜κ²Œ 선택할 수 있게 λœλ‹€.

3.5 μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙

μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙(ISP)λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— νŠΉν™”λ˜λ„λ‘ λΆ„λ¦¬μ‹œν‚€λŠ” 섀계 원칙이닀.

λ³΅ν•©κΈ°μ˜ 클래슀 λ‹€μ΄μ–΄κ·Έλž¨ (팩슀, ν”„λ¦°ν„°, 볡사 ν΄λΌμ΄μ–ΈνŠΈκ°€ 볡합기λ₯Ό μ‚¬μš©)

볡합기 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” ν΄λž˜μŠ€λŠ” 'ν”„λ¦°ν„°', '볡사', '팩슀' κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈκ°€ 이λ₯Ό λ™μ‹œμ— μ‚¬μš©ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.

ν΄λΌμ΄μ–ΈνŠΈλŠ” 각 κΈ°λŠ₯λ§Œμ„ μ΄μš©ν•˜λ―€λ‘œ 'ν”„λ¦°ν„°' κΈ°λŠ₯만 μ‚¬μš©ν•  λ•Œ '팩슀' κΈ°λŠ₯의 변경이 생겼닀고 영ν–₯을 λ°›μ•„μ„œλŠ” μ•ˆλœλ‹€.

 

즉, ν΄λΌμ΄μ–ΈνŠΈμ™€ λ¬΄κ΄€ν•˜κ²Œ λ°œμƒν•œ λ³€ν™”λ‘œ ν΄λΌμ΄μ–ΈνŠΈ μžμ‹ μ΄ 영ν–₯을 받지 μ•ŠμœΌλ €λ©΄ λ²”μš©μ˜ μΈν„°νŽ˜μ΄μŠ€λ³΄λ‹€λŠ” ν΄λΌμ΄μ–ΈνŠΈμ— νŠΉν™”λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•΄μ•Όλ§Œ ν•œλ‹€.

 

볡합기 ν΄λž˜μŠ€μ— ISP 원칙을 μ μš©ν•œ κ²°κ³Ό

볡합기 ν΄λž˜μŠ€μ— ISPλ₯Ό μ μš©ν•œ 예

볡합기λ₯Ό μ‚¬μš©ν•˜λŠ” 객체(ν΄λΌμ΄μ–ΈνŠΈ)λ“€λ§ˆλ‹€ μžμ‹ μ΄ 관심을 κ°–λŠ” λ©”μ„œλ“œλ“€λ§Œ μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅λ°›λ„λ‘ μ„€κ³„ν–ˆλ‹€.

--> μ΄λ ‡κ²Œ μ„€κ³„ν•˜λ©΄ μ–»λŠ” μž₯점 : μΈν„°νŽ˜μ΄μŠ€κ°€ λ°©ν™”λ²½ 역할을 μˆ˜ν–‰ν•΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— 생긴 λ³€ν™”λ‘œ μΈν•œ 영ν–₯을 받지 μ•Šκ²Œ λœλ‹€.

 

SRP와 ISP μ‚¬μ΄μ˜ 관계

μ–΄λ–€ ν΄λž˜μŠ€κ°€ 단일 μ±…μž„μ΄ μ•„λ‹Œ μ—¬λŸ¬ μ±…μž„μ΄ μžˆλ‹€λ©΄ λ°©λŒ€ν•œ λ©”μ„œλ“œλ₯Ό 가지기 λ•Œλ¬Έμ— λΉ„λŒ€ν•œ ν΄λž˜μŠ€κ°€ 되고 μ΄λŠ” λΉ„λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜κ²Œ λœλ‹€. μ΄λ ‡κ²Œ λΉ„λŒ€ν•œ 클래슀λ₯Ό SRP에 따라 단일 μ±…μž„ 원칙을 κ°–λŠ” μ—¬λŸ¬ ν΄λž˜μŠ€λ“€λ‘œ λΆ„ν• ν•˜κ³  각자의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•œλ‹€λ©΄ SRP와 ISP λ‘˜λ‹€ λ§Œμ‘±μ‹œν‚¬ 수 μžˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ ISPλŠ” SRPλ₯Ό λ§Œμ‘±ν•˜λ©΄ μ„±λ¦½λ˜λŠ”κ°€?

μœ„ μ§ˆλ¬Έμ— λŒ€ν•œ 닡은 "λ°˜λ“œμ‹œ κ·Έλ ‡λ‹€κ³  λ³Ό 수 μ—†λ‹€" 이닀.

 

κ°€λ Ή κ²Œμ‹œνŒμ˜ μ—¬λŸ¬ κΈ°λŠ₯을 κ΅¬ν˜„ν•œ λ©”μ„œλ“œμ— κΈ€μ“°κΈ°, 읽기, μ‚­μ œ 등이 μžˆλ‹€κ³  ν•˜μž.
μ΄λŠ” κ²Œμ‹œνŒμ— κ΄€λ ¨λœ μ±…μž„λ§Œ μˆ˜ν–‰ν•˜λ―€λ‘œ SRPλ₯Ό λ§Œμ‘±ν•˜μ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈμ— 따라 (일반 μ‚¬μš©μž, κ΄€λ¦¬μž λ“±) κΈ°λŠ₯이 λ‹¬λΌμ§€λ―€λ‘œ(κΈ€ μ‚­μ œ κΆŒν•œ λ“±) ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν–ˆλ‹€λ©΄ ISPλ₯Ό μœ„λ°°ν•œ 섀계가 λ˜λŠ” 것이닀.

 

SRPλ₯Ό λ§Œμ‘±ν•˜λ”λΌλ„ ISPλ₯Ό λ°˜λ“œμ‹œ λ§Œμ‘±ν•œλ‹€κ³  λ³Ό 수 μ—†λ‹€