πŸ’» [Theory] μ ˆμ°¨μ§€ν–₯ 객체지ν–₯? Procedural Programming κ³Ό 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

πŸ’» [Theory] μ ˆμ°¨μ§€ν–₯ 객체지ν–₯? Procedural Programming κ³Ό 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

μžλ°” μ–Έμ–΄μ˜ λŒ€ν‘œμ μΈ νŠΉμ§•μ΄λΌλ©΄ κ°€μž₯ λ¨Όμ € λ– μ˜€λ₯΄λŠ” 것이 객체지ν–₯적인 μ–Έμ–΄λΌλŠ” 것 μž…λ‹ˆλ‹€. 그만큼 μžλ°”μ–Έμ–΄μ™€ 객체지ν–₯μ΄λΌλŠ” 단어가 μƒλ‹Ήνžˆ 연관이 κΉŠμŠ΅λ‹ˆλ‹€.

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—κ³Ό μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ 많이 λΉ„κ΅λ©λ‹ˆλ‹€.

그럼 μš°μ„ , μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

Procedural Programming

절차적 ν”„λ‘œκ·Έλž˜λ°μ˜ μ˜€ν•΄

μ˜μ–΄μ‚¬μ „μ—μ„œμ˜ Procedural은 β€˜μ ˆμ°¨μƒμ˜β€™ λΌλŠ” λœ»μ„ μ§€λ‹ˆκ³  μžˆμŠ΅λ‹ˆλ‹€.

보톡 μ ˆμ°¨λΌλŠ” λœ»μ„ μ–΄λ–€ 일을 ν•˜λŠ”λ° κ°€λŠ” μˆœμ„œλ‚˜ λ°©λ²•μœΌλ‘œ μƒκ°ν•˜κΈ° λ•Œλ¬Έμ— Procedural Programming 이라 ν•˜λ©΄ μˆœμ„œλ₯Ό μ€‘μš”μ‹œν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³  μƒκ°ν•˜κ²Œ λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ΄λŠ” ν•œκ΅­μ–΄ λ²ˆμ—­μ— μ˜ν•œ μ˜€ν•΄λΌκ³  ν•©λ‹ˆλ‹€.

Procedural Programming μ—μ„œ Procedural β€˜μ ˆμ°¨μ β€™ 으둜 λ²ˆμ—­ν•΄λ²„λ €μ„œ 마치 절차적으둜 μ‹€ν–‰ν•˜λŠ” 것이

쀑점이 λ˜λŠ” κ²ƒμ²˜λŸΌ 보이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 그런데 μ ˆμ°¨μ μ΄μ§€ μ•Šμ€ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 건 μ• μ΄ˆμ— μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

객체지ν–₯ 언어인 μžλ°”λ„ 결ꡭ에 μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” 것은 μ†ŒμŠ€μ½”λ“œμ˜ μœ— λΆ€λΆ„λΆ€ν„° 절차적으둜 μ‹€ν–‰λ©λ‹ˆλ‹€

β€» Procedural의 ProcedureλŠ” β€˜μ ˆμ°¨β€™λΌλŠ” μ˜λ―Έκ°€ μ•„λ‹ˆλΌ β€˜ν”„λ‘œμ‹œμ €β€™μ˜ μ˜λ―Έμž…λ‹ˆλ‹€. 이 νŒ¨λŸ¬λ‹€μž„μ—μ„œλŠ”

ν”„λ‘œμ‹œμ € 콜, 즉 ν•¨μˆ˜ ν˜ΈμΆœμ„ ν†΅ν•΄μ„œ 좔상화와 μž¬μ‚¬μš©μ„±μ„ μ–»μ–΄λ‚΄λŠ” 것이 본질이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

Procedural Programming μ΄λž€?

