쓰레드를 사용하는 프로그래밍은 몇 가지 설계상의 제약을 받게 되는데, 이것은 좋은 일이다. 이 제약들은 워낙 도움이 많이 되어서 다른 어떤 프로그래밍을 하더라도 꼭 지키고 싶어지는 것이다. 이 제약들은 코드의 결합을 끊고 '우연에 맡기는 프로그래밍'과 싸우는 데 도움이 된다.

직선형 코드에서는 엄밀하지 않은 프로그래밍으로 이끌리는 전제들을 남발하기 쉽다. 하지만 동시성을 염두에 둔다면 여러 가지 일들을 더 주의 깊게 생각하게 될 수 밖에 없다. 더 이상 혼자 마음대로 놀 수 없는 것이다. 이제는 여러 일이 '동시에' 일어 날 수 있기 때문에, 갑자기 전에 못 보던 시간에 관련된 의존성들이 보이기 시작한다.

일단 제일 먼저, 모든 전역 변수나 정적 변수들을 동시 접근으로부터 보호해야 한다. 지금이 왜 애초에 전역 변수가 필요했는지 스스로에게 물을 수 있는 좋은 기회다. 게다가, 호출 순서와 관계없이 일관성 있는 상태 정보를 보일 수 있는지도 확인 해 봐야 한다. 예를 들어 언제 객체의 상태에 대해 물을 수 있는가? 만약 어떤 호출들 사이에서 객체가 유효하지 않은 상태에 있다면, 여러분은 아무도 그 시점에서는 그 객체를 호출하지 않을 것이라는 우연에 기대고 있는 셈이다.

위젯이 먼저 만들어지고 그 다음에 화면에 표시되는 두 단계 구조의 윈도우 하위시스템이 있다고 해보자. 위젯이 화면에 나오기 전에는 위젯의 상태를 설정 할 수 없다. 코드가 어떻게 되어있는지에 따라, 생성된 위젯이 화면에 보이기 전까지는 다른 객체가 그 위젯을 사용 할 수 없다는 사실에 의존하고 있는지도 모른다.

하지만 동시성 있는 시스템에서는 이것이 사실이 아닐지도 모른다. 객체는 호출 될 때 언제나 유효한 상태에 있어야 하는데, 객체들은 가장 불편한 시각에도 호출 될 수 있는 것이다. 호출 될 가능성이 있는 모든 시간에 언제나 객체가 유효한 상태에 있도록 만들어야 한다. 이 문제는 생성자와 초기화 루틴을 별개로 정의하는 클래스에서 종종 나타난다.

<실용주의 프로그래머 팁>
언제나 동시성을 고려해 설계하라

 
실용주의프로그래머
카테고리 컴퓨터/IT > 프로그래밍/언어
지은이 앤드류 헌트 (인사이트, 2007년)
상세보기

'Archive' 카테고리의 다른 글

리팩토링  (0) 2011.10.04
동시성을 고려한 설계를 하면 좋은 이유  (0) 2011.10.04
세부사항을 코드에서 몰아내라  (0) 2011.10.03
Camera의 setDisplayOrientation 메소드  (0) 2011.10.03
Java 필드 초기화  (0) 2011.10.03