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

2020. 5. 3. 15:09Β·πŸ“ Language/✏ Language

절차적 vs 객체지ν–₯

 

1. 절차적 ν”„λ‘œκ·Έλž˜λ°(Procedural Programming)

절차적 ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 물이 μœ„μ—μ„œ μ•„λž˜λ‘œ 흐λ₯΄λŠ” κ²ƒμ²˜λŸΌ 순차적인 μ²˜λ¦¬κ°€ μ€‘μš”μ‹œλ˜λ©° ν”„λ‘œκ·Έλž¨ 전체가 유기적으둜 μ—°κ²°λ˜λ„λ‘ λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž˜λ° 기법이닀.

  • μ–Έμ–΄: C

 

1) μž₯점

μ»΄ν“¨ν„°μ˜ μž‘μ—… 처리 방식과 μœ μ‚¬ν•˜κΈ° λ•Œλ¬Έμ— 객체지ν–₯ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것에 λΉ„ν•΄ 더 빨리 μ²˜λ¦¬λ˜μ–΄ μ‹œκ°„μ μœΌλ‘œ μœ λ¦¬ν•˜λ‹€.

 

2) 단점

  • ν”„λ‘œκ·Έλž¨ 뢄석이 μ–΄λ €μ›Œ 디버깅이 νž˜λ“€λ‹€.
  • μœ μ§€ λ³΄μˆ˜λ‚˜ μ½”λ“œμ˜ μˆ˜μ •μ΄ μ–΄λ ΅λ‹€.

 

2. 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό μΆ”μƒν™”μ‹œμΌœ μƒνƒœ(속성, μ• νŠΈλ¦¬λ·°νŠΈ)와 ν–‰μœ„(μ—°μ‚°)λ₯Ό κ°€μ§„ ν•˜λ‚˜μ˜ λ…λ¦½λœ 객체λ₯Ό λ§Œλ“€κ³  κ·Έ 객체듀 κ°„μ˜ 유기적인 μƒν˜Έμž‘μš©μ„ 톡해 λ‘œμ§μ„ κ΅¬μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 방법이닀.

  • ν˜„μ‹€ μ„Έκ³„μ˜ 개체λ₯Ό κΈ°κ³„μ˜ λΆ€ν’ˆμ²˜λŸΌ ν•˜λ‚˜μ˜ 객체둜 λ§Œλ“€μ–΄ 기계적인 λΆ€ν’ˆλ“€μ„ μ‘°λ¦½ν•˜μ—¬ μ œν’ˆμ„ λ§Œλ“€ 듯이 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•  λ•Œ 객체듀을 μ‘°λ¦½ν•΄μ„œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  수 μžˆλ„λ‘ ν•œ 방법이닀.
  • μ–Έμ–΄: C++, JAVA

 

1) Class와 Object

 

Class와 Object

 

  • 클래슀(Class): μ–΄λ–€ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 데이터λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ 좔상화(Abstract)λ₯Ό 거쳐 집단에 μ†ν•˜λŠ” 속성(attribute)κ³Ό ν–‰μœ„(behavior)λ₯Ό λ³€μˆ˜μ™€ λ©”μ„œλ“œλ‘œ μ •μ˜ν•œ κ²ƒμœΌλ‘œ 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 메타 정보라고 λ³Ό 수 μžˆλ‹€.
  • 객체(Object): ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ 것을 ν† λŒ€λ‘œ μ‹€μ œ(Instance) λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ κ²ƒμœΌλ‘œ μ‹€μ œ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” 데이터이닀.

 

- 클래슀(Class) = κ°œλ…(Concept) = νƒ€μž…(Type)
- κ°μ²΄(Object) = 싀체(Instance) = λ³€μˆ˜(Variable)
- 속성(Attribute) = Data = Member Variable = State = Field
- λ™μž‘(Behavior) = Operation = Member Function = Method

 

