설계 명세를 토대로 구현한다.
분리하여 구현할 수 있는 작은 단위별로 프로그래밍 하는 것
구현 단계의 로드맵
1) 코딩 표준을 작성
2) 아키텍처 설계 결과 프레임워크 패키지와 응용 패키지를 결정
3) 클래스 구현이 끝나는 대로 검사를 함
4) 클래스 단위로 테스트함
5) 클래스나 패키지를 릴리즈하여 다음 단계인 응용시스템으로 통합함
구현 단계 이전 준비사항
1) 설계서 확인
2) 시간 측정 양식 작성 - 구현의 각 작업에 소요되는 시간
3) 결함 기록 양식 작성 - 결함마다 심각도 수준, 오류 유형을 기록 할 수 있도록 양식 준비
4) 코딩 표준 숙지
5) 과거 자료 참고
1) 코딩 작업을 계획, 코딩하기 위해 설계서를 확인하고 부족한 부분을 보충함
- 사전 조건과 결과 조건을 확인
- 코딩에 걸리는 시간을 예측
2) 설계나 구조를 검토 - 걸린시간, 결함 유형, 위치, 심각도를 기록
3) 코딩
4) 검사
5) 컴파일
6) 테스트
재사용
1) 이미 존재하는 믿을 만한 코드를 이용 ex) GUI 컴포넌트
의도 확립
1) 의도 확립의 원리를 반영한 프로그래밍 예
final, const, abstract
2) 상수, 변수, 클래스는 되도록 로컬로 만들어라
3) 직접 접근키시려는 의도가 없는 것은 접근 할 수 없게 속성을 private로 만들어라
4) 문서에 사례를 포함하라
5) 메소드를 호출 순서대로 정리하기보다 알파벳 순으로 나열
포인터와 레퍼런스
1) 매개변수를 레퍼런스 타입을 이용하라 포인터로 사용하지 말고
함수
1) 타입에 대한 질의는 피해라
2) 장점이 단점보다 더 많을때는 제외하고는 C++의 프렌드 함수는 피해라
3) 중복 정의함수는 각별한 주의 - 오해를 일으킬 수 있다.
예외처리
1) 어떻게 예외 처리를 하는지 알 때만 catch 사용 모르면 throws
2) 예외 처리시 유의사항
- 현재 메소드에서 처리할 수 없다면, 다른 더 넓은 범위에서 다루어야 한다.
- 테스트하는 과정이라면, 예외처리를 빼고 해야한다.
단일 책임 : 클래스는 오직 한가지 이유로만 변경되어야 함
1) 한 클래스는 한 가지 일만 해야한다.
개방 폐쇄 : 모듈은 확장에는 개발되어야 하나, 변경에는 폐쇄되어야 함
ex) Shape 클래스가 있다 할때 그 밑에있는 서브클래스를 바꾸는 것은 되나, Shape클래스를 바꿔서는 안된다.
- 구현 방법 : 상속돠 다형성을 이용하라 shape라는 기본클래스를 추상클래스로 정의하고 Area를 추상 메소드로 정의하라.
리스코프 대체 : 서브 타입은 자신의 베이스 클래스로 대체 가능해야 함
ex) Shape 클래스의 서브클래스가 Circle이 있다 할 때, Circle을 Shape으로 표현 할 수 있어야 한다. 파생클래스를 만들 떄, 베이스 클래스의 기능을 교체해서는 아노니다. 단순히 확장해야함. 업캐스팅에 문제가 없어야 한다.
인터페이스 분리 : 관심의 대상이 되는 인터페이스만 분리하여 제공하여야 함
- 여러 클래스로 구성된 모듈을 클라이언트가 쉽게 사용하려면 추상화된 인터페이스를 제공하는 것이 좋음
- 즉, 관심의 대상이 되는 인터페이스만 분리하여 제공하여야 한다.
의존 관계 역전 : 자주 변경되는 구체적 클래스에 의존하지 말아야 함
- 자주 변경되는 구체적 클래스에 의존하지 말아야 한다는 어ㅜㄴ칙
1) 추상클래스나 인터페이스는 구체적 클래스보다 덜 변하기 때문에 가능하면 추상호된 클래스에 의존하게 하는 것이 좋음
참고 : 한빛아카데미, 소프트웨어공학설계