절차적 ν”„λ‘œκ·Έλž˜λ°μ΄λž€ λ‹¨μˆœνžˆ 순차적인 λͺ…λ Ή μˆ˜ν–‰μ΄ μ•„λ‹ˆλΌ ν”„λ‘œμ‹œμ €(루틴, μ„œλΈŒλ£¨ν‹΄, λ©”μ†Œλ“œ, ν•¨μˆ˜ λ“±)을 μ΄μš©ν•œ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μ„ λœ»ν•©λ‹ˆλ‹€. λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ μΌμ’…μž…λ‹ˆλ‹€.

  • ν•¨μˆ˜λ‚˜ ν”„λ‘œμ‹œμ Έλ‘œ ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” κΈ°λ²•μœΌλ‘œ 데이터λ₯Ό μ€‘μ‹¬μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
  • λ‹€μˆ˜μ˜ ν”„λ‘œμ‹œμ €λ“€μ΄ 데이터λ₯Ό κ³΅μœ ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€.

    Procedural Programming 의 μž₯단점

    μž₯점

  • ν”„λ‘œμ‹œμ €λ₯Ό μ΄μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜κ²Œ 되면 기본적으둜 ν•¨μˆ˜λ₯Ό 톡해 μ½”λ“œμ˜ μž¬ν™œμš©μ„±μ΄ λ†’μ•„μ§€κ²Œ λ©λ‹ˆλ‹€.

단점

  • 데이터 νƒ€μž…μ΄λ‚˜ 의미λ₯Ό λ³€κ²½ν•΄μ•Ό ν•  λ•Œ, ν•¨κ»˜ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” ν”„λ‘œμ‹œμ €κ°€ μ¦κ°€ν•©λ‹ˆλ‹€.
  • μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object-Oriented Programming)

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ Procedural Programming 의 단점도 λ³΄μ™„ν•΄μ€λ‹ˆλ‹€.

절차 지ν–₯κ³Ό 달리 데이터 및 데이터와 κ΄€λ ¨λœ ν”„λ‘œμ‹œμ €(λ©”μ†Œλ“œ,ν•¨μˆ˜) λ₯Ό ν•¨κ»˜ 객체(object)라고 λΆˆλ¦¬λŠ” λ‹¨μœ„λ‘œ λ¬ΆμŠ΅λ‹ˆλ‹€.

객체 지ν–₯ κΈ°λ²•μœΌλ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ μœ„μ™€ 같은 κ°μ²΄λ“€λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

객체

  • ν”„λ‘œμ‹œμ €(λ©”μ†Œλ“œ,ν•¨μˆ˜)λ₯Ό μ‹€ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ 만큼의 데이터λ₯Ό 가지며, 객체듀이 λͺ¨μ—¬ ν”„λ‘œκ·Έλž¨μ„ ꡬ성
  • μžμ‹ λ§Œμ˜ κΈ°λŠ₯을 제곡
  • 각 객체듀은 μ„œλ‘œ μ—°κ²°λ˜μ–΄ λ‹€λ₯Έ 객체가 μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ‚¬μš©ν•  수 있게 됨.
  • λ‹€λ₯Έ 객체에 κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ‹œμ €(ex μžλ°” - λ©”μ„œλ“œ)λ₯Ό μ‚¬μš©

객체의 ν”„λ‘œμ‹œμ €(λ©”μ†Œλ“œ,ν•¨μˆ˜)

  • μžμ‹ μ΄ μ†ν•œ 객체의 λ°μ΄ν„°μ—λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©° λ‹€λ₯Έ 객체에 μ†ν•œ λ°μ΄ν„°μ—λŠ” μ ‘κ·Όν•  수 μ—†μŒ
  • 이 객체의 ν”„λ‘œμ‹œμ €λ₯Ό 톡해 λ‹€λ₯Έ 객체가 μžμ‹ μ˜ 데이터에 μ ‘κ·Όν•  수 있게 ν•΄μ€Œ

Procedural Programming κ³Ό λΉ„κ΅ν–ˆμ„ λ•Œμ˜ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯단점

μž₯점

  • 객체의 데이터λ₯Ό λ³€κ²½ν•˜λ”λΌλ„ ν•΄λ‹Ή 객체둜만 λ³€ν™”κ°€ μ§‘μ€‘λ˜κ³  λ‹€λ₯Έ κ°μ²΄μ—λŠ” 영ν–₯을 주지 μ•ŠκΈ° λ•Œλ¬Έμ—, μš”κ΅¬ μ‚¬ν•­μ˜ λ³€ν™”κ°€ λ°œμƒν–ˆμ„ λ•Œ 절자 지ν–₯ 방식보닀 ν”„λ‘œκ·Έλž¨μ„ 더 μ‰½κ²Œ λ³€κ²½ν•  수 있음
  • ν”„λ‘œκ·Έλž¨μ„ μƒλŒ€μ μœΌλ‘œ μ‰½κ²Œ μˆ˜μ •ν•  수 μžˆλŠ” μœ μ—°ν•¨μ„ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ—, λ³€ν™”λœ μš”κ΅¬ 사항을 λΉ λ₯΄κ²Œ λ°˜μ˜ν•  수 있음

