티스토리 뷰

7.2.2 객체 생성하기(Constructing Objects)

  constructorinitializer를 번역함에 있어 영어로는 간단히 구분이 가능 하지만 한국어로는 간단히 구분히 되지 않아 둘 다 편의상 생성자로 번역하였습니다. 아래의 포스팅을 보기 전에 이 둘의 의미를 아래와 같이 이해하시기 바랍니다.

 

initializer(__init__) : __init__메소드를 사용하여 생성자만든 경우, 이 생성자를 initializer 라고 표현 

constructor : initializer(__init__) 메소드를 이용하여 정의한 생성자사용(use)할 경우, 이 생성자를 constructor 라고 표현. 

 

- 클래스(class)가 정의되어 있을 떄, 클래스 생성자(constructor)이용객체를 만들 수 있다.

- 생성자(constructor)가 하는 일은 다음과 같다.

■ 사용할 클래스의 메모리에 객체를 생성한다.

■ 클래스의 __init__ 메소드호출하여 객체를 초기화한다.

- 생성자(initializer, __init__)를 포함모든 메소드들은 첫번째 매개변수로 self 매개변수를 가지고 있다.

- __init__ 함수의 self 매개변수는 방금 생성된 객체를 자동으로 참조한다..

- self 매개변수의 이름을 직접 정할 수 있지만, 통상적으로 그냥 self라고 쓴다.

 

* 생성자(constructor) 사용(use) 형식

ClassName(arguments)

 

 

*Circle 클래스 (이전 포스트의 Circle.py)

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):
        self.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

 

- 생성자(construtor)를 사용할 떄, 생성자(constructor)의 인자(arguments)들은 self를 제외__init__ 메소드의 매개변수와 일치한다. 위치 인자, 키워드 인자 등

- 예를 들어, line 5의 __init__ 메소드는 __init(self, radius = 1)이라고 정의되어 있다. 우리가 radius = 5 Circle 객체를 만들고 싶다면, Circle(5)라고 작성해야 한다.

- 먼저 Circle 객체가 메모리에 생성되고, 그런 다음 생성자(constructor)가 radius를 5로 설정한다.

- 위 Circle 클래스의 생성자(initializer, __init__)초기값(default)으로 radius = 1을 가지는 것을 의미하고 Circle()이라고 작성하면 Circle 객체의 radius는 1로 초기값이 설정된다. 

 

*Circle(5)를 사용하여 Circle 객체를 만든 모습

 



 

7.2.3 객체의 멤버에 접근하기(Accessing Members of Objects)

- 객체의 멤버란, 객체의 데이터 필드(data field)메소드(method)를 의미한다.

- 이전 포스트에서 객체와 인스턴스(instance)를 구분하지 않은 것 처럼, 각 객체의 데이터필드를 인스턴스 변수(instance variables)라고 부르며, 메소드 역시 인스턴스 메소드(instance method)라고 부른다.

- 객체데이터 필드 메소드접근하기 위해변수객체를 할당해야만 한다.

 

*변수에 객체 할당 형식

objectRefVar = ClassName(arguments)

 

예를 들어,

 

c1 = Circle(5)

c2 = Circle()

 

- 객체의 멤버와 메소드에 접근하기 위해 우리는 점 연산자( . , dot operator)를 사용 할 수 있다. 점 연산자를 객체 멤버 접근 연산자(object member access operator)라고 부르기도 한다.

* 점 연산자(dot operator) 사용 형식

objectRefVa.datafield

objectRefVa.method(args)

 

- Circle 객체를 예로 들어, 아래와 같이 입력하면 Circle 객체의 각 데이터 필드와 메소드에 접근 할 수 있다.

- Circle 클래스를 임포트 한다는 것 잊어서는 안된다.

 

 

- 보통 객체를 생성하여 변수에 할당하는데, 가끔은 객체 차후에 참조할 필요가 없는 경우가 생긴다.

- 그런 경우엔 아래와 같이 변수에 할당할 필요 없이 객체를 만들어 낼 수 있다.

print("Area is ", Circle(5).getArea())

- 위와 같은 방법도 Circle 객체를 생성하며, getArea 메소드를 호출하고 값을 반환한다.

- 이런 방법으로 생성된 객체를 우린 익명 객체(anonymous object)라고 부른다.

 

7.2.4 self 매개 변수(The self Parameter)

- 앞서 언급한 바와 같이, 각 메소드들의 첫번째 매개변수self가 정의되어 있다.

- self 매개변수는 메소드를 구현할 때는 사용하지만, 메소드를 호출 할 때는 사용되지 않는다.

- self는 객체 자기 자신을 참조하는 매개변수이다. (자바로 따진다면 this와 유사하다)

- self를 사용함으로써, 클래스내에 정의한 멤버에 접근 할 수 있다.

- 아래의 예제를 들어, self.x 라고 작성하여 인스턴스 변수인 x에 접근이 가능하고, self.m1()을 사용하여 인스턴스 메소드인 m1()을 호출 할 수 있다.

 

*인스턴스 변수 가용 범위

 

- 인스턴스 변수의 가용 범위는 해당 클래스 전체이다.

- 위 __init__ 메소드에서 self.x인스턴트 변수를 생성한 모습이다. 나중에 m2()에서 지역변수 u를 할당할 때 slef.x로 접근한다.

- 인스턴트 변수 self.y는 m1() 메소드에서는 2가, m2() 메소드에서는 3이 할당 된다.

- 지역 변수의 가용 범위는 메소드 안으로 제한된다.

 

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



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


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

 

 

 

댓글