1. 모듈화
- Modularity
- 소프트웨어의 성능 향상, 시스템 재사용, 관리를 쉽게 하기 위해 시스템 기능을 모듈 단위로 나누는 것
- 모듈 크기가 너무 작으면 개수가 많아져 통합 비용 증가
- 너무 커서 개수가 적으면 모듈당 개발 비용 증가
2. 추상화
- Abstraction
- 불필요한 부분 생략하고 필요한 부분을 강조
3. 정보은닉
- Information Hiding
- 모듈 내부의 정보를 감춰 다른 모듈이 접근/변경할 수 없게 함
- 필요 정보만 인터페이스로 주고 받음
- 하나의 모듈이 변경돼도 다른 모듈에 영향 없어 유지보수가 용이
4. 레이어 패턴
- Layers pattern
- 시스템을 계층(Layer)으로 구성하는 고전적인 아키텍처 패턴(Patterns)의 하나
- 상위 계층이 하위 계층에 대한 서비스 제공자이고 하위 계층은 클라이언트임
- 마주보는 계층끼리만 영향 미쳐서 변경 작업 용이
- 특정 계층만 교체 가능
- OSI 참조 모델: ISO(국제표준화기구) 통신 규약(Protocol)
- 물리(Physical Layer)
- 데이터 링크(Data Link Layer)
- 네트워크(Network Layer, 망 계층)
- 전송(Transport Layer)
- 세션(Session Layer)
- 표현(Presentation Layer)
- 응용(Application Layer)
5. 클라이언트-서버 패턴
- Client-Server Pattern
- 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성
- 서버는 항상 대기
- 서버와 클라이언트는 요청/응답 위해 동기화될 때 외엔 독립적
6. 모델-뷰-컨트롤러 패턴
- Model-View-Controller Pattern
- 서브시스템을 3개 역할로 구조화
- 모델(Model): 핵심 기능과 데이터 보관
- 컨트롤러(Controller): 입력 처리(Input)
- 뷰(View): 정보 표시(Output)
- 하나의 모델에 여러 뷰가 필요한 대화형 애플리케이션에 적합
7. 클래스
- Class
- 인스턴스(Instance)들의 공통 속성과 행위를 정의하는 틀
- 인스턴스화(Instantiation): 클래스로 객체 생성
- 슈퍼 클래스(Super Class): 상위(부모)
- 서브 클래스(Sub Class): 하위(자식)
- 최상위 클래스: 상위 클래스 없음
8. 캡슐화
- Encapsulation
- 데이터와 함수를 하나로 묶음
- 인터페이스 외 내용이 정보 은닉되어 있음
- 캡슐화된 객체의 재사용 쉬움
9. 결합도
- Coupling
- 모듈 간 상호 의존하는 관계로 모듈(Module)의 독립성을 높이려면 결합도 약해야 함
- 내용 결합도(Content Coupling)
- 공통 결합도(Common Coupling)
- 외부 결합도(External Coupling)
- 제어 결합도(Control Coupling)
- 검인 결합도(Stamp Coupling)
- 자료 결합도(Data Coupling)
10.응집도
- Cohesion
- 모듈 내부 요소 간 관계로 모듈(Module)의 독립성 높이려면 응집도 강해야 함
- 기능적 응집도(Functional Cohesion)
- 순차적 응집도(Sequential Cohesion)
- 통신적 응집도(Communicational Cohesion)
- 절차적 응집도(Procedural Cohesion)
- 시간적 응집도(Temporal Cohesion)
- 논리적 응집도(Logical Cohesion)
- 우연적 응집도(Coincidental Cohesion)