티스토리 뷰

일반적으로 널리 사용되는 디자인 패턴을 찾아라

디자인 패턴은 소프트웨어에서 가장 흔히 발생하는 많은 문제를 해결하는 데 사용할 수 있는 이미 만들어진 설루션의 핵심적인 부분을 제공한다.

  • 패턴은 이미 만들어진 추상화를 제공함으로써 복잡성을 줄인다.
  • 패턴은 일반적으로 널리 사용되는 해결책의 세부 사항들의 규정함으로써 오류를 줄인다.
  • 패턴은 대안을 제안함으로써 발견적 학습의 가치를 제공한다.
  • 패턴은 설계에 대해 수준 높은 논의를 할 수 있게 해서 의사소통을 원활하게 한다.

잘 알려진 디자인 패턴

추상 팩토리 : 구체적인 클래스를 지정하는 것이 아니라 집합의 종류를 지정함으로써 고나련 객체의 집합을 생성하는 기능을 제공한다.
어댑터 : 클래스의 인터페이스를 다른 인터페이스로 변환한다.
브리지 : 인터페이스와 구현을 분리하여 각각을 독립적으로 변형할 수 있게 한다.
컴포지트 : 고유한 타입의 추가 객체가 담긴 객체로 구성되어 클라이언트 코드가 최상위 수준 객체를 사용하지만, 세부적인 객체에는 관여하지 않는다.
데코레이터 : 책임 설정 시 서브클래스를 생성하지 않고 객체에 동적으로 책임을 추가한다.

주의 사항은 패턴을 억지로 코드에 끼워 맞추지 않아도 된다. 패턴에 따라서 약간 바꾸면 코드를 이해하기 쉬워지는 경우가 있다.
기능에 집작하는 것이다.

다른 발견적 학습

1. 응집력을 강하게 하라

응집력이란? 사전적 의미로 "집단의 구성원들이 집단에 대한 애착도를 보이고 집단에 계속 남아 있으려는 총제척인 힘"이라고 합니다.
프로그래밍에서는 클래스에 있는 모든 루틴(=메서드 혹은 함수)나 루틴에 해당하는 코드가 얼마나 밀접하거나 연관이 있는지 그 클래스에 집중되어 있는지를 의미합니다.
다시 말해 연관성이 높은 기능을 포함하는 클래스를 응집력이 강하다라고 표현합니다. 발견적 학습의 목표는 가능한 응집력이 강한 것을 만드는 것입니다.
응집력은 복잡성을 다룹니다.

2. 계층을 만들어라

계층은 단계식 정보 구조로, 가장 일반적이거나 추상적인 항목이 최상위에 위치하고 점차 상세하고 구체적인 항목이 낮은 수준으로 위치한다.

계층은 소프트웨어의 주요 기술적 의무(복잡성 관리)를 달성하는 데 유용한 도구입니다.

3. 클래스 계약을 형식화하라

각 클래스의 인터페이스를 나머지 프로그램과 계약으로 생각하는 것이 이해하는데 도움이 됩니다.

4. 책임을 할당하라

객체가 어떻게 책임을 할당할 것인가를 생각하는 것입니다. 객체가 무엇을 책임져야 하는지 묻는 것을 어떻게 정보를 감추어야 하는지 묻는 것과 유사하지만 책임을 묻는 것이 특별한 발견적 가치를 부여한다.

5. 테스트가 가능하도록 설계하라

테스트가 가능하도록 설계하면 더 규격화된 클래스 인터페이스가 만들어지는 경향이 있으며 도움이 됩니다.

6. 결합 시점을 의식적으로 선택하라

결합 시점은 특정 값이 변수에 결합하는 시점을 말합니다. 그래서 다음과 같은 질문을 통해서 좋은 설계의 통찰력을 얻을 수 있습니다.

  • 이 변수는 초기에 결합한다면 어떻게 될까?
  • 이 값들을 나중에 결합한다면 어떻게 될까?
  • 이 테이블을 코드에서 초기화하거나 실행 시 사용자로부터 변수의 값을 읽는다면 어떻게 될까?

7. 제어 지점을 정하라

제어는 클래스와 루틴, 매크로, 파일에 집중 될 수 있고, 이름 상수도 제어 지점에 정확한 장소에 있어야 합니다.

8. 주먹구구식 기법을 사용을 고려하라

때로는 주먹구구식(단순 무식한 방법) 좋을 때도 있습니다. 좋은 해결책을 찾으려면 시간이 오래 걸립니다. 일례로 검색 알고리즘 중 이진 검색 알고리즘이 1956년에 처음 공개되었는데 리스트의 크기 상관없이 정확하게 검색되는 알고리즘을 찾는 데까지 16년이 걸렸습니다.

9. 다이어그램을 그려라

실제 그림을 사용하면 더욱 높은 추상화 수준에서 문제를 표현할 수 있어서 좋습니다.

10. 모듈화를 유지하라

각 루틴이나 클래스를 블랙박스처럼 만드는 것입니다. 무엇이 들어가고 나오는지 알지만, 안에서 무슨 일이 일어나는지 모릅니다.

 

 
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
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
31
글 보관함