계산기 과제 코드를 피드백을 받은 내용을 적용하기 위해 여러 방법으로 리팩토링하는 과정에서 이미 있는 코드를 최대한 활용하려다 보니 다음과 같은 에러가 발생했다....
Swift에서는 모든 프로퍼티가 초기화되기 전에 self를 사용할 수 없다. 이 규칙 때문에
createButtonStack()
이 호출될 때self
가 이미 초기화되어야 하지만,super.init(frame:)
이 호출되기 전에self
를 사용하려고 해서 에러가 발생했다.
createButtonStack()
은 인스턴스 메서드로 선언되어 있고, 인스턴스 메서드에서 self
를 사용합니다.super.init(frame:)
을 호출하여 부모 클래스의 초기화가 완료되기 전까지 self
를 완전한 상태로 간주하지 않습니다.createButtonStack()
호출시 self
를 사용할 수 없어서 에러가 발생합니다.만약 프로퍼티가 초기화 이후 계속 사용된다면, lazy로 선언하는 이점이 사라집니다.
오히려 초기화 지연이 코드의 가독성을 해치거나, 성능 면에서 무의미한 오버헤드가 될 수 있습니다.
lazy 프로퍼티가 초기화된 이후 메모리를 해제하려면, 해당 객체가 참조를 끊어야 합니다.
이를 제대로 관리하지 않으면 예상치 못한 메모리 사용 증가가 발생할 수 있습니다.
self
를 캡처하면, 강한 순환 참조가 발생할 위험이 있습니다.weak self
를 사용해야 하지만, 초기화 코드가 더 복잡해질 수 있습니다.적합한 경우:
부적합한 경우:
laay는 유용한 도구이지만, 초기화 시점, 성능 요구사항, 멀티스레드 환경 등을 고려하여 사용해야 합니다. 코드가 간단하고 예측 가능하도록 유지하려면, 필요하지 않은 경우 lazy를 피하고 일반 초기화를 사용하는 것이 좋습니다.