인프런 커뮤니티 질문&답변

Henu님의 프로필 이미지
Henu

작성한 질문수

PHP 7+ 프로그래밍: 객체지향

09 - 제네레이터 (Generators)

제너레이터 강의 내용중 Iterator 인터페이스를 구현한 NumberInterator 클래스 선언시 생성자 메소드를 사용하는 부분에 대한 질문입니다.

해결된 질문

작성

·

265

1

안녕하세요.

제너레이터 강의 내용중 아래 이미지와 같이 Iterator 인터페이스를 구현한 NumberInterator 클래스 선언시 생성자 메소드를 사용하는 부분에서 $this 키워드를 이용하여 각 property들에 대한 초기화를 시켜주는 구문을 확인해 볼 수 있었는데요. 

여기서 한가지 이해가 되지 않는 부분이 있어서 질문을 작성합니다.

NumberIterator 클래스의 경우 클래스의 프로퍼티로는 $i만 가지고 있는데,  생성자 메소드를 통해 선언되어 있지 않는 'start', 'end', 'step'에 대해 값을 설정해 줬음에도 불구하고 컴파일 에러가 발생하지 않는 이유가 궁금합니다.

예상되는 것은 PHP에서 지원하는 어떠한 문법이 존재하고  생성자 메소드를 사용함으로써 NumberIterator 클래스의 객체가 생성되는 시점에 생성자 메소드가  호출되고 나서 에 $start, $end, $step이라는 프로퍼티가 클래스에 추가되는(?) 것 같은데,

이 원리가 맞다면 이러한 내용은 어떤 용어로 검색을 해봐야 정확한 내용을 알 수 있을까요?

답변 1

2

정상우님의 프로필 이미지
정상우
지식공유자

안녕하세요. 네, 맞습니다. PHP 는 다소 느슨한 언어이기 때문에 사실 생성자에서 지정만 해주더라도 명시적 선언없이 초기화를 진행할 수 있게 되어있습니다. 자바스크립트에서도 비슷한 동작이 있긴 합니다만, 이는 그냥 생성자에서 프로퍼티를 초기화해주는 것 이상의 의미는 없습니다. 별도의 용어는 저도 잘 모르겠고, '생성자에서 프로퍼티 또는 필드 선언 및 초기화'과정 중 하나일 뿐이라고 생각하시면 편합니다. 다만 저 기능에 대해 PHP 8 에서는 흥미로운 기능이 추가 된 바 있습니다. 'PHP Constructor Promotion' 기능을 참고해보시기 바랍니다 :) 

Henu님의 프로필 이미지
Henu

작성한 질문수

질문하기