Skip to content

Latest commit

Β 

History

History
118 lines (106 loc) Β· 5.15 KB

File metadata and controls

118 lines (106 loc) Β· 5.15 KB

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

  • ν˜„μ‹€μ„Έκ³„κ°€ 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μ— μ˜ν•΄ μš΄μ˜λ˜λ“―, ν”„λ‘œκ·Έλž¨λ„ κ°μ²΄λΌλŠ” λ…λ¦½λœ λ‹¨μœ„λ‘œ ꡬ성해 객체듀 κ°„ μƒν˜Έμž‘μš©μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ„λ‘ ν”„λ‘œκ·Έλž¨ 개발 방법

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

  • 절차 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°
    • 데이터와 ν•¨μˆ˜ 뢄리
    • ν•¨μˆ˜ μ€‘μ‹¬μ˜ ν”„λ‘œκ·Έλž˜λ°
    • 순차적 흐름 μ€‘μ‹œ
    • ν”„λ‘œκ·Έλž˜λ°μ˜ μˆ˜μ •λ  λ•Œ 전체에 영ν–₯ λ―ΈμΉ  κ°€λŠ₯성이 λ†’μŒ

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

  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
    • 순수 ν•¨μˆ˜
    • 곡유 μƒνƒœ, λ³€κ²½ κ°€λŠ₯ν•œ 데이터, λΆ€μž‘μš© μ§€μ–‘

ꡬ성 μš”μ†Œ

  • ν˜„μ‹€ μ„Έκ³„μ˜ 객체 (Object)
    • μ‹€μƒν™œμ— μ‘΄μž¬ν•˜λŠ” λͺ…μ‚¬ν˜•μ˜ λͺ¨λ“  싀체
    • 사물, κ°œλ… λ“±
    • 식별 κ°€λŠ₯ν•˜λ©°, **κ΄€λ ¨λœ 정보 (속성)와 ν–‰μœ„ (κΈ°λŠ₯)**을 외뢀에 제곡
    • e.g. 학생, 이름, ν•™κ³Ό, 성적, μˆ˜κ°•
  • 클래슀 (Class)
    • 객체 좔상화
    • ν˜„μ‹€ μ„Έκ³„μ˜ 객체λ₯Ό ν”„λ‘œκ·Έλž¨μ μœΌλ‘œ ν‘œν˜„ν•œ 청사진
    • 정보 μ €μž₯을 μœ„ν•œ λ³€μˆ˜μ™€ κΈ°λŠ₯을 μ •μ˜ν•œ λ©”μ†Œλ“œλ‘œ ꡬ성
    • c.f. λ©”μ†Œλ“œ (method) vs ν•¨μˆ˜ (function) (좜처)
      • λ©”μ†Œλ“œλŠ” 객체 κ΄€λ ¨
      • ν•¨μˆ˜λŠ” 객체와 독립적
    • e.g. 학생 ν΄λž˜μŠ€μ— 이름, ν•™κ³Ό 속성과 μΆœμ„ν•˜κΈ°, μ‹œν—˜ (쀑간고사/기말고사) 보기 κΈ°λŠ₯ μ •μ˜
      class Student:
          # μƒμ„±μž : μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ΄ˆκΈ°ν™”
          # self (this) : ν˜„μž¬ μ‹€ν–‰ 쀑인 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜λŠ” 데 μ‚¬μš©
          def __init__(self, name, major):
              self.name = name
              self.major = major
      
          def attend(self, date, class_name):
              print("{0}일 {1} μˆ˜μ—…μ— {2}κ°€ μΆœμ„ν–ˆμŠ΅λ‹ˆλ‹€.", date, class_name, self.name)
      
          def take_exam(self, class_name, exam_type):
              print("{0}κ°€/이 {1} μˆ˜μ—… {2}에 μ‘μ‹œν–ˆμŠ΅λ‹ˆλ‹€.", self.name, class_name, exam_type)
      
  • μΈμŠ€ν„΄μŠ€ (Instance)
    • μ†Œν”„νŠΈμ›¨μ–΄ 객체
    • ν΄λž˜μŠ€λ‘œλΆ€ν„° λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 싀체
    • 고유 μƒνƒœ 정보λ₯Ό 가짐
    • ν΄λž˜μŠ€μ— μ •μ˜ν•œ κΈ°λŠ₯ μˆ˜ν–‰ κ°€λŠ₯
    student = Student('LEE SEUNGEUN', 'Philosophy')
    
  • λ©”μ‹œμ§€
    • λ©”μ‹œμ§€ μ†‘μˆ˜μ‹ μ„ 톡해 μΈμŠ€ν„΄μŠ€ μƒν˜Έμž‘μš©

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

  1. 객체 λͺ¨λΈλ§
  2. 클래슀 μ •μ˜
  3. μΈμŠ€ν„΄μŠ€ 생성 및 μ‚¬μš©

