티스토리 뷰

클래스화 요령

클래스화도 반복적인 부분을 정리한다는 목적에서 생각해보면 함수화와 거의 비슷하다. 프로그램 설계의 요령은 문제를 작게 나누는 것이다. 코드를 작은 클래스로 나눠 조합하면 전체가 크더라도 각각의 부분은 단순해진다.

큰 함수를 분할

클래스화하기 위한 사전 준비로 일단 큰 함수를 작은 함수로 나눈다. 클래스를 찾아 내기 위해서 작은 함수로 만들어야 한다.

함수 이름을 기반으로 클래스 이름 정하기

함수 이름을 기반으로 클래스 후보를 쉽게 찾을 수 있다. 함수 이름 뒤에 붙는 명사가 클래스 후보들이다. 예를 들어 update_player, draw_player등의 함수 이름이 있다면 player를 클래스로 작성할 수 있다. 이처럼 큰 함수를 나누고 적절한 함수 이름을 붙이면 클래스 후보를 쉽게 찾을 수 있다.

클래스화 패턴

클래스화해야 하는 부분을 클래스화 하지 않으면 프로그램 전체에서 코드 중복이 광범위하게 발생한다. 다음은 클래스화할 때 도움이 되는 패턴들이다.

  • 중복 부분 클래스화
  • 기본 자료형으로 구성된 멤버 변수 클래스화
  • 함수의 매개 변수 클래스화
  • 컨테이너 클래스화

중복 부분 클래스화

여러개의 클래스에서 코드가 중복되는 부분을 클래스화합니다. 클래스들의 중복 부분을 해결하는 방법은 상속이양(위임)이 있다. 상속을 사용하려면 중복 부분을 부모 클래스로 만들어서 사용하는 것이다. 이양을 사용하면 중복 부분을 클래스화하여 외부로 빼내고 이렇게 외부로 뺀 클래스를 포함해서 사용함으로 자신의 책임이었던 것을 다른 클래스에게 맡겨 버리는 것이다. 상속 보다는 이양을 우선으로 사용하는 것이 좋다. 상속은 부모 자식 관계가 아니면 재사용이 불가능하지만, 이양은 언제나 재사용할 수 있다. 또한 상속에서는 부모 클래스가 변경되면 자식 클래스에게도 영향을 주게 되어서 위험하다.

기본 자료형으로 구성된 변수 클래스화

int, float 같은 기본 자료형 변수는 모두 클래스 후보이다. 기본 자료형 변수는 반드시 어떤 역할을 가지고 있다. 연관이 있는 변수를 모아서 클래스화하면 된다. 1개의 변수를 가지는 1개의 클래스를 만들어도 된다. 클래스화해서 분리하면 다른 클래스에서도 재사용할 수 있고 단위테스트도 쉬워진다.

함수의 매개 변수 클래스화

함수의 매개 변수가 많은 경우, 클래스화 후보이다. 연관이 있는 매개 변수들을 모아서 클래스화해보자. 항상 세트로 전달하는 매개 변수가 있다면 클래스화를 해야 하는 신호이다.

컨테이너 클래스화

배열, vector, list 등의 컨테이너를 조작하는 전용 클래스를 만들면 부적절한 조작을 방지합니다. 따라서 견고한 코드를 작성하는 중요한 기술이다.

작은 클래스

멤버 변수와 멤버 함수가 적은 작은 클래스도 만들어서 사용해야 좋다. 작은 클래스를 만들지 않으면 코드 중에 같은 조건식과 계산식이 반복해서 등장할 가능성이 높다. 작은 중복이라도 그 수가 많아지면 프로그램 전체가 복잡해 진다. 작은 클래스를 사용하면 추상화 레벨을 한 단계 올릴 수 있다. 작은 클래스를 조합해서 프로그램을 만드는 것이 객체 지향 프로그래밍의 요령이다.

typedef 활용

만일 멤버 변수가 1개인 클래스를 만든다면 typedef를 사용해서 사용자 정의 자료형으로 작성할 수도 있다. 예를 들어 각도를 나타내는 도수법(degree)와 호도법(radian)이 있는데, 다음과 같이 float로 사용하면 어떤 표시 방법으로 각도를 나타내는지 알 수 없다.

float angle;

이때 typedef를 사용해 Degree자료형과 Radian 자료형을 작성하면 된다.

typedef float Degree;
typedef float Radian;

Degree 자료형으로 선언하면 어떤 각도 표시 방법을 사용하는지 명확하게 알 수 있다.

Degree angle;

C++11의 using을 사용하여도 된다.

using Degree = float;
using Radian = float;

마치며

지금까지 보수성을 높이기 위한 여러가지 기술을 소개했다. 핵심은 '복잡한 것을 분할해서 간략화'하는 것이다. 큰 덩어리를 작은 덩이러로 나누면 복잡한 코드를 간략하게 만들 수 있다. 분할된 코드의 이름을 정할 때는 서두르지 말고 좋은 이름을 붙여라. 널리 사용되는 이름을 사용하는 것이 의미를 전달하기 쉽다. 가급적 영어권 개발자가 작성한 코드를 참고하는 것이 올바른 영어 단어 사용에 도움이 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함