메서드
러스트에서 선언된 타입에 대해 impl
블록에 함수를 선언하여 메서드를 연결 할 수 있습니다:
The self
arguments specify the “receiver” - the object the method acts on. There are several common receivers for a method:
&self
: 호출자로부터 공유가능한 불변 참조 방식으로 객체를 빌려옴을 나타냅니다. 객체는 메소드 호출 뒤에도 사용될 수 있습니다.&mut self
: 호출자로부터 유일한 가변 참조 방식으로 객체를 빌려옴을 나타냅니다. 객체는 메소드 호출 뒤에도 사용될 수 있습니다.self
: 호출자로부터 객체의 소유권을 가져오고 객체는 호출자로부터 메소드로 이동됩니다. 메소드가 객체를 소유하게 되며 따라서 명시적으로 소유권을 다른 곳으로 전달하지 않는다면 메서드 종료와 함께 객체는 drop(해제)됩니다.mut self
: same as above, but the method can mutate the object.- 리시버 없음: 구조체의 정적 메서드가 됩니다. 주로 생성자를 만들때 사용하게 되며, 생성자는 흔히
new
라고 이름붙입니다.
Speaker Notes
This slide should take about 8 minutes.
키 포인트:
- 메서드를 함수와 비교하여 소개하는 것도 도움이 될 수 있습니다.
- 메서드는 구조체나 열거형과 같은 타입의 인스턴스에서 호출 되며, 첫번째 매개변수(파라메터)는 인스턴스를
self
로 표기합니다. - 메서드를 이용하면 receiver 문법을 사용할 수 있고 코드를 좀더 체계적으로 정리할 수 있습니다. 메서드들이 예측 가능한 위치에 모여 있으니 찾기 쉽습니다.
- 메서드는 구조체나 열거형과 같은 타입의 인스턴스에서 호출 되며, 첫번째 매개변수(파라메터)는 인스턴스를
- 메서드 receiver인
self
키워드 사용을 언급해 주시기 바랍니다.- 예제의 경우
self: &Self
의 줄인 버전임을 알려주고, 구조체의 이름을 직접 사용하면 어떻게 되는지 보여주는 것도 좋습니다. impl
블록 내부에서는Self
가 해당 타입의 이름 대용으로 사용될 수 있음을 알려주세요.- 구조체의 필드를 접근할 때 점 표기를 사용하듯이
self
에 점 표기를 사용하여 개별 필드들을 접근할 수 있습니다. - This might be a good time to demonstrate how the
&self
differs fromself
by trying to runfinish
twice. self
를 사용하는 이같은 변형들 외에도Box<Self>
와 같이 리시버 타입으로 허용되는 특별한 래퍼 타입이 있습니다.
- 예제의 경우