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

νŒŒμ΄μ¬μ€ 순수 객체지ν–₯ μ–Έμ–΄λ‹€?

by μ„œμ•„λž‘πŸ˜ 2023. 5. 28.

 

순수 객체지ν–₯?

 

순수 객체지ν–₯μ΄λΌλŠ” 것은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λͺ¨λ“  것듀이 객체둜 ν‘œν˜„λ  수 μžˆμ–΄μ•Ό ν•˜λ©° 객체지ν–₯의 원칙을 μ—„κ²©νžˆ μ§€ν‚€λŠ” 것이닀. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ½”λ“œλ₯Ό 객체의 μ§‘ν•©μœΌλ‘œ κ΅¬μ„±ν•˜κ³ , 객체듀 간에 λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›μ•„ ν˜‘λ ₯ν•˜λ„λ‘ μ„€κ³„ν•˜λŠ” μ ‘κ·Ό 방식이닀.


μ—¬κΈ°μ„œ 객체지ν–₯ 원칙은 λ‹€μŒκ³Ό κ°™λ‹€.


μΊ‘μŠν™”(Encapsulation): κ΄€λ ¨λœ 데이터와 λ™μž‘μ„ 객체 내뢀에 ν•¨κ»˜ λ¬Άμ–΄ 숨기고, μ™ΈλΆ€μ—μ„œλŠ” 객체의 곡개된 μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅ν•΄μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€.

상속(Inheritance): 이미 μ •μ˜λœ 클래슀λ₯Ό 기반으둜 μƒˆλ‘œμš΄ 클래슀λ₯Ό μƒμ„±ν•˜κ³ , κΈ°μ‘΄ 클래슀의 νŠΉμ„±κ³Ό λ™μž‘μ„ 상속받아 μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

λ‹€ν˜•μ„±(Polymorphism): λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ†Œλ“œλ‚˜ μ—°μ‚°μžκ°€ λ‹€λ₯Έ 객체에 따라 λ‹€λ₯Έ λ™μž‘μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” λŠ₯λ ₯이닀.

좔상화(Abstraction): λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ—μ„œ 핡심적인 κ°œλ…μ΄λ‚˜ κΈ°λŠ₯에 μ§‘μ€‘ν•˜κ³ , λΆˆν•„μš”ν•œ 세뢀사항은 μˆ¨κΈ°λŠ” κ°œλ…μ΄λ‹€.

 

μš°λ¦¬κ°€ 객체지ν–₯에 λŒ€ν•΄ 처음 κ³΅λΆ€ν–ˆμ„ λ•Œ, ν”νžˆ λ§ν•˜λŠ” 객체지ν–₯의 4μš”μ†Œμ΄λ‹€. 

 

즉, λͺ¨λ“  νƒ€μž…μ΄ 객체여야 ν•˜λ©° μœ„ 객체지ν–₯의 4μš”μ†Œλ₯Ό μ² μ €ν•˜κ²Œ μ§€ν‚€λŠ” μ–Έμ–΄κ°€ 순수 κ°μ œμ§€ν–₯ μ–Έμ–΄λ‹€.



순수 객체지ν–₯은 μœ„μ˜ 원칙듀을 κ°€λŠ₯ν•œ ν•œ μ—„κ²©ν•˜κ²Œ λ”°λ₯΄λŠ” 것을 μ˜λ―Έν•œλ‹€. 예λ₯Ό λ“€μ–΄, 객체지ν–₯ 언어인 Javaμ—μ„œλŠ” 순수 객체지ν–₯을 지ν–₯ν•˜κΈ° μœ„ν•΄ "λͺ¨λ“  것은 객체"λΌλŠ” 원칙을 가지고 μžˆλ‹€. Javaμ—μ„œλŠ” κΈ°λ³Έ 데이터 νƒ€μž…λ“€λ„ 객체둜 μ·¨κΈ‰ν•˜μ—¬ 객체지ν–₯의 원칙을 보닀 μΌκ΄€λ˜κ²Œ μ μš©ν•˜κ³ μž ν•œλ‹€. μ΄λŸ¬ν•œ λ©΄μ—μ„œ 봀을 λ•Œ JavaλŠ” 순수 객체지ν–₯ μ–Έμ–΄κ°€ ν™•μ‹€νžˆ λ§žλ‹€.


순수 객체지ν–₯은 객체지ν–₯의 μž₯점을 κ·ΉλŒ€ν™”ν•˜κ³  μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±, μœ μ§€λ³΄μˆ˜μ„±, ν™•μž₯μ„± 등을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©λ  수 μžˆλ‹€.

 

 

κ·Έλ ‡λ‹€λ©΄ νŒŒμ΄μ¬μ€?

 

νŒŒμ΄μ¬μ— λŒ€ν•΄μ„œ 순수 객체지ν–₯이냐 μ•„λ‹ˆλƒμ— λŒ€ν•΄ 의견이 μ—‡κ°ˆλ¦°λ‹€. μ–΄λ–€ 이듀은 λͺ¨λ“  것듀이 객체둜 λ˜μ–΄ μžˆμœΌλ‹ˆ 순수 객체지ν–₯ μ–Έμ–΄λ‹€ 라고 λ§ν•˜λ©° μ–΄λ–€ 이듀은 λͺ‡λͺ‡ μ›μ‹œ(Primative) νƒ€μž…μ— λŒ€ν•΄μ„œλŠ” 객체라고 λ³Ό 수 μ—†λ‹€ 라고 λ§ν•œλ‹€.

 

ν†΅μš©λ˜λŠ” μ˜κ²¬μ€ "거의 순수 객체지ν–₯ μ–Έμ–΄" λΌλŠ” 것이닀. 거의 λΌλŠ” 단어가 λΆ™μ—ˆκΈ° λ•Œλ¬Έμ— 100% 순수 객체지ν–₯ μ–Έμ–΄λŠ” μ•„λ‹ˆμ§€λ§Œ 순수 객체지ν–₯ 언어라고 봐도 무방할 것이닀. λ‚˜λŠ” 개인적으둜 νŒŒμ΄μ¬μ€ 순수 객체지ν–₯이라고 λ³Έλ‹€.

 

μš°μ„  νŒŒμ΄μ¬μ—μ„œ μ‚¬μš©μž μ •μ˜ 클래슀 말고 기본적으둜 μ •μ˜λœ μ •μˆ˜, μ‹€μˆ˜λ₯Ό λΉ„λ‘―ν•΄ λ¬Έμžμ—΄, 리슀트, λ”•μ…”λ„ˆλ¦¬λŠ” 미리 μ •μ˜λœ ν΄λž˜μŠ€μ΄λ‹€. 파이썬의 typeν•¨μˆ˜λ₯Ό 톡해 μ›μ‹œνƒ€μž…μ΄λΌκ³  μƒκ°λ˜λŠ” νƒ€μž…μ„ 인자둜 λ„£μœΌλ©΄ class λΌλŠ” μ›Œλ”©μ΄ λ“±μž₯ν•œλ‹€.

 

νŒŒμ΄μ¬μ€ μ™„λ²½ν•œ 순수 객체지ν–₯ μ–Έμ–΄λŠ” μ•„λ‹ˆλΌκ³  μ£Όμž₯ν•˜λŠ” μ˜κ²¬μ—λŠ” μ ˆμ°¨μ§€ν–₯적인 μš”μ†Œλ„ μ–Έμ–΄ νŒ¨λŸ¬λ‹€μž„μ— ν¬ν•¨λ˜μ—ˆλ‹€κ³  이야기 ν•œλ‹€. λ˜ν•œ 일뢀 μ›μ‹œ νƒ€μž…μ€ ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλΌκ³  ν•œλ‹€. 그게 λ­”μ§€λŠ” 찾아봐도 μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— 이건.... λ¬΄μ‹œν•˜λŠ” 게 쒋을 것 κ°™λ‹€. ν˜Ήμ€ μ›μ‹œ νƒ€μž…μ€ ν΄λž˜μŠ€μ§€λ§Œ μ‹€μ œ 클래슀 처럼 λ™μž‘ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 껍데기만 클래슀라고 ν•  μˆ˜λ„ μžˆλ‹€.

 

μ ˆμ°¨μ§€ν–₯적 μš”μ†ŒλŠ” μžλ°”λ§ŒνΌ λͺ¨λ“  λ™μž‘μ΄ ν΄λž˜μŠ€μ—μ„œ 이루어지지 μ•ŠλŠ” μ μ—μ„œ κ·Έλ ‡κ²Œ λ§ν•œ 것 κ°™λ‹€. 사싀 λ‚˜λ„ 이 뢀뢄에 λŒ€ν•΄μ„œλŠ” νŒŒμ΄μ¬μ„ 처음 μ ‘ν–ˆμ„ λ•Œ λ™μ˜ν–ˆμœΌλ‚˜ μ§€κΈˆμ€ 생각이 쑰금 λ°”λ€Œμ—ˆλ‹€.

 

λ§ˆλ¬΄λ¦¬ν•˜μžλ©΄, νŒŒμ΄μ¬μ€ μ—„κ²©ν•œ 순수 객체지ν–₯의 기쀀을 λͺ¨λ‘ λ§Œμ‘±ν•œ μ…ˆμ΄λΌκ³  봐도 λ¬΄λ°©ν•˜λ‹€. λ”°λΌμ„œ 결둠은 νŒŒμ΄μ¬μ€ 순수 객체지ν–₯ 언어이닀.

 

λ§Œμ•½ λ™μ˜ν•˜λŠ” 의견 ν˜Ήμ€ λ‹€λ₯Έ 의견이 μžˆλ‹€λ©΄ 주저없이 λŒ“κΈ€ λ‹¬μ•„μ£Όμ‹œλ©΄ μ°Έκ³ ν•˜κ² λ‹€. 뭐가 됐든 νŒŒμ΄μ¬μ€ 생산성이 λ›°μ–΄λ‚˜κ³  μœ μ—°ν•œ ꡬ쑰λ₯Ό κ°–κ³  있기 λ•Œλ¬Έμ— ν”„λ‘œμ νŠΈμ—μ„œ νŒŒμ΄μ¬μ„ μ“Έ 땐 기뢄이 μ’‹λ‹€.

λŒ“κΈ€