단점

  • 데이터λ₯Ό κ³΅μœ ν•˜λŠ” μ ˆμ°¨μ§€ν–₯κ³Ό 달리 κ°μ²΄λ³„λ‘œ 데이터와 ν”„λ‘œμ‹œμ €λ₯Ό μ•Œλ§žκ²Œ μ •μ˜ν•΄μ•Ό 함
  • ν”„λ‘œκ·Έλž¨μ˜ 규λͺ¨κ°€ μž‘μ„ λ•Œμ—λŠ” 절차 지ν–₯ 방식보닀 λ³΅μž‘ν•œ ꡬ쑰λ₯Ό κ°–κ²Œ 됨 (λŒ€κ·œλͺ¨ ν”„λ‘œκ·Έλž¨μ— 적합)
  • 섀계가 더 μ–΄λ ΅λ‹€.

정리

  • ν”„λ‘œμ‹œμ €λŠ” λ„˜μ–΄μ˜¨ 데이터λ₯Ό μ΄μš©ν•΄ μ²˜λ¦¬ν•΄μ£Όκ³  λ„˜κ²¨μ£ΌλŠ” κΈ°λŠ₯ 밖에 μ—†κΈ° λ•Œλ¬Έμ— 데이터λ₯Ό μ €μž₯ν•˜κ³  관리할 수 μžˆλŠ” 곡간이 λ”°λ‘œ μ—†μŠ΅λ‹ˆλ‹€.

  • ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜λŠ”λ° μžˆμ–΄ λ‚΄μš©μ΄ λ§Žμ•„μ§€κ³  μ½”λ“œκ°€ 길어지면 가독성 뿐만 μ•„λ‹ˆλΌ κΈ°λŠ₯ κ΅¬ν˜„μ— λ§Žμ€ λΆˆνŽΈν•¨μ΄ λ”°λ¦…λ‹ˆλ‹€.

  • 객체지ν–₯ μ–Έμ–΄λŠ” 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” field(속성)λ₯Ό 가지고 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ κ°–κ³  μžˆλŠ” 데이터(field)λ₯Ό μ΄μš©ν•΄ ν”„λ‘œμ‹œμ €(ν•¨μˆ˜,λ©”μ†Œλ“œ)도 κ΅¬ν˜„ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ˜ˆμ „μ—λŠ” μ ˆμ°¨μ§€ν–₯ μ–Έμ–΄κ°€ 객체지ν–₯ 언어보닀 λΉ λ₯΄κ²Œ μ²˜λ¦¬λ˜μ–΄ μ‹œκ°„μ μœΌλ‘œ μœ λ¦¬ν•˜κΈ΄ ν–ˆμœΌλ‚˜

기술이 λ°œμ „ν•˜κ³  μ†Œν”„νŠΈμ›¨μ–΄ μ–Έμ–΄μ˜ λ°œλ‹¬κ³Ό 컴파일러의 λ°œλ‹¬λ‘œ ν•˜λ“œμ›¨μ–΄κ°€ μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ°œλ‹¬μ„ λ”°λΌμ˜€μ§€ λͺ»ν•˜λŠ” 상황이 λ‚˜μ™€ ν˜„μž¬λŠ” λŒ€λΆ€λΆ„μ˜ 객체지ν–₯ μ–Έμ–΄λ‘œ 개발되고 μžˆλ‹€κ³  보면 λ©λ‹ˆλ‹€.

끝

Procedural Programming κ³Ό 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
κ°μ‚¬ν•©λ‹ˆλ‹€. πŸ™

Reference

https://pjh3749.tistory.com/244

https://jamie95.tistory.com/121

https://programmingnote.tistory.com/14?category=801790

Written on May 29, 2021