1. 객체 지향 프로그래밍(OOP)
절차 지향 프로그래밍
: 1990년대 이전 언어는 대부분 절차지향 프로그래밍
ex. C언어
ex. 냉장고에 코끼리를 넣는다
1. open 냉장고
2. insert 코끼리 into 냉장고
3. close 냉장고
객체 지향 프로그래밍
: 객체 단위로 데이터와 기능(함수)를 하나로 묶어서 쓰는 언어
자동차
1)승용 자동차
(1)개인 자동차
: 나의 자동차, 너의 자동차 [인스턴스]
(2)택시
(3)버스
2)산업용 자동차
=> 1)과 (1),(2),(3), 그 안의 항목들은 각각 상속 관계를 가진다
객체 지향 프로그래밍 핵심
: class와 object
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
'패캠 네카라쿠배 도전: HTML CSS' 카테고리의 다른 글
[패캠 네카라쿠배 2기] 2차 테스트 - 8일차 데이터 구조6: 해쉬 테이블 (0) | 2021.06.23 |
---|---|
[패캠 네카라쿠배 2기] 2차 테스트 - 8일차 알고리즘 복잡도 표현 방법 (0) | 2021.06.23 |
[패캠 네카라쿠배 2기] 2차 테스트 - 7일차 (0) | 2021.06.22 |
[패캠 네카라쿠배 2기 도전] CSS/속성 - 글꼴, 문자 (0) | 2021.06.01 |
[패캠 네카라쿠배 2기 도전] CSS/속성 - 박스 모델 (0) | 2021.05.31 |