potatos
𝕝𝕒𝕦𝕣𝕦𝕀
potatos
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기
    • Daily
    • Study
      • CS
      • Network
      • Windows
      • Linux
      • HTML & CSS
      • JavaScript
      • React
      • vue.js
      • Flutter
      • DataBase
      • Elastic Se..
      • Log
      • Coding Tes..
    • Work
      • PC
      • Mobile
      • JPGIF

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

  • notice

인기 κΈ€

νƒœκ·Έ

  • JavaScript
  • μ…€λ ‰ν„°
  • Windows
  • 수직 μ •λ ¬
  • MySQL
  • HTML
  • Linux
  • μœˆλ„μš°
  • CSS
  • μžλ°”μŠ€ν¬λ¦½νŠΈ

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
potatos

𝕝𝕒𝕦𝕣𝕦𝕀

Study/JavaScript

[JavaScript] 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)

2022. 7. 8. 14:52

객체 μ§€ν–₯

절차 μ§€ν–₯의 κ²½μš°μ—λŠ” κΈ°λŠ₯이 쀑심이 λœλ‹€. 무엇을 μ–΄λ–€ 절차둜 ν•  것인가? κ°€ 핡심이 λœλ‹€.
κ·ΈλŸ¬λ‚˜, 객체 μ§€ν–₯은 κΈ°λŠ₯이 μ•„λ‹Œ 객체가 쀑심이 λœλ‹€. λˆ„κ°€ μ–΄λ–€ 일을 ν•  것인가? κ°€ 핡심이 λ˜λŠ” 것이닀.
객체λ₯Ό λ„μΆœν•˜κ³  각각의 역할을 μ •μ˜ν•΄ λ‚˜κ°€λŠ” 것에 μ΄ˆμ μ„ λ§žμΆ˜λ‹€.

λŒ€ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ 경우, λ§Žμ€ κΈ°λŠ₯을 μˆ˜λ°˜ν•˜κΈ° λ•Œλ¬Έμ— 객체 μ§€ν–₯이 μ ν•©ν•˜λ‹€. 각 객체가 ν•˜λŠ” 역할이 λ§Žλ”λΌλ„, λ§Žμ€ 역할을 객체둜 묢을 수 있기 λ•Œλ¬Έμ΄λ‹€. λ°˜λŒ€λ‘œ, μ†Œν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ κ²½μš°μ—λŠ” μ ν•©ν•˜μ§€ μ•Šμ€λ°, μž‘μ€ κΈ°λŠ₯을 κ°μ²΄λ³„λ‘œ λ‚˜λˆ„κ²Œ 되면 였히렀 λ³΅μž‘ν•΄μ§ˆ κ°€λŠ₯성이 있기 λ•Œλ¬Έμ΄λ‹€.

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ΄λž€?

객체 μ§€ν–₯에 λŒ€ν•΄μ„œ μ•Œμ•„λ΄€λ‹€λ©΄, 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄μ„œ μ•Œμ•„ 보자.
객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μƒν™”μ‹œμΌœμ„œ μƒνƒœμ™€ ν–‰μœ„λ₯Ό κ°€μ§„ 객체(클래슀)λ₯Ό λ§Œλ“ λ‹€. κ·Έ 객체듀 κ°„μ˜ 유기적인 μƒν˜Έ μž‘μš©μ„ 톡해 λ‘œμ§μ„ κ΅¬μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 방법이닀.

