[컴퓨터 공학 기본과 파이썬] Python with OOP

2022. 6. 3. 00:19AI/Codestates

728x90
반응형

OOP란?

- OOP의 기본 전제는 기능 ( 함수, 변수 ) 재사용이 가능하도록 설계 및 프로그래밍 했는지!

- 프로그래밍에서 사용되는 대부분의 개념은 최소비용으로 최대효율을 얻기위해 개발됨

▶ OOP의 어려운 점

- OOP는 하나의 패러다임일 뿐이기 때문에 기존의 프로그래밍 패러다임들과 우열을 가릴 필요 없음

- OOP는 주관성이 높으므로, 보편적으로 활용되는 개념에 대해 배움

- OOP를 제대로 하는 법은 프로그래밍뿐만 아니라 다양한 도메인에서 재사용 가능한 클래스, 메소드 설계가 중요

▶ OOP의 구성

■ 캡슐화

내부 속성 ( 변수 ) 과 함수를 하나로 묶어서 클래스로 선언하는 일반적인 개념

■ 상속과 포함

- 상속 : "개는 동물이다." 처럼 상위 클래스의 모든 기능 ( 함수, 변수 ) 을 재사용할 수 있다.

# 상속코드

# 클래스 선언
class Person:
    def __init__(self, name):
        self.name = name
        
class Student(Person):      # Person 클래스 상속받음(name 변수를 파라미터로 재사용)
    def study(self):
        print (self.name + " studies hard")

class Employee(Person):     # Person 클래스 상속받음(name 변수를 파라미터로 재사용)
    def work(self):
        print (self.name + " works hard")

- 포함 : "개는 몸을 갖고 있다." 처럼 다른 클래스의 일부 기능 ( 함수 ) 만을 재사용한다.

# 포함코드

# 클래스 선언
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def printPerson(self):
        print('Person_printPerson')

class Student(Person):
    def __init__(self, name, age, id):
        Person.__init__(self, name, age)
        Person.printPerson(self)
        self.id = id

    def test(self, score):
        if score > 90:
            print (self.name + " studies very hard")
       	elif score > 80:
        	print (self.name + " studies hard")
        else:
            print (self.name + " needs supplementary lessons")

■ 추상화

추상화는 복잡한 내용에서 핵심적인 개념 및 기능을 요약하는 것을 말함

  • 기본적으로 추상메소드를 선언하며 실제 실행되는 기능은 보여지지 않음
  • 추상클래스를 사용하는 이유
    • 클래스 또는 함수가 예상했던 것 이상으로 많이 생성되는 경우 추상클래스를 생성하여 핵심적인 기능만 생성해놓음
    • 실제로 동작기능은 추상클래스에서 상속받은 하위클래스의 메소드에서 진행됨
    • 추상클래스의 추상메소드를 활용할 때 장점은 추상클래스를 중심으로 하위클래스의 메소드를 다양하게 생성할 수 있기 때문에, 유지보수를 진행하는 경우 추상클래스만 수정하면 되므로 복잡성을 낮출 수 있음

■ 다형성

같은 종의 생물이지만, 모습이나 고유한 특징이 다양한 성질을 말함

  • OOP에서 다형성은 계층 구조의 상속 관계에서 상속받은 기능 외, 다른 기능을 추가적으로 제공하고자 할 때 사용함
  • 사용 시 장점
    • 프로그램 작성 코드량을 줄여줌
      • 다형성을 잘 쓰면 if/else 문을 많이 줄일 수 있음
    • 코드의 가독성을 높혀줌
728x90
반응형