7.2.2 객체 생성하기(Constructing Objects) ※ constructor 와 initializer를 번역함에 있어 영어로는 간단히 구분이 가능 하지만 한국어로는 간단히 구분히 되지 않아 둘 다 편의상 생성자로 번역하였습니다. 아래의 포스팅을 보기 전에 이 둘의 의미를 아래와 같이 이해하시기 바랍니다. ◇ 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)
- 생성자(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 ※
※ |