2) νŠΉμ§•

  • 좔상화(Abstraction): λΆˆν•„μš”ν•œ 뢀뢄은 μƒλž΅ν•˜κ³  객체의 속성 쀑 μ€‘μš”ν•œ κ²ƒμ—λ§Œ 쀑점을 두어 λͺ¨λΈν™” ν•˜λŠ” κ²ƒμœΌλ‘œ λ°μ΄ν„°μ˜ κ³΅ν†΅λœ μ†μ„±μ΄λ‚˜ κΈ°λŠ₯을 λ¬Άμ–΄ 슈퍼 클래슀λ₯Ό μ„ μ •ν•˜λŠ” κ°œλ…μ΄λ‹€.
  • μΊ‘μŠν™”(Encapsulation): 데이터와 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν΄λž˜μŠ€λΌλŠ” μΊ‘μŠμ— λΆ„λ₯˜ν•΄μ„œ λ„£λŠ” 것이닀. μΊ‘μŠν™”λœ 객체의 μ„ΈλΆ€ λ‚΄μš©μ„ 외뢀에 은폐(정보 은닉)ν•˜κ³  μžμ‹ μ˜ μ—°μ‚°λ§Œ 접근을 ν—ˆμš©ν•˜μ—¬ 데이터λ₯Ό λ³΄ν˜Έν•œλ‹€. 뿐만 μ•„λ‹ˆλΌ 객체 μž¬μ‚¬μš©μ„±μ΄ μ›ν™œν•΄μ§„λ‹€.
  • 상속성(Inheritance): 이미 μ •μ˜λœ μƒμœ„(λΆ€λͺ¨) 클래슀의 λͺ¨λ“  속성과 연산을 ν•˜μœ„(μžμ‹) ν΄λž˜μŠ€κ°€ λ™μΌν•˜κ²Œ μ‚¬μš©ν•˜λŠ” κ²ƒμœΌλ‘œ μ€‘λ³΅λ˜λŠ” 속성과 κΈ°λŠ₯을 반볡적으둜 κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ μ‰½κ²Œ μ μš©ν•  수 μžˆλ‹€.
  • λ‹€ν˜•μ„±(Polymorphism): 상속과 μ—°κ΄€μ΄ μžˆλŠ” κ°œλ…μœΌλ‘œ ν•œ κ°μ²΄κ°€ λ‹€λ₯Έ μ—¬λŸ¬ ν˜•νƒœμ˜ κ°μ²΄λ‘œ μž¬κ΅¬μ„±λ˜λŠ” κ²ƒμ„ λ§ν•œλ‹€. 즉, λ™μΌν•œ μš”μ²­μ΄ 듀어왔을 λ•Œ 그것을 κ΅¬ν˜„ν•˜λŠ” 방법에 차이λ₯Ό 두어 λ‹€λ₯Έ κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄ λ‚΄λŠ” κ²ƒμœΌλ‘œ λŒ€ν‘œμ μΈ 예둜 μ˜€λ²„λΌμ΄λ”©, μ˜€λ²„λ‘œλ”©μ΄ μžˆλ‹€.

 

3) μž₯점

  • μ½”λ“œ μž¬μ‚¬μš©μ„± 증가와 μ‹œμŠ€ν…œ ν™•μž₯ 용이: 이미 λ§Œλ“€μ–΄μ§„ 클래슀λ₯Ό κ°€μ Έμ™€μ„œ μ‚¬μš©ν•˜κ±°λ‚˜ 상속을 톡해 ν™•μž₯ν•  수 μžˆλ‹€.
  • μ‰¬μš΄ μœ μ§€ 보수: μˆ˜μ •ν•΄μ•Ό ν•  뢀뢄이 클래슀 내뢀에 있기 λ•Œλ¬Έμ— ν•΄λ‹Ή λΆ€λΆ„λ§Œ μˆ˜μ •ν•˜λ©΄ λœλ‹€.
  • λŒ€ν˜• ν”„λ‘œμ νŠΈμ— 적합: 클래슀 λ‹¨μœ„λ‘œ λͺ¨λ“ˆν™” μ‹œμΌœμ„œ κ°œλ°œν•  수 μžˆμ–΄μ„œ 업무 λΆ„λ‹΄ν•˜κΈ° 쉽닀.

 

4) 단점

  • 처리 속도가 μƒλŒ€μ μœΌλ‘œ λŠλ¦¬λ‹€.
  • 섀계 μ‹œ λ§Žμ€ λ…Έλ ₯κ³Ό μ‹œκ°„μ΄ ν•„μš”ν•˜λ‹€.

 

5) getterλ‚˜ setterλ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”?

보톡 멀버 λ³€μˆ˜λŠ” private μ ‘κ·Ό μ§€μ •μžλ‘œ μ„€μ •ν•˜κ³  이 λ³€μˆ˜λ₯Ό μ΄μš©ν•˜λŠ” 멀버 ν•¨μˆ˜λŠ” public μ ‘κ·Ό μ§€μ •μžλ‘œ μ„€μ •ν•œλ‹€. μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•˜λ©΄ λ¬΄λΆ„λ³„ν•œ μˆ˜μ •μœΌλ‘œ μ˜λ„λ˜μ§€ μ•Šμ€ 값이 멀버 λ³€μˆ˜μ— μ €μž₯될 수 μžˆλ‹€. κ·Έλž˜μ„œ μ΄λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 멀버 ν•¨μˆ˜λ‘œ 멀버 λ³€μˆ˜μ— μ ‘κ·Όν•˜λ©΄ μ˜ˆμ™Έ μ²˜λ¦¬λ‚˜ 사전 처리둜 객체의 무결성을 보μž₯ν•  수 μžˆλ‹€.

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ Language' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • 컴파일 κ³Όμ •
  • λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)의 κ°œλ…κ³Ό ν•΄κ²° 방법
  • 인터프리터(Interpreter)와 컴파일러(Compiler)
  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°(Functional Programming)
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)
μƒλ‹¨μœΌλ‘œ

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