Which is better? Reassign or Clear

  • Post author:
  • Post category:
  • Post comments:0 Comments
  • Post last modified:May 25, 2006

왜 그런 약속을 했는지 모르겠다. 처음에는 별 것 아니라고 생각했다. 이제 와서 생각해보면 터무니 없이 안일한 태도였다. 마소 6월호 원고 마감일을 하루 앞두고 수정 건도 있는데 왜 수락했을까?

이틀째 집에 오자마자 Netbeans를 켠다. 유사한 점이 많다고는 해도 GUI 프로그래밍을 하려니, C#을 주로 다루는 나에겐 벅찬 듯 하다. 정말 간단한 데이터 구조 숙제인 줄 알았다. 그러나 데이터 구조를 화면에 보여줘야 하다니 보통 일이 아니었다.

결국 요구사항 중 일부를 구현 못하고 작업이 끝났다. 그 정도로 만족한다니 다행이지만, 더 잘해 주지 못해서 미안했다.

아차, 방심하는 사이에 이야기가 샜다. 이 과제는 나름대로 재밌었다. 완전히 새로 짜는 것이 아니라, 어느 정도 구축된 인터페이스와 데이터 구조 위에 새로운 기능을 추가하는 것이었다. 어제는 기존 소스 코드를 수정하면서 재밌는 소재를 찾았다. 여기서는 C#으로 예제 코드를 만들었다.

private List<int> list = null;

private void ButtonClicked()
{
	if (list == null)
	{
		list = new List<int>();
	}
	else
	{
		list.Clear();
	}

	// some List operations
}

사용자가 버튼을 누르면 List에 새로운 값을 입력하고, 트리 구조 등을 만든다. 여기서 문제는 굳이 null 체크를 위해 분기해야만 하냐는 점이다. if/else 부분을 단순하게 list = new List<int>();로 바꾸면 안 될까? GC가 알아서 참조를 잃어버린 List 인스턴스를 제거해 줄 것이다.

물론 ButtonClicked() 메써드가 자주 호출된다면 List 인스턴스 생성에 필요한 자그마한 오버헤드도 매우 큰 효과를 불러일으킬 수 있다. 하지만 UI를 통해 입력이 들어왔을 때만 실행되는 메써드라면 매번 새로운 객체를 생성해도 무방하다.

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments