πŸ€— ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„

HeoΒ·2023λ…„ 10μ›” 24일

ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ— λŒ€ν•΄ κ°„λ‹¨ν•˜κ²Œ 정리해보고, λ³΅μŠ΅ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ ν¬μŠ€νŒ…μ„ ν•˜κ²Œ λ˜μ—ˆλ‹€.


  • ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λž€

    ν”„λ‘œκ·Έλž˜λ°μ˜ 관점을 κ°–κ²Œ ν•΄μ£ΌλŠ” 역할을 ν•˜λŠ” 개발 방법둠
    크게 μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°(ν•¨μˆ˜ν˜•), λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°(객체 μ§€ν–₯, 절차 μ§€ν–₯)으둜 λ‚˜λ‰˜κ²Œ λœλ‹€.

    C++, 파이썬, μžλ°”μŠ€ν¬λ¦½νŠΈ, jdk 1.8 μ΄μƒμ˜ μžλ°”μ™€ 같은 νŠΉμ • 언어듀은 μ—¬λŸ¬ νŒ¨λŸ¬λ‹€μž„μ„ μ§€μ›ν•œλ‹€.


😾 μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°


μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°(declarative programming)은 무엇을 ν’€μ–΄λ‚΄λŠ”κ°€μ— μ§‘μ€‘ν•˜λŠ” νŒ¨λŸ¬λ‹€μž„μ΄λ‹€.
μ„ μ–Έν˜• νŒ¨λŸ¬λ‹€μž„μ˜ 일쒅인 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(functional programming)κ³Ό 같이 ν”„λ‘œκ·Έλž¨μ€ ν•¨μˆ˜λ‘œ 이루어진 것이닀.λΌλŠ” λͺ…μ œκ°€ 담겨 μžˆλ‹€.


#javascript
const pure = (a, b) => {
	return a + b
}

μœ„μ™€ 같은 λ§€κ°œλ³€μˆ˜μ—λ§Œ 영ν–₯을 λ°›κ²Œ λ˜λŠ” 순수 ν•¨μˆ˜λ“€μ„ λΈ”λ‘μ²˜λŸΌ μŒ“μ•„ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬ν˜„ν•˜κ³ , ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ λ‘œμ§μ„ 생성할 수 μžˆλŠ” κ³ μ°¨ ν•¨μˆ˜λ₯Ό 톡해 μž¬μ‚¬μš©μ„±μ„ 높인 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ΄λ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜κ°€ 일급 객체이기 λ•Œλ¬Έμ— ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 방식이 더 μ ν•©ν•˜λ‹€.


  • 일급 객체
  1. λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œμ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•  수 μžˆλ‹€.
  2. ν•¨μˆ˜ μ•ˆμ— ν•¨μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 담을 수 μžˆλ‹€.
  3. ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€.



😽 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°


객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP, Object-Oriented Programming)은 κ°μ²΄λ“€μ˜ μ§‘ν•©μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ μƒν˜Έ μž‘μš©μ„ ν‘œν˜„ν•˜κ²Œ 되며 데이터λ₯Ό 객체 μ·¨κΈ‰ν•˜μ—¬ 객체 λ‚΄λΆ€μ˜ λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜λŠ” 방식이닀.

섀계와 κ΅¬ν˜„μ— λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ˜κ³  처리 속도가 μƒλŒ€μ μœΌλ‘œ λŠλ¦¬λ‹€λŠ” 단점이 μžˆμ§€λ§Œ, μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κ±°λ‚˜ μœ μ§€λ³΄μˆ˜ν•˜κ³  ν™•μž₯에 μš©μ΄ν•˜λ‹€λŠ” μž₯점이 μžˆλ‹€.

좔상화, 상속, λ‹€ν˜•μ„±(μ˜€λ²„λ‘œλ”© => 정적(컴파일) λ‹€ν˜•μ„±, μ˜€λ²„λΌμ΄λ”© => 동적(λŸ°νƒ€μž„) λ‹€ν˜•μ„±), μΊ‘μŠν™”(정보 은닉)λΌλŠ” νŠΉμ§•μ„ κ°€μ§„λ‹€.

SOLID 섀계 원칙을 κ°€μ§„λ‹€. => μ•ž ν¬μŠ€νŒ… μ°Έκ³ 




😺 μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°


μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 둜직이 μˆ˜ν–‰λ˜μ–΄μ•Ό ν•  연속적인 계산 κ³Όμ •μœΌλ‘œ μ΄λ£¨μ–΄μ§€λŠ” 방식이닀.
일이 μ§„ν–‰λ˜λŠ” λ°©μ‹μœΌλ‘œ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ° λ•Œλ¬Έμ— 가독성이 μ’‹κ³ , μ‹€ν–‰ 속도가 λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— κ³„μ‚°λŸ‰μ΄ 많이 μš”κ΅¬λ˜λŠ” μž‘μ—…μ—μ„œ μ“°μ΄κ²Œ λœλ‹€.
(ex) ν¬νŠΈλž€μ„ μ΄μš©ν•œ λŒ€κΈ° μ—°μ‚° μž‘μ—…, λ¨Έμ‹  λŸ¬λ‹ 배치 μž‘μ—…)

ν•˜μ§€λ§Œ 절차적으둜 ν”„λ‘œκ·Έλž˜λ°μ„ μ§„ν–‰ν•˜λ―€λ‘œ λͺ¨λ“ˆν™”ν•˜κΈ° μ–΄λ ΅κ³  μœ μ§€λ³΄μˆ˜μ„±μ΄ λ–¨μ–΄μ§„λ‹€λŠ” 단점이 μ‘΄μž¬ν•œλ‹€.

#python
ret = [1, 2, 3, 4, 5, 11, 12]
a = 0
for i in range(0, len(ret)):
	a = max(ret[i], a)
   
return a

μœ„μ™€ 같은 μ½”λ“œκ°€ μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ λŒ€ν‘œμ μΈ μ˜ˆμ‹œμ΄λ‹€.




πŸ˜€ νŒ¨λŸ¬λ‹€μž„μ˜ ν˜Όν•©?


νŠΉμ • ν”„λ‘œκ·Έλž¨μ΄λ‚˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜λŠ” 데에 μžˆμ–΄ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 μ„œλΉ„μŠ€μ˜ νŠΉμ§•μ„ κ³ λ €ν•΄μ„œ νŒ¨λŸ¬λ‹€μž„μ„ μ •ν•˜λŠ” 것이 μ’‹λ‹€.

ν•˜λ‚˜μ˜ νŒ¨λŸ¬λ‹€μž„μ„ 기반으둜 μ„œλΉ„μŠ€λ₯Ό ꡬ좕해도 λ˜μ§€λ§Œ, μ—¬λŸ¬ νŒ¨λŸ¬λ‹€μž„μ„ μ‘°ν•©ν•˜μ—¬ 상황과 λ§₯락에 맞좰 ν•΄λ‹Ή νŒ¨λŸ¬λ‹€μž„λ§Œμ˜ μž₯점만 μ·¨ν•΄ κ°œλ°œν•˜λŠ” 것이 κ°€μž₯ μ’‹λ‹€.




profile
κΎΈμ€€ν•˜κ²Œ λ°œμ „ν•˜κ³  μ„±μž₯ν•˜λŠ” κ°œλ°œμžκ°€ 되고 μ‹ΆμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€