0. 리스트와 함수
리스트 : 변수(데이터)를 모으는 한 가지 방법
함수 : 코드를 끊임없이 재사용할 수 있는 단위로 모으는 방법
1. 객체 (Object)
- 객체는 실제로 존재하는 모든 것들입니다.
- 객체는 함수와 변수(데이터)를 함께 묶는 방법의 하나입니다.
- 프로그래밍 용어로 파이썬은 객체지향적(object-oriented)라고 표현합니다. 이는 파이썬 내에서 객체를 사용하는 것이 가능하다는 뜻입니다.
- 속성 (attribute) : 객체의 특징 또는 객체에 관해 알고 있는 사항. 숫자, 문자열 등과 같은 정보로 구성되어 있습니다. 즉 속성은 객체 안에 포함된 변수(데이터)입니다.
- 메서드 (method) : 파이썬에서 행동 또는 객체에 대해, 객체를 통해 할 수 있는 것. 어떤 일을 하기 위해 호출(call)할 수 있는 코드 덩어리입니다. 즉 메서드는 객체 안에 포함된 함수입니다.
- 객체 = 속성(변수) + 메서드(함수) : 그러므로 객체는 어떤 것에 대한 속성과 메서드를 함께 모으는 한 가지 방법입니다. 여기서 속성은 정보고, 메서드는 행동입니다.
- object.attribute 나 object.method( )로 객체의 속성과 메서드를 사용합니다.
*사전적 의미의 객체 지향 프로그램 (출처 : 위키백과, 객체 지향 프로그래밍)
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래임의 패러다임 중 하나입니다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있습니다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됩니다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있습니다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 합니다.
<기본 구성 요소>
- 클래스(Class) - 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것으로 객체지향 프로그램의 기본적인 사용자 정의 데이터형(user defined data type)이라고 할 수 있습니다. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 합니다. 프로그래머는 아니지만 해결해야 할 문제가 속하는 영역에 종사하는 사람이라면 클래스를 사용할 수 있습니다.
- 객체(Object) - 클래스의 인스턴스(실제로 메모리상에 할당된 것)입니다. 객체는 자신 고유의 속성(attribute)을 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있습니다. 객체의 행위는 클래스에 정의된 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용합니다.
- 메서드(Method), 메시지(Message) - 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메시지라 할 수 있습니다. 메서드는 한 객체의 서브루틴(subroutine) 형태로 객체의 속성을 조작하는 데 사용됩니다. 또 객체 간의 통신은 메시지를 통해 이루어집니다.
사람이 말로 표현 가능한 모든 것을 객체라 할 수 있다.
** 객체 만드는 순서 **
- step 1. class로 설계하기 : 객체가 어떤 모습이고 어떻게 행동하는지 (객체의 속성과 메서드) 정의합니다. 객체의 설명이나 설계도를 클래스(class)라고 합니다. 즉 우선 객체를 생성하기 위한 틀인 class를 만들어야 합니다.
- step 2. instance 만들기 : 설계도 클래스를 이용해 실제 객체를 만드는 것입니다. 이때 객체를 해당 클래스의 인스턴스(instance)라고 합니다.
* 객체와 클래스
하나의 붕어빵 틀에 반죽과 여러 가지 앙금을 넣어 가공하면 (1) 팥을 넣은 팥붕, (2) 슈크림을 넣은 슈붕, (3) 붕어를 넣은 붕붕을 만들 수 있습니다. 이 붕어빵처럼 특정한 모양이나 개념으로 존재하는 것을 객체라고 하고 붕어빵 틀처럼 객체를 만들 때 사용하는 것을 클래스라고 합니다. 또한 각각의 다른 앙금들은 객체의 특징을 나타내므로 속성이 됩니다.
*인스턴스와 객체
사실 인스턴스와 객체는 같은 것을 뜻합니다. 보통 객체만 지칭할 때는 그냥 객체라고 부르지만 클래스와 연관지어서 말할 때는 인스턴스라고 부릅니다.
2. step 1 : class를 만들어 설계하기
* 클래스 구성요소 : 클래스 이름, 클래스 메서드(함수)
- step 1 : class에 클래스 이름 지정. 보통 대문자로 시작 [ class 클래스이름 ]
- step 2 : def로 메서드 작성. 메서드의 첫 번째 매개변수는 보통 self를 지정 [ def 메서드(self) ]
3. step 2 : instance 만들기
클래스를 만들었다면 클래스를 이용해 실제 객체를 만들어야 합니다. 이때 객체를 해당 클래스의 인스턴스라고 합니다.
Dog의 인스턴스를 만드려면 다음과 같은 코드가 필요합니다.
[ 인스턴스 = 클래스( ) ]
클래스 Dog에 myDog(객체)이라는 이름을 할당하였는데 이 myDog이 Dog의 인스턴스가 됩니다.
4. 객체의 속성과 메서드 사용하기
아직까지 Dog에 아무런 속성이 없으므로 [ 인스턴스.속성 ]으로 몇 가지 속성을 추가할 수 있습니다.
이런 식으로 객체에 속성을 정의할 수 있습니다.
메서드는 다음과 같이 인스턴스를 통해서 사용할 수 있습니다.
[ 인스턴스.메서드( ) ]
myDog.bark를 입력하니 '멍'이 출력되었음을 볼 수 있습니다.
** 위 예시를 통해 Dog의 클래스를 만들고 이 클래스에 myDog이라는 객체의 이름을 할당한 뒤(인스턴스), myDog의 특징(속성)과 짖는 행동(메서드) 을 출력했습니다!! **
-> 하나의 클래스에 여러개의 메서드를 정의하고 사용할 수도 있습니다.
# class 예시 2
1. Lamp의 클래스를 만듦 : [ class 클래스 이름 ] 입력 후 [ def 메서드(self) ]로 method(행동) 입력
2. 이 클래스에 내가 사용하고자 하는객체의 이름을 할당한 뒤(인스턴스), 특징(속성)과 행동(메서드)을 출력.
여기서 속성은 클래스에 속하지 않고 각 인스턴스에 속하는 것을 볼 수 있습니다. 즉 객체를 생성하고 나서 여러 속성을 채웠어야 했습니다. (각 인스턴스가 서로 다른 속성을 가질 수 있는 것은 바로 이런 이유에서입니다.)
그런데 객체가 생성될 때 객체의 특성을 설정하는 방법이 있습니다. 이를 객체 초기화(initializing)라고 합니다.
이는 다음 포스터에서 자세히 다루도록 하겠습니다.
** self는 인스턴스 자기 자신을 의미합니다. 보통 메서드의 첫 번째 매개변수는 self로 지정해야 합니다. **
self 역시 다음 포스터에서 다루도록 하겠습니다 !
참고문헌
[1] 위렌 산데/ 카터 산데, 헬로! 파이썬 프로그래밍, 위키북스, 2015
[2] 위키백과, 객체 지향 프로그래밍 ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
'프로그래밍 > Python 프로그래밍 기초' 카테고리의 다른 글
8. 파이썬 기초 (파이썬 자료 추상화, 데이터은닉, 다형성, 상속, 오버라이딩, 다중상속 ) (0) | 2021.02.14 |
---|---|
7. 파이썬 기초 (객체 초기화, __itit__, initializing, 특수 메서드, __str()__ , self , class 예시) (2) | 2021.02.11 |
5. 파이썬 기초 (함수, function, def, return value) (0) | 2021.01.24 |
4. 파이썬 기초 (파이썬 반복문, for 반복문, range, while 반복문, break, continue) (0) | 2021.01.22 |
3. 파이썬 기초 (파이썬 조건문, condition, 연산자, if, elif, else) (0) | 2021.01.21 |