패캠 네카라쿠배 도전: HTML CSS

2차 테스트 - 7일차 객체 지향 프로그래밍

닉네임이 멋이 중헌디 2021. 6. 22. 13:00

1. 객체 지향 프로그래밍(OOP)

절차 지향 프로그래밍 

: 1990년대 이전 언어는 대부분 절차지향 프로그래밍 

ex. C언어 

ex. 냉장고에 코끼리를 넣는다 

1. open 냉장고 

2. insert 코끼리 into 냉장고 

3. close 냉장고 

 

객체 지향 프로그래밍 

: 객체 단위로 데이터와 기능(함수)를 하나로 묶어서 쓰는 언어

자동차 

 1)승용 자동차   

   (1)개인 자동차 

      : 나의 자동차, 너의 자동차 [인스턴스]

   (2)택시

   (3)버스 

 2)산업용 자동차 

=>  1)과 (1),(2),(3), 그 안의 항목들은 각각 상속 관계를 가진다 

 

객체 지향 프로그래밍 핵심 

: classobject 

1)class란?

속성(attribute)동작(method)을 갖는 데이터 타입 

속성변수와 유사 

동작함수와 유사 

 

2)object란? 

선언된 클래스를 기반으로 만들어진 실체 (객체(object) 또는 인스턴스라고 함) 

하나의 클래스 설계도를 기반으로 수많은 객체 생성이 가능함 

 

객체지향 프로그램 작성 방법 

1. 클래스 설계 

2. 설계한 클래스를 기반으로 클래스를 코드로 작성 

3. 클래스를 기반으로 필요한 객체 생성 

4. 해당 객체의 attribute와 method를 조작하여 프로그램 수행 

 

class (설계도) object(객체) attribute(변수) method(함수) 

자동차 설계도 자동차들 

 

Class와 Object

예제: 사각형 만들기

1. 객체 생성 전에 미리 class 선언

class Quadrangle: // class에게 유일한 이름을 지어준다. CapWords 방식 (각 단어의 첫 문자를 대문자로 하는)

 pass  // 아직 attribute/method를 안 넣은 상태이므로,

            클래스에 내용이 없기에 임의로 pass(아무것도 수행하지 않는 문법, 임시코드) 넣어 선언 끝낸다

 

class SingleWord: 

 pass 

 

dir (SingleWord) // 관련 디렉토리(모듈)을 넣는다

 

클래스명(object)로 쓸 수도 있음. 파이썬 3에서는 클래스명: 과 동일 // 클래스를 만드는 다른 방법

class Quadrangle(object): 

  pass 

 

dir(Quadrangle)

 

2.객체 만들기

만들어진 클래스로 객체를 만들 수 있음 

객체도 변수/함수/클래스와 마찬가지로 유일한 이름을 지어줘야 함 

함수와 마찬가지로 인수를 넣을 수 있음 

square = Quadrangle( ) // square는 Quadrangle의 인스턴스 cf. type(square) => __main__.Quadrangle

dave = Quadrangle( ) // type(dave) => __main__.Quadrangle

dir(dave) 

 

3.attribute 넣어보기 

-만들고자 하는 속성: width, height, color 등 

class Quadrangle: // 클래스에 넣으면 객체에서 접근 가능하다

  width = 0 

  height = 0 

  color = "black" 

 

square1 = Quadrangle( )

square2 = Quadrangle( )

 

4. 객체의 attribute 

square1.color // 'black' 

square2.color = 'red' // square2.color -> 'red'

 

// 기본값으로 클래스에 설정해놓은 attribute 

// 새로 설정 가능

// 원래 있는 디렉토리에 속성들이 추가된다 

 

5. method 넣어보기 

만들고자 하는 method 생각해보기 

사각형 넓이 구하기 

class Square: 

 width = 0 

 height = 0 

 color = "black" 

 

def get_area(self): // method, self는 인자가 없을 때도 쓴다 

 return self.width * self.height

 

def set_area(self, data1, data2, data3): // self는 여기서 인자로 역할을 하고 있지 않음, width, height를 설정한다 

  self.width = data1

  self.height = data2 

  self.color = data3

 

파이썬 method는 항상 첫번째 파라미터로 self 사용 

 - 인자가 필요없을 때에도 self 사용 

클래스의 attribute는 내부에서 접근시, self.attribute명으로 접근 

 

6. 객체의 method 접근하기 

객체명.method명 

square = Square() 

square.set_area(5,5) 

-> def set_area(self, data1, data2) 에서 self로 square가 들어가고 data1 = 5, data2 = 5으로 들어가진다

square.width // 5 

square.get_area() // 25  괄호() 잊지 말기!

 

method 호출 시, 첫번째 인자로 객체 자신이 넣어지기 때문에

self를 method 첫번째 인자로 항상 넣어야 한다 

 

예제로 이해하는 객체 지향 문법 (생성자와 소멸자 메서드)

- 생성자는 객체 생성 시 자동 호출, 소멸자는 객체 소멸 시 자동 호출 

 

생성자 : __init__(self) 

method이므로 첫번째 인자는 self로 설정 

생성자에서는 보통 해당 클래스가 다루는 데이터 정의 

클래스에서는 self.attribute명을 사용할 수 없다 (self는 객체를 나타내기 때문에) 

생성자에서 해당 클래스가 다루는 데이트를 정의하는 경우도 많다

 

소멸자: __del__(self)

method이므로 첫번째 인자는 self로 설정 

클래스 소멸 시 호출 

 

class Square: 

  def __init__(self, width, height, color): 

     self.width = width 

     self.height = height 

     self.color = color 

 

  def __del__(self): 

     print("Square object is deleted") 

 

square = Square(5,5,"black") 

 

객체 삭제 문법 

- del 객체명 

del square 

Square object is deleted