ν΄λž˜μŠ€μ™€ 객체(μΈμŠ€ν„΄μŠ€)

  • 클래슀
    • 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ ν‹€ λ˜λŠ” 섀계도
    • 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•„λ“œ => ν΄λž˜μŠ€μ— ν¬ν•¨λœ λ³€μˆ˜
    • 객체의 행동을 λ‚˜νƒ€λ‚΄κ³  νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ…λ Ήλ¬Έμ˜ μž‘ν•© => λ©”μ„œλ“œ
  • 객체(μΈμŠ€ν„΄μŠ€)
    • ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ 것을 ν† λŒ€λ‘œ μ‹€μ œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜κ³ , μ‹€μ œ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” 데이터

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯점

  • μ½”λ“œ μž¬μ‚¬μš© 용이
    • 남이 λ§Œλ“  클래슀λ₯Ό 가져와 μ΄μš©ν•  μˆ˜λ„ 있고, 상속을 톡해 ν™•μž₯도 κ°€λŠ₯
  • μœ μ§€λ³΄μˆ˜κ°€ 쉬움
    • 절차 μ§€ν–₯의 경우, μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•  κ²½μš°μ— μ°Ύμ•„ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” 반면, 객체 μ§€ν–₯은 μˆ˜μ •ν•΄μ•Ό ν•  뢀뢄이 클래슀 내뢀에 λ³€μˆ˜λ‚˜ λ©”μ„œλ“œλ‘œ μ‘΄μž¬ν•˜μ—¬ ν•΄λ‹Ή λΆ€λΆ„λ§Œ μˆ˜μ •ν•  수 μžˆμ–΄ μœ μ§€ λ³΄μˆ˜κ°€ 쉬움
  • λŒ€ν˜• ν”„λ‘œμ νŠΈμ— 적합
    • 클래슀 λ‹¨μœ„λ‘œ λͺ¨λ“ˆν™”ν•˜μ—¬ κ°œλ°œν•  수 μžˆμ–΄, μ—¬λŸ¬ λͺ… λ˜λŠ” μ—¬λŸ¬ νšŒμ‚¬μ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•  λ•Œ 업무 뢄담이 κ°„νŽΈν•¨

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 단점

  • 처리 속도가 μƒλŒ€μ μœΌλ‘œ 느림
  • 객체가 λ§Žμ•„μ§€λ©΄ μš©λŸ‰μ΄ 컀짐
  • 섀계 μ‹œ, λ§Žμ€ μ‹œκ°„κ³Ό λ…Έλ ₯이 ν•„μš”

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•

  1. μΊ‘μŠν™”
    • μ‹€μ œλ‘œ κ΅¬ν˜„λ˜λŠ” 뢀뢄을 외뢀에 λ“œλŸ¬λ‚˜μ§€ μ•Šλ„λ‘ ν•˜μ—¬ μ •보λ₯Ό 은닉
    • 객체가 λ…λ¦½μ μœΌλ‘œ 역할을 ν•  수 μžˆλ„λ‘ 데이터와 κΈ°λŠ₯을 ν•˜λ‚˜λ‘œ λ¬Άμ–΄ 관리
    • μΊ‘μŠν™”λ‘œ 인해 μ½”λ“œλ₯Ό μž¬μˆ˜μ • 없이 μž¬ν™œμš© κ°€λŠ₯
  2. 좔상화
    • κ°μ²΄λ“€μ˜ 곡톡적인 νŠΉμ§•μ„ λ„μΆœν•˜λŠ” 것
    • 클래슀 μ •μ˜λ„ 좔상화 과정을 κ±°μΉ¨
  3. 상속성
    • ν•˜λ‚˜μ˜ ν΄λž˜μŠ€κ°€ κ°€μ§„ νŠΉμ§•μ„ λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›λŠ” 것
    • λΆ€λͺ¨ 클래슀의 속성과 κΈ°λŠ₯을 κ·ΈλŒ€λ‘œ λ¬Όλ €λ°›μ•„ μ‚¬μš© κ°€λŠ₯ν•˜λ©°, μžμ‹ ν΄λž˜μŠ€μ—μ„œ κΈ°λŠ₯ 일뢀뢄을 μˆ˜μ •ν•˜μ—¬ μ‚¬μš©ν•  수 있음
    • 닀쀑 상속은 λΆˆκ°€λŠ₯
  4. λ‹€ν˜•μ„±
    • ν•˜λ‚˜μ˜ λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ… 등이 상황에 따라 λ‹€λ₯Έ 의미둜 해석 κ°€λŠ₯ν•œ 것
    • μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯
      • μ˜€λ²„λΌμ΄λ”©: λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œμ™€ 같은 이름, λ§€κ°œλ³€μˆ˜λ₯Ό μž¬μ •μ˜
      • μ˜€λ²„λ‘œλ”©: 같은 μ΄λ¦„μ˜ ν•¨μˆ˜λ₯Ό μ—¬λŸ¬ 개 μ •μ˜, λ§€κ°œλ³€μˆ˜ νƒ€μž…κ³Ό 개수λ₯Ό λ‹€λ₯΄κ²Œν•˜μ—¬ λ§€κ°œλ³€μˆ˜μ— 따라 λ‹€λ₯΄κ²Œ 호좜 κ°€λŠ₯
  5. 동적바인딩
    • 가상 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•  λ•Œ, 바인딩 μ‹€ν–‰ μ‹œκ°„μ— κ²°μ •ν•˜λŠ” 것
    • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄, 동적 바인딩을 ν†΅ν•˜μ—¬ ν΄λž˜μŠ€μ— μ˜€λ²„λΌμ΄λ”©λœ ν•¨μˆ˜κ°€ μ‹€ν–‰

