[컴퓨터 공학 기본과 파이썬] Python with OOP
2022. 6. 3. 00:19ㆍAI/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
반응형
'AI > Codestates' 카테고리의 다른 글
[자료구조와 알고리즘] DataStructure Fundamenta (0) | 2022.06.08 |
---|---|
[컴퓨터 공학 기본과 파이썬] DataStructure Essential (0) | 2022.06.03 |
[컴퓨터 공학 기본과 파이썬] Problem Solving (0) | 2022.05.31 |
[컴퓨터 공학 기본과 파이썬] Python Programming (0) | 2022.05.30 |
[Deep Learning - CV] Generative Adversarial Network ( GAN ) (0) | 2022.05.17 |