기본 구조 설계(아키텍처 설계): 모듈 역할/인터페이스 정의
상세 설계: 모듈 내부 알고리즘/데이터 명세화
설계 품질 목표
클래스 변경 이유를 1개로 제한(역할/책임 단일화)
확장에는 열려있고 수정에는 닫혀있어야(상속/다형성 활용)
하위 타입은 상위 타입을 동작 깨지지 않게 대체 가능해야
사용하지 않는 인터페이스를 강제로 구현하면 안 됨(비만/오염 인터페이스)
구체 모듈이 추상 모듈에 의존하도록(의존 방향 역전)