1. 구조체
•
구조체란 서로 다른 타입의 집합으로 구성된 데이터를 의미한다.
◦
자바와 C++에서는 때에 따라 클래스가 구조체 임무를 수행하기도 한다(자료 구조 형태)
•
데이터 관계를 이해하기 쉽게 하기 위해서 구조체를 사용하라.
•
데이터 블록에 대한 작업을 단순화하기 위해서 구조체를 사용하라.
•
매개변수의 수를 줄이기 위해 구조체를 사용하라.
•
유지보수를 줄이기 위해서 구조체를 사용하라.
◦
구조체를 사용하면 유사한 책임을 가진 객체끼리 묶기 때문에 변경이 발생하는 경우, 그 범위를 제한할 수 있다.
3. 전역 데이터
전역 데이터를 사용할 때 발생하는 일반적인 문제점
•
전역 변수에 대한 부주의한 변경
•
전역 데이터의 재진입 문제
•
전역 데이터로 인한 코드 재사용 문제
•
전역 데이터와 관련된 불확실한 초기화 순서 문제점
•
전역 데이터로 인해 손상되는 모듈화와 지적인 관리 용이성
전역 데이터를 사용하는 이유
•
전역적인 값의 보관
◦
전체 프로그램에 영향을 끼치는 데이터가 필요할 때, 사용해야할 값을 보관할 때 사용한다.
•
이름 상수의 역할
•
매우 자주 사용되는 데이터의 사용을 효율화
최후의 수단으로만 전역 데이터를 사용하라
•
각 변수를 지역 변수로 만든 다음 필요할 때만 변수를 전역으로 만들어라
◦
처음에는 모든 변수를 지역 변수로 만들고 다른 곳에서 필요하다면 비공개, 보호 변수로 변경한다. 정말로 전역으로 만들어야할 때 전역으로 만든다.
•
전역 변수와 클래스 변수를 구분하라.
•
접근 루틴을 사용하라.
전역 데이터 대신 접근 루틴 사용
•
전역 데이터가 필요한 상황이라면 접근 루틴을 고려해볼만하다. 접근 메소드는 추상 데이터형을 구현하고 정보 은닉을 이루기 위한 핵심 기법이다.
•
접근 메소드의 장점
◦
데이터에 대한 제어를 집중시킬 수 있다.
▪
데이터를 참조하고 있는 다른 코드를 변경할 필요 없이 변경의 범위를 제한할 수 있다.
◦
변수에 대한 모든 참조가 보호된다는 것을 보장할 수 있다.
◦
정보 은닉이 갖는 일반적인 장점들을 자연스럽게 갖게 된다.
▪
정보 은닉의 한 예이므로 자연스럽게 가지게 되는 것이다.
◦
접근 메소드는 추상 데이터형으로 변환하기 쉽다.
▪
접근 메소드는 전역 데이터를 직접 다룰때는 구현하기 힘든 추상화 수준을 만들 수 있는 장점을 제공한다.
•
접근 메소드 사용법
◦
클래스 안에 데이터를 감춘다.
▪
static 키워드처럼 데이터가 단일 객체로 존재하도록 보장하는 기능을 이용해 데이터를 선언한다.
◦
모든 코드가 접근 메소드를 통해서만 데이터에 접근할 수 있도록 한다.
◦
모든 전역 데이터를 한 곳에 집어 넣지 마라.
▪
이 경우, 정보 은닉과 추상 데이터형이 제공해주는 장점을 잃게 된다.
▪
접근 메소드를 작성하고 있다면 어떤 책임을 가지는 변수인지 고민한 후, 해당 클래스에 넣거나 클래스를 만들도록 하자.
◦
전역 변수에 대한 접근을 제어하기 위해서 락을 사용하라.
▪
동시성 제어는 정말 중요하다. 데이터의 안정성을 보장할 수 없다면 프로그램은 깨진 것이다.
◦
추상화 수준을 접근 메소드에 만들어라.
▪
구현 세부 사항 수준보다는 문제 도메인 수준에서 접근 메소드를 작성하는 것이 가독성이 좋다.
◦
데이터에 대한 모든 접근을 동일한 추상화 수준으로 유지하라.
전역 데이터를 사용할 때의 위험 요소를 줄이는 방법
•
전역 변수를 분명히 하는 네이밍 컨벤션을 사용하라.
◦
한 가지 이상의 목적으로 전역 변수를 사용하고 있다면 네이밍 컨벤션을 사용하여 그러한 목적의 차이를 분명히하는 것이 좋다.
•
모든 전역 변수에 대해 주석을 잘 작성한 문서를 만들어라.
•
중간 결과를 담기 위해 전역 변수를 사용하지 마라.
◦
전역 변수에 대한 새로운 값을 계산해야 한다면 중간 계산 결과를 보관하는데 전역 변수를 사용하지 않고 최종 결과를 담아야 한다.
•
모든 데이터를 거대한 객체에 입력하고 모든 곳에 전달하는 방법으로 전역 데이터를 사용하지 않는 것처럼 행동하지 마라.
◦
모든 데이터를 하나의 큰 객체에 넣으면 표면적으로는 전역 변수를 사용하지 않는 것처럼 보인다. 하지만 오버헤드가 발생하고 진정한 캡슐화의 이점을 얻을 수 없다.
◦
전역 데이터를 사용할 것이라면 공개적으로 사용하라. 비대한 객체로 위장하지 말자.
요점 정리
•
구조체를 사용하면 복잡도가 낮아지고 이해하기 쉬우며 유지보수에 도움이 된다.
•
구조체를 사용할 때마다 대신 클래스도 고려해본다.
•
전역 변수는 위험할 뿐만 아니라 더 좋은 다른 것으로 대체할 수 있으니 사용하지 않는다.
•
전역 변수를 꼭 사용해야 한다면 접근 메소드를 사용해서 처리한다.
◦
접근 메소드는 전역 변수가 제공할 수 있는 정보 이상을 제공해줄 수 있다.