Cμ–Έμ–΄, C++언어와 JavaScript의 차이점

  1. class 기반 / prototype 기반
    • C언어와 C++μ–Έμ–΄λŠ” 클래슀 기반 객체지ν–₯μ–Έμ–΄μ΄μ§€λ§Œ, JavaScriptλŠ” ν”„λ‘œν† νƒ€μž… 기반 객체지ν–₯μ–Έμ–΄λ‘œ ν΄λž˜μŠ€λΌλŠ” κ°œλ…μ΄ μ—†μŒ
    • class 기반 μ–Έμ–΄λŠ” classλΌλŠ” κ°œλ…μ„ κ°€μ§€κ³  객체λ₯Ό μ°μ–΄λ‚΄μ§€λ§Œ, prototype 기반 μ–Έμ–΄λŠ” classλΌλŠ” κ°œλ…μ΄ μ—†μ–΄ 객체 prototype의 μœ„μž„ 과정을 톡해 상속이 이루어짐
    • class 기반 μ–Έμ–΄λŠ” classλ₯Ό μ΄μš©ν•΄ μƒˆλ‘œμš΄ 객체λ₯Ό 뽑아내고, prototype 기반 μ–Έμ–΄λŠ” 객체끼리의 chaining을 톡해 λ™μ μœΌλ‘œ ν‘œν˜„
  2. 동기 / 비동기
    • C언어와 C++μ–Έμ–΄λŠ” 비동기적 μ‹€ν–‰
    • JavaScriptλŠ” 동기적인 νŠΉμ„±μ„ κ°€μ Έ μž‘μ„±ν•œ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰
      • JavaScript 엔진은 단일 μŠ€λ ˆλ“œμ΄κΈ° λ•Œλ¬Έμ— ν•œ 번 λ™μž‘ν•  λ•Œ, ν•˜λ‚˜μ˜ ν•¨μˆ˜λ§Œμ„ μ²˜λ¦¬ν•  수 있음

μ°Έκ³ 

- https://jeong-pro.tistory.com/95

- http://www.incodom.kr/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5

- https://velog.io/@hidaehyunlee/JavaScript-C-%EB%AC%B8%EB%B2%95-%EB%B9%84%EA%B5%90

- https://velog.io/@kh6619/TIL-JavaScript%EC%99%80-%EB%8B%A4%EB%A5%B8-%EC%96%B8%EC%96%B4%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

'Study > JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JavaScript] Restful API  (0) 2022.07.08
[JavaScript] MVC / MVP / MVVM νŒ¨ν„΄  (0) 2022.07.08
[JavaScript] 싱글톀 νŒ¨ν„΄(Singleton Pattern)  (0) 2022.07.08
[JavaScript] ν˜Έμ΄μŠ€νŒ…(Hoisting)  (0) 2022.07.08
[JavaScript] λΈŒλΌμš°μ € μ €μž₯μ†Œ  (0) 2022.07.08
    'Study/JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JavaScript] Restful API
    • [JavaScript] MVC / MVP / MVVM νŒ¨ν„΄
    • [JavaScript] 싱글톀 νŒ¨ν„΄(Singleton Pattern)
    • [JavaScript] ν˜Έμ΄μŠ€νŒ…(Hoisting)
    potatos
    potatos

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”