본문 바로가기

코드스테이츠 AI 부트캠프

OOP 정리

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에서도 좀 힘들었던.. 코드를 직접 돌려가면서 공부를 더 해야겠다.