section 5 computer science
sprint 1-3 OOP
OOP(Object Oriented Programming)
말 그대로 객체지향 프로그래밍인데 '객체 지향'이 도대체 뭔가? 절차 지향 프로그래밍과 비교를 해보자.
아래 그림처럼 수업을 등록하고 듣고 취업을 하는 절차가 있는 것처럼 위에서부터 순 절차 지향 프로그래밍은 순차적으로 코딩을 하는 것이라고 이해했다. 반면 개체 프로그래밍은 부트캠프라는 것을 설계할 때 그 안에 어떤 요소들이 있는지 파악하고 그 요소(객체)를 정의하고 방식이라고 이해했다.
수업시간에 예시를 들었던 코드를 보면 더 이해가 잘 된다.
# 절차 지향
# 아래처럼 모든 내용을 변수에 저장하고 순차적으로 코딩
cat_name = '아리'
cat_color = 'brown and white'
cat_age = 4
cat_weight = 3.4
print('my cat is ', cat_name) # my cat is 아리
cat2_name = '동동'
cat2_color = 'black and white'
cat2_age = 4
cat2_weight = 5.3
print('my cat is ', cat_name)
# 객체 지향
# 클래스와 메소드를 정의
class Cat:
def __init__(self, name, color, age, weight):
self.name = name
self.color = color
self.age = age
self.weight = weight
def my_cat_is(self):
print('my cat is ', self.name)
ari = Cat('아리', 'brown and white', 4, 3.4)
print(ari.name) # '아리'
print(ari.my_cat_is()) # my cat is 아리
절차 지향은 위의 예시처럼 하나하나 다 변수로 저장하고 순서대로 실행을 해야하는데 객체지향은 클래스와 메소드를 먼저 정의해준 후 그 클래스에 해당하는 새로운 개체(인스턴스)를 생성해주면 전부 다 정의하지 않아도 된다.
데이터의 양이 많아지면서 객체지향 프로그래밍(OOP)가 더 각광받기 시작했다고 한다.
OOP 구성
1. 캡슐화
- 타임캡슐을 생각해보자. 타임캡슐 안에 우리의 추억들 차곡차곡 담아서 저장한다.OOP의 캡슐화도 이런 식으로 이해했다.
- 필요한 속성(변수)와 함수를 클래스라는 하나의 캡슐에 다 묶어서 선언하는 것이다.
- 위의 예시처럼 Cat이라는 클래스(캡슐) 안에 name, color, age, weight와 같은 속성과 my_cat_is()와 같은 함수가 함께 묶여 있다.
(질문 : 수업 자료 중 '캡슐화형태로 코드를 작성하지 않으면 특정 기능(함수, 변수)에 직접 접근하게 되는 상황이 된다.'라는 내용이 있는데 무슨 말인지 감은 오는데 어떻게 설명해야될지 잘 모르겠다. 좀 더 생각해보자.)
2. 추상화
- 추상화는 복잡한 내용에서 핵심적인 개념 및 기능을 요약하는 것을 의미한다고 한다.
- 예를 들어 고양이라는 복잡한 내용에서 핵심적인 이름, 나이, 털색, 몸무게 등을 가져와서 코드로 작성하는 것 정도로 이해했다.
- 클래스는 하나의 설계도 같은 것인데 일단 복잡한 설계도를 추상 클래스로 선언을 하고 이 추상 클래스를 상속받은 자식 클래스에서 실제 기능이 구현되는 식으로 사용이 된다고 한다.
- 예를 들어 파이썬에서 Exception은 추상클래스인 BaseException의 상속을 받아서 사용이 된다.
3. 상속
- 부모 클래스에서 선언된 속성이나 함수를 상속받으면 자식클래스는 그것들을 선언하지 않아도 쓸 수 있다.
4. 다형성
- 다형성은 부모 클래스에서 상속받은 속성이나 함수를 그대로 사용하지 않고 변형해서 사용할 수도 있다는 것이다.
파이썬이 객체지향언어라는 것은 어디선가 들어서 객체지향이라는 단어는 낯설지 않았지만 실제 그 내용을 공부해보니까 하루만에는 이해가 잘 되진 않는다. 이렇게 정리를 해봤지만 이게 맞는건지..
OOP에서 가장 중요한 것은 클래스라는데 이걸 글로 보면 이해가 되는 듯 하다가 실제로 해보면 온갖 에러를 만난다. section3에서도 좀 힘들었던.. 코드를 직접 돌려가면서 공부를 더 해야겠다.
'코드스테이츠 AI 부트캠프' 카테고리의 다른 글
keras_segmentation 튜토리얼 따라하기 (0) | 2021.07.06 |
---|---|
코드스테이츠 AI 부트캠프 section 1 review (0) | 2021.04.01 |