티스토리 뷰

7.1 객체와 클래스(Objects and Classes)

- 객체 지향 프로그래밍(object-oriented programming)은 큰 스케일의 프로그램GUI를 효과적으로 개발 할 수 있게 해준다.

- 루프문이나 선택문을 이용해 간단한 프로그램을 만들 수는 있지만, 규모가 큰 프로그램이나 그래픽 유저 인터페이스(Graphical User Interface,GUI)를 개발하기에는 조금 부족하다.

- 이번 챕터에서는 객체 지향 프로그래밍(object-oriented programming)을 통해 GUI와 큰 규모의 프로그램을 빌드하는데 쓰일 기초를 배울 예정이다.

 

7.2 객체를 위한 클래스 정의하기(Defining Classes for Objects)

- 클래스객체속성(properties)동작(behaviors)을 정의한다.

- 섹션 3.5에서 배운 객체(objects)들과 같이 모든 객체(objects)들은 클래스(class)로 만들어졌다.

- 여기서는 커스텀 클래스(custom classes)를 어떻게 정의하는지 보여줄 예정이다.

- 객체 지향 프로그래밍(object-oriented programming,OOP)는 프로그램을 만들기 위한 객체 사용을 포함한다.

- 현실 세계에서 객체는 확연히 식별 가능한 하나의 독립체를 의미한다.

- 예를 들어, 학생, 책상, 원, 버튼 대출은 눈에 보이는 객체(object)이다. 각 객체들은 각자의 정체성과 상태, 동작을 가지고 있다.

 

■ 객체의 식별(identity)은 사람의 사회 보장 번호와 같다고 보면 된다. 파이썬은 실행될 때 자동적으로 각 객체에 특별한 id를 할당한다. 이 id객체를 식별하는데 사용된다.

 

객체의 상태(state, properties, attribute)데이터 필드(data field)라는 변수(variables)에 의해 표현된다. 예를 들어 circle 객체는 데이터 필드 radius라는 속성에 의해 원이 만들어 지며, rectangle 객체는 width와 height이라는 데이터 필드에 의해 만들어 진다.

 

■ 파이썬은 객체의 동작(behavior, action)정의하기 위해 메소드(method)를 이용한다. 즉, 객체를 동작(action)시키기 위해 객체에 있는 메소드를 호출한다. 예를 들어, 우린 circle 객체에 getArea() 와 getPerimeter()라는 메소드를 정의 할 수 있다. 그러면 circle 객체는 getArea() 메소드를 이용해 area를 반환 할 수 있고 getPerimeter() 메소드를 이용해 perimeter를 반환 할 수 있게 된다.

 

 

- 동일한 종류의 객체는 같은 클래스(common class)를 사용하여 정의한다.

- 객체(objects)와 클래스(class)의 관계애플파이 레시피와 애플파이와의 관계에 비유할 수 있다.

- 우리는 원하는 만큼 많은 애플파이(객체,objects)를 하나의 레시피(클래스)로 부터 만들어 낼 수 있다.

- 파이썬의 클래스는 데이터 필드를 저장하기 위해 변수(variable)를 사용하고 동작을 수행하기 위해 메소드를 정의 한다.

- 클래스(class)는 일종의 약속(contract)이고, 이를 템플릿(template) 또는 청사진(blueprint)라고 부른다.

 

- 객체는 클래스의 인스턴트이다. 우리는 많은 클래스 인스턴트를 만들 수 있다.

- 클래스의 인스턴트를 만드는 것을 우리는 인스턴트화(instantiation)라고 부른다.

- 용어 객체(objects)와 인스턴트(instant) 종종 구분 짓지 않고 사용한다. 즉, 객체가 인스턴트이고 인스턴트가 객체이다.

 

* 클래스 예시

*클래스(class)는 객체(objects)를 만들기 위한 약속(contract)이다.

 



 

7.2.1 클래스 정의하기 (Defining Classes)

- 클래스(class)는 __init__ 라는 특별한 함수를 제공한다.

- 이 메소드는 생성자(initializer)라고 부르고, 새로운 객체가 만들어 질 때 객체의 상태(state)를 초기화 하는 메소드이다.

- 생성자(initializer)초기화 동작(action)을 하기 위해 만들어 졌다. 예를 들어 초기 값(initial value)을 객체의 데이터 필드에 넣어 만들 때 생성자(initializer)를 이용한다.

 

* 클래스 정의 형식

class ClassName:

initializer

methods

 

- 아래의 Circle 클래스는 class 키워드를 사용, 콜론(:) 뒤에 내용이 따라온다.

- 생성자(initializer)의 이름언제나 __init__이다. * init 앞 뒤에 두 개 _(언더 바)를 꼭 작성해야 한다. *constructor와 구분해야 합니다. 앞의 포스팅에서 각 생성자의 의미를 정리해 놓았습니다.

- 데이터 필드 radius는 생성자(initializer) 안에 만들어져 있다.

- 메소드 getPerimeter와 getArea는 둘레와 넓이를 반환하기 위해 정의 되어있다.

- 생성자, 데이터 필드, 매소드에 관한 자세한 내용은 뒤에 설명할 예정이다.

 

* Circle.py (Circle 객체)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import math
 
class Circle:
    #Circle 객체 만들기
    def __init__(self, radius = 1):
        sef.radius = radius
 
    def getPerimeter(self):
        return * self.radius * math.pi
 
    def getArea(self):
        return self.radius * self.radius * math.pi
 
    def setRadius(self, radius):
        self.radius = radius
cs

 

*

- 클래스 이름을 짓는 방식이 정해져 있는 것은 아니지만, 일반적으로 제일 첫 번째 문자를 대문자로 표기하여 클래스 이름을 짓는다.

ex)Circle, LinkedList, LinearEquation 등

 

참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.


교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다. 

댓글