객체 섀계

  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν΄λž˜μŠ€κ°€ μ •μ˜λ˜λ©΄ 클래슀 λ™μž‘ 방식을 μ•Œ ν•„μš” 없이 μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€μΈ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ°λ§Œ ν•˜λ©΄ 됨 (객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν΄λž˜μŠ€λŠ” λΈ”λž™λ°•μŠ€μ— ν•΄λ‹Ή)
  • 섀계 절차
    1. 객체 후보 μΆ”μΆœ
      • κ°μ²΄λŠ” 주둜 λͺ…μ‚¬ν˜•μž„
    2. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 식별
      • ν•΄λ‹Ή 객체가 μž‘μ—…ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 정보λ₯Ό μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‘œ μ„€μ •
    3. μΈν„°νŽ˜μ΄μŠ€ 섀계
      • 객체에 κ΄€λ ¨λœ λ™μ‚¬ν˜• (λ™μž‘)을 κ²€ν† ν•΄ μΈν„°νŽ˜μ΄μŠ€ 섀계
    4. μ£Όμš” λ©”μ†Œλ“œ μž¬μ •λΉ„
      • λ‹€λ₯Έ 객체와 μƒν˜Έμž‘μš©ν•˜λŠ” λ©”μ†Œλ“œ 등은 ν•˜ν–₯식 섀계 (top-down desing)κ³Ό 단계별 κ°œμ„  (stepwise refinement)λ₯Ό 톡해 살을 λΆ™μž„
    5. 섀계 반볡 κ²€ν† 
      • μƒˆλ‘œμš΄ ν΄λž˜μŠ€μ™€ 기쑴의 클래슀λ₯Ό μ™”λ‹€κ°”λ‹€ ν•˜λ©° κ²€ν† 
    6. λŒ€μ•ˆ 탐색
    7. λ‹¨μˆœν™”
      • 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” κ°€μž₯ λ‹¨μˆœν•œ 방법 κ³ λ―Ό

객체지ν–₯ κ΄€λ ¨ κ°œλ…

  • μΊ‘μŠν™” (Encapsulation)
    • 객체가 μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€μ™€ 객체의 상세사항에 λŒ€ν•œ κ΅¬ν˜„μ„ ꡬ뢄
    • μž₯점
      • λͺ¨λ“ˆν™” κ°€λŠ₯
      • μž¬μ‚¬μš©μ„±μ„ λ†’μž„
    • μΊ‘μŠν™” vs 은닉화 (Data Hiding)
      • 데이터에 private λ˜λŠ” protected μ ‘κ·Ό μ œν•œμžλ₯Ό λΆ™μž„μœΌλ‘œμ¨ 데이터에 λŒ€ν•œ 직접적인 접근을 막고, λ©”μ†Œλ“œλ‘œμ¨ 데이터에 μ ‘κ·Όν•˜λ„λ‘ 함
      • λ©”μ†Œλ“œλ‘œμ¨ 데이터 μ ‘κ·Όν•˜λ„λ‘ ν•  경우 λ³€μˆ˜μ— 값을 ν• λ‹Ήν•˜κΈ° μ „ μž…λ ₯ 데이터λ₯Ό 검증할 수 μžˆλ‹€λŠ” μž₯점이 있음
  • λ‹€ν˜•μ„± (Polymorphism)
    • 같은 μ„ μ–ΈλΆ€ (signature)λ₯Ό κ°€μ§„ λ©”μ†Œλ“œλ₯Ό μ—¬λŸ¬ ν΄λž˜μŠ€κ°€ κ΅¬ν˜„ν•¨
    • λ©”μ†Œλ“œμ˜ μ„ μ–ΈλΆ€ (signature)
      # Python
      def attend(self, date, class_name):
      
      // Java
      public static final void main(String [] args) { ... }
      
    • μž₯점
      • ν”„λ‘œκ·Έλž¨μ„ μœ μ—°ν•˜κ²Œ λ§Œλ“€μ–΄μ€Œ
    • μžλ°”μ˜ 경우 μ˜€λ²„λΌμ΄λ”© (상속 κ΄€λ ¨)κ³Ό κ΄€λ ¨
  • 상속 (Inheritance)
    • μƒˆλ‘œμš΄ 클래슀 (ν•˜μœ„ 클래슀 (subclass)κ°€ 됨)κ°€ 기쑴의 ν΄λž˜μŠ€λ‘œλΆ•ν„° λ‚˜μ˜΄
    • μž₯점
      • κΈ°μ‘΄ 클래슀의 μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 있음
    # Python
    class SuperClass:
      def __init__(self):
        self.super_instance_variable = 'I am super'
    
      def reusable_method(self):
        print('hi')
    
    class SubClass(SuperClass):
      def __init__(self, sub_instance_variable):
        super(self)
        self.sub_instance_variable = sub_instance_variable
    
    
    • κ°•ν•œ κ²°ν•© vs λŠμŠ¨ν•œ κ²°ν•©