
은행 시스템에서 로그 추가하는것은 했는데 심플하게 한것 같지 않음
List을 쓰긴 했다.
내일은 연습문제 풀고 시험 볼 예정.
아래 사항을 외워야 하는지는 모르겠지만 공부하는 편이 나을듯
1 시스템 소프트웨어 (System Software)
컴퓨터 하드웨어를 제어하고 관리하며,
응용 소프트웨어가 실행될 수 있는 환경을 제공합니다.
2 응용 소프트웨어 (Application Software)
사용자가 특정 목적을 달성하기 위해 직접 사용하는 소프트웨어입니다.
흔히 '앱(App)'이라고 부르는 것들입니다.
생애주기 모형
폭포수 (Waterfall)
고전적인 생애주기
각 단계를 확실히 매듭짓고 다음 단계로 이동합니다.
불확실성이 없는 프로젝트 개발에 적합한 모형입니다.
요구사항->설계->구현->테스트->유지보수
프로토타입 모형 (Prototype)
폭포수 모형을 따르되 개발 초기에 요구사항을 바탕으로 프로토타입을 만듭니다.
실패 확률이 획기적으로 줄어듭니다.
나선처럼 점진적이고 반복적인 개발 과정
계획->위험분석->개발->평가
애자일 (Agile)
스크럼 (Scrum)
XP
칸반 (Kanban)
Lean
FDD (Feature-Driven Development)
스크럼 (Scrum)
폭포수 모형처럼 끝을 향해 달려가는 것이 아니라 요구 사항을 만족할 때까지 계속적으로 반복됩니다.
XP
계획 게임(Planning Game) 고객과 개발팀이 마치 게임을 하듯 협상을 진행합니다.
TDD(Test-Driven Development) 테스트 주도 개발. 즉 실제 코드를 작성하기 전에 테스트케이스 먼저 작성합니다.
전체 팀(Whole Team) 고객도 개발팀의 일원으로 생각합니다.
지속적인 통합(Continuous Integration) 지속적으로 통합하여 오류를 빠르게 발견하고 해결합니다.
리팩토링(Refactoring) 기능은 유지하면서 내부를 끈임없이 개선합니다.
소규모 릴리즈(Small Releases) 고객의 새로운 요구를 빠르게 반영하기 위해 배포를 작게 자주합니다.
공동 코드 소유(Collective Ownership) 팀원들이 구분없이 전체 소스 코드를 공유합니다.
시스템 은유(System Metaphor) 팀원들이 시스템을 쉽게 이해할 수 있도록 비유를 활용합니다.
단순한 설계(Simple Design) 현재의 요구사항에만 집중합니다. 불필요한 미래 예측은 복잡도를 높일 뿐입니다.
코딩 표준(Coding Standards) 코딩 표준에 따라 프로그래밍합니다. 누가 작성했든 일관된 결과를 얻을 수 있습니다.
요구사항
기능 요구사항 (Functional Requirements)
시스템이 무엇(What)을 해야하는지
비기능 요구사항 (Non-Functional Requirements)
시스템이 어떻게(How) 동작해야 하는지. 성능, 보안, 인터페이스 등 기능 요구사항을 제외한 모든 요구사항
사용자로부터 요구사항을 도출하고 정리하는 활동입니다.
프로젝트 일정 관리
1. PERT
3점 추정치
CPM (Critical Path Method)
간트 차트 (Gantt Chart)
S/W 아키텍처 패턴
계층형 패턴 (Layered Pattern)
클라이언트-서버 패턴 (Client-Server Pattern)
파이프-필터 패턴 (Pipe-Filter Pattern)
MVC 패턴 (MVC Pattern)
마스터-슬레이브 (Master-Slave)
브로커 (Broker)
피어투피어 (Peer-To-Peer)
블랙보드 (Blackboard)
인터프리터 (Interpreter)
S/W 설계 방법론
S/W 설계 도구
상세설계도구
클린코드 작성 원칙
객체-지향의 3대 구성요소
객체 (Object)
클래스 (Class)
데이터 (Data) : 객체의 속성이나 특성을 정의합니다
연산 (Operation) : 객체의 동작을 정의합니다
객체-지향의 4대 특징
객체-지향의 5대 설계 원칙
UML
관계종류
은행 앱
1. Account 계산을 한다. - 의존성 가질 필요 없음
2. BankAccountApp 실행을 맡는다. (의존성 완전 필요)
Account account = new Account();
TransactionManager transactionManager = new TransactionManager();
View view = new View();
Controller controller = new Controller(account, transactionManager, view);
Scanner scanner = new Scanner(System.in);
CommandHandler commandHandler = new CommandHandler(controller, scanner);
commandHandler.run();
scanner.close();
CommandHandler : 직접 명령을 받아 Controller에게 전송한다. 의존성 필요
private Controller controller;
private Scanner scanner;
Controller : 받은 돈을 Account에 떠 맡긴다. 로그함수도 불러서 처리한다. (의존성 필요)
private Account account;
private TransactionManager transactionManager;
private View view;
TransactionManager : log를 관리한다.
Private Listhistory = new ArrayList<>(); ->로그 전달해야 되기 때문
View : 첫화면과 거래 화면을 관리한다.
의존성과 List 필요 없지만 받는 메소드 필요