일단 기본은 construtor 를 쓰는 것이죠. init 함수를 쓰는 건 예외적인 상황입니다.
constructor 와 init 함수의 가장 큰 차이점은, constructor 의 경우 실행이 끝날 때까지 객체가 존재하지 않습니다. 그래서 만약에 객체가 존재하지 않으면 의미가 없는 메쏘드를 호출해야 한다거나 (예를 들면 C++ 에서 virtual methods), 아니면 다른 객체와 연결시킨다던지 하는 일을 할 경우 constructor 안에서는 할 수 없거나 하기 불편한 경우가 있습니다. 이런 경우 일단 불완전한 객체를 만든 다음 init 함수를 부를 수 있죠. 하지만 이런 경우도 factory pattern (구체적으로 C++의 경우 "virtual consturctor idiom") 을 사용해서 피해갈 수 있습니다.
다른 경우로 여러 개의 constructor 가 동일한 서브루틴을 부르거나, 아니면 객체가 만들어진 뒤에 나중에 어떤 이유로 다시 초기화할 필요가 있을때 init 함수를 만들어서 부를 수 있죠.
하지만 이런 예외적인 상황이 아니면 init 함수를 사용하는 것은 그다지 좋은 방법은 아닙니다. 왜냐면 초기화라는 것은 객체에 의미를 부여하는 작업인데, init 함수를 부르기 전까지는 "의미가 없는" 객체인 상태이기 때문에 잠재적인 위험이 있죠.
일단 기본은 construtor 를 쓰는 것이죠.
일단 기본은 construtor 를 쓰는 것이죠. init 함수를 쓰는 건 예외적인 상황입니다.
constructor 와 init 함수의 가장 큰 차이점은, constructor 의 경우 실행이 끝날 때까지 객체가 존재하지 않습니다. 그래서 만약에 객체가 존재하지 않으면 의미가 없는 메쏘드를 호출해야 한다거나 (예를 들면 C++ 에서 virtual methods), 아니면 다른 객체와 연결시킨다던지 하는 일을 할 경우 constructor 안에서는 할 수 없거나 하기 불편한 경우가 있습니다. 이런 경우 일단 불완전한 객체를 만든 다음 init 함수를 부를 수 있죠. 하지만 이런 경우도 factory pattern (구체적으로 C++의 경우 "virtual consturctor idiom") 을 사용해서 피해갈 수 있습니다.
다른 경우로 여러 개의 constructor 가 동일한 서브루틴을 부르거나, 아니면 객체가 만들어진 뒤에 나중에 어떤 이유로 다시 초기화할 필요가 있을때 init 함수를 만들어서 부를 수 있죠.
하지만 이런 예외적인 상황이 아니면 init 함수를 사용하는 것은 그다지 좋은 방법은 아닙니다. 왜냐면 초기화라는 것은 객체에 의미를 부여하는 작업인데, init 함수를 부르기 전까지는 "의미가 없는" 객체인 상태이기 때문에 잠재적인 위험이 있죠.
그렇군요.
자세한 설명 감사합니다.
댓글 달기