개선 이전 코드
private void Awake()
{
examples = GetComponentsInChildren<RectTransform>();
}
private void Start()
{
foreach (var example in examples)
{
float randomValue = Random.Range(0f, 1f);
example.localScale = new Vector3(1f, randomValue, 1f);
example.GetComponent<Image>().color = SetChartColor(randomValue);
}
}
변경 이전 코드의 문제점
- 모든 RectTransform 포함: GetComponentsInChildren<RectTransform>()는 모든 하위 RectTransform을 반환. 여기에는 Image 컴포넌트가 없는 객체나 레이아웃 관련 RectTransform도 포함될 수 있다.
- Null Reference Exception 가능성: 만약 stickChart.GetComponent<Image>()가 null인 경우, 색상을 변경하려고 할 때 오류가 발생할 수 있다.
개선 코드
private void Awake()
{
examples = GetComponentsInChildren<RectTransform>();
examples = Array.FindAll(examples, rt => rt.GetComponent<Image>() != null);
}
private void Start()
{
foreach (var example in examples)
{
float randomValue = Random.Range(0f, 1f);
example.localScale = new Vector3(1f, randomValue, 1f);
Image image = example.GetComponent<Image>();
if (image != null)
{
image.color = SetChartColor(randomValue);
}
}
}
변경 이후 코드의 개선점`
- 필터링 추가: Array.FindAll을 사용해 Image 컴포넌트를 가진 RectTransform만 배열에 남긴다. 이로 인해 색상 변경 작업이 올바른 대상에만 수행된다.
- 안전한 접근: Start 메서드에서 stickChart.GetComponent<Image>()가 null이 아닌지 확인한 후에 색상을 설정한다. 이로 인해 예기치 않은 Null Reference Exception을 방지할 수 있다.
요약
- 변경 이전 코드: 모든 RectTransform에 대해 작업을 수행하며, Image가 없는 요소에서도 색상을 설정하려다 오류가 발생할 수 있음.
- 변경 이후 코드: Image가 있는 RectTransform만 선택하여, 안전하게 색상과 스케일을 변경함.