개발자 하고 싶다!!!

1. 공부한 내용

 1) Class(객체)라는 개념 이해

 2) Class(객체) 생성 및 활용

 3) 객체 지향 프로그래밍을 해야 하는 이유


2. 의미/중요한 부분

 1) 객체 지향 프로그래밍(Object Oriented Programming)이란, 객체(object = class+instance)를 사용하는 프로그래밍 방식

 2) 모듈과 다르게 객체의 class 에는 관련되어 있는 함수(메소드) 뿐만 아니라 관련된 변수도 포함되어 있음

     예를 들어, ruby의 내장 class인 string에는 upcase(대문자 표시)와 reverse(문자 반대로 표시) 등의 함수가 존재

 3) 인스턴스(instance)에는 해당 class가 가지고 있는 함수와 변수를 가지고 있으며, 거기에 대해서 인스턴스 만의 값(인스턴스 변수)이 존재

 4) class에 존재하는 함수(메소드)에서 인스턴스 변수를 사용하려면, 생성자(__init__)에서 매개 변수로 self를 지정, 각 메소드에서 활용

 5) 객체 지향 프로그래밍을 해야 하는 이유

 - 여러 개의 메소드(함수)를 하나의 class으로 묶어 연관성을 잘 나타내서 가독성을 높힐 수 있음 (class의 메소드는 인스턴스로 복제 되기 때문)

 - 프로그램이 복잡해질 경우, 기존에 정의한 여러 개의 메소드(함수)와의 중복/충돌이 일어나는 걸 미연에 방지할 수 있음

   즉, 객체(class) 라는 block으로 묶여져 있어서 안전하게 보관할 수 있음 


3. 실습 내용 

 No

 입력 코드

결과 

 설명

class Cal(object): 

    def __init__(self, v1, v2): 

        self.v1 = v1

        self.v2 = v2


    def add(self): 

        return self.v1 + self.v2

        

    def subtract(self):

        return self.v1 + self.v2


c1 = Cal(10,10)

print(c1.add())

print(c1.subtract())


c2 = Cal(30,20)

print(c2.add())

print(c2.subtract())

20

0

50

10

1. 객체(class) 생성


 1) class의 첫 번째 메소드(함수), 생성자 (__init__)

 - 모든 class에는 class 안의 메소드가 호출되기 전에 공통으로 실행되는 

   생성자(init)가 존재하며 <def __init__>의 첫번째 매개 변수로는 <self>

 - <self>는 다른 이름으로도 지정 가능하며, class의 다른 메소드에서 

   인스턴스 변수를 인식, 활용할 수 있도록 하는 역할을 함

 - <__init__>에 있는 변수(v1, v2)는 다른 메소드에서 사용 불가

   <self.v1 = v1>과 같이 인스턴스 변수를 지정해야 함


 2) 객체 안의 메소드 생성

 - 해당 객체 안에[ 메소드를 생성할 때는 <def add(self):> 방식으로 입력,

   생성자(init)에서 지정한 인스턴스 변수를 활용함


2. 생성한 객체(claas)를 활용한 인스턴스 생성


 1) <Cal(10,10)>은, <Cal> class에 10,10이라는 인스턴스를 생성한 것이며,

    <c1 = Cal(10,10)>로서 c1가 해당 cal와 값을 가진 인스턴스 변수가 됨

 2) <c1.add()>은, 인스턴스 변수(c1)에 Cal의 class에 있는

     add 메소드를 호출, 인스턴스 변수에 들어있는 값을 이용해 연산됨



4. 궁금점/감상

 1) 역시나 이해하는 데에 많은 시간이 걸린 객체 지향 프로그래밍...ㅠㅠ

 2) 모듈화 해서 사용하는 것과의 차이는, 객체화(class)하여 충돌을 방지할 수 있기 때문...이 가장 큰가? (모듈에도 변수 넣을 수 있지 않나?) 더 공부가 필요하다!



'1_Python' 카테고리의 다른 글

15. 객체와 변수  (0) 2019.01.19
13. 모듈 (Module)  (0) 2019.01.12
12. 함수  (0) 2019.01.06
11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15