////
Search
Duplicate
🎑

13. 특이한 데이터형

1. 구조체

구조체란 서로 다른 타입의 집합으로 구성된 데이터를 의미한다.
자바와 C++에서는 때에 따라 클래스가 구조체 임무를 수행하기도 한다(자료 구조 형태)
데이터 관계를 이해하기 쉽게 하기 위해서 구조체를 사용하라.
데이터 블록에 대한 작업을 단순화하기 위해서 구조체를 사용하라.
매개변수의 수를 줄이기 위해 구조체를 사용하라.
유지보수를 줄이기 위해서 구조체를 사용하라.
구조체를 사용하면 유사한 책임을 가진 객체끼리 묶기 때문에 변경이 발생하는 경우, 그 범위를 제한할 수 있다.

3. 전역 데이터

전역 데이터를 사용할 때 발생하는 일반적인 문제점

전역 변수에 대한 부주의한 변경
전역 데이터의 재진입 문제
전역 데이터로 인한 코드 재사용 문제
전역 데이터와 관련된 불확실한 초기화 순서 문제점
전역 데이터로 인해 손상되는 모듈화와 지적인 관리 용이성

전역 데이터를 사용하는 이유

전역적인 값의 보관
전체 프로그램에 영향을 끼치는 데이터가 필요할 때, 사용해야할 값을 보관할 때 사용한다.
이름 상수의 역할
매우 자주 사용되는 데이터의 사용을 효율화

최후의 수단으로만 전역 데이터를 사용하라

각 변수를 지역 변수로 만든 다음 필요할 때만 변수를 전역으로 만들어라
처음에는 모든 변수를 지역 변수로 만들고 다른 곳에서 필요하다면 비공개, 보호 변수로 변경한다. 정말로 전역으로 만들어야할 때 전역으로 만든다.
전역 변수와 클래스 변수를 구분하라.
접근 루틴을 사용하라.

전역 데이터 대신 접근 루틴 사용

전역 데이터가 필요한 상황이라면 접근 루틴을 고려해볼만하다. 접근 메소드는 추상 데이터형을 구현하고 정보 은닉을 이루기 위한 핵심 기법이다.
접근 메소드의 장점
데이터에 대한 제어를 집중시킬 수 있다.
데이터를 참조하고 있는 다른 코드를 변경할 필요 없이 변경의 범위를 제한할 수 있다.
변수에 대한 모든 참조가 보호된다는 것을 보장할 수 있다.
정보 은닉이 갖는 일반적인 장점들을 자연스럽게 갖게 된다.
정보 은닉의 한 예이므로 자연스럽게 가지게 되는 것이다.
접근 메소드는 추상 데이터형으로 변환하기 쉽다.
접근 메소드는 전역 데이터를 직접 다룰때는 구현하기 힘든 추상화 수준을 만들 수 있는 장점을 제공한다.
접근 메소드 사용법
클래스 안에 데이터를 감춘다.
static 키워드처럼 데이터가 단일 객체로 존재하도록 보장하는 기능을 이용해 데이터를 선언한다.
모든 코드가 접근 메소드를 통해서만 데이터에 접근할 수 있도록 한다.
모든 전역 데이터를 한 곳에 집어 넣지 마라.
이 경우, 정보 은닉과 추상 데이터형이 제공해주는 장점을 잃게 된다.
접근 메소드를 작성하고 있다면 어떤 책임을 가지는 변수인지 고민한 후, 해당 클래스에 넣거나 클래스를 만들도록 하자.
전역 변수에 대한 접근을 제어하기 위해서 락을 사용하라.
동시성 제어는 정말 중요하다. 데이터의 안정성을 보장할 수 없다면 프로그램은 깨진 것이다.
추상화 수준을 접근 메소드에 만들어라.
구현 세부 사항 수준보다는 문제 도메인 수준에서 접근 메소드를 작성하는 것이 가독성이 좋다.
데이터에 대한 모든 접근을 동일한 추상화 수준으로 유지하라.

전역 데이터를 사용할 때의 위험 요소를 줄이는 방법

전역 변수를 분명히 하는 네이밍 컨벤션을 사용하라.
한 가지 이상의 목적으로 전역 변수를 사용하고 있다면 네이밍 컨벤션을 사용하여 그러한 목적의 차이를 분명히하는 것이 좋다.
모든 전역 변수에 대해 주석을 잘 작성한 문서를 만들어라.
중간 결과를 담기 위해 전역 변수를 사용하지 마라.
전역 변수에 대한 새로운 값을 계산해야 한다면 중간 계산 결과를 보관하는데 전역 변수를 사용하지 않고 최종 결과를 담아야 한다.
모든 데이터를 거대한 객체에 입력하고 모든 곳에 전달하는 방법으로 전역 데이터를 사용하지 않는 것처럼 행동하지 마라.
모든 데이터를 하나의 큰 객체에 넣으면 표면적으로는 전역 변수를 사용하지 않는 것처럼 보인다. 하지만 오버헤드가 발생하고 진정한 캡슐화의 이점을 얻을 수 없다.
전역 데이터를 사용할 것이라면 공개적으로 사용하라. 비대한 객체로 위장하지 말자.

요점 정리

구조체를 사용하면 복잡도가 낮아지고 이해하기 쉬우며 유지보수에 도움이 된다.
구조체를 사용할 때마다 대신 클래스도 고려해본다.
전역 변수는 위험할 뿐만 아니라 더 좋은 다른 것으로 대체할 수 있으니 사용하지 않는다.
전역 변수를 꼭 사용해야 한다면 접근 메소드를 사용해서 처리한다.
접근 메소드는 전역 변수가 제공할 수 있는 정보 이상을 제공해줄 수 있다.