시험 준비_20260611

JAEWOONG LEE·2026년 6월 11일
post-thumbnail

은행 시스템에서 로그 추가하는것은 했는데 심플하게 한것 같지 않음
List을 쓰긴 했다.

내일은 연습문제 풀고 시험 볼 예정.

아래 사항을 외워야 하는지는 모르겠지만 공부하는 편이 나을듯

1 시스템 소프트웨어 (System Software)
컴퓨터 하드웨어를 제어하고 관리하며,
응용 소프트웨어가 실행될 수 있는 환경을 제공합니다.

  • 운영체제 (OS)
  • 유틸리티 (Utility)
  • 장치 드라이버 (Device Driver)
  • 컴파일러/인터프리터

2 응용 소프트웨어 (Application Software)
사용자가 특정 목적을 달성하기 위해 직접 사용하는 소프트웨어입니다.
흔히 '앱(App)'이라고 부르는 것들입니다.

생애주기 모형

  • 폭포수 (Waterfall)
    고전적인 생애주기
    각 단계를 확실히 매듭짓고 다음 단계로 이동합니다.
    불확실성이 없는 프로젝트 개발에 적합한 모형입니다.
    요구사항->설계->구현->테스트->유지보수

  • 프로토타입 모형 (Prototype)
    폭포수 모형을 따르되 개발 초기에 요구사항을 바탕으로 프로토타입을 만듭니다.
    실패 확률이 획기적으로 줄어듭니다.

  • 나선형 (Spiral)

나선처럼 점진적이고 반복적인 개발 과정
계획->위험분석->개발->평가

  • 애자일 (Agile)

  • 스크럼 (Scrum)

  • XP

  • 칸반 (Kanban)

  • Lean

  • FDD (Feature-Driven Development)

스크럼 (Scrum)
폭포수 모형처럼 끝을 향해 달려가는 것이 아니라 요구 사항을 만족할 때까지 계속적으로 반복됩니다.

XP

  • 의사소통 (Communication)
  • 단순성 (Simplicity)
  • 용기 (Courage)
  • 존중 (Respect)
  • 피드백 (Feedback)
  1. 피드백 (Fine-scale Feedback)
    짝 프로그래밍(Pair Programming) 두 사람이 짝을 지어 프로그래밍합니다. 한명은 코드를 쓰고 다른 한명은 실시간으로 검토합니다.

계획 게임(Planning Game) 고객과 개발팀이 마치 게임을 하듯 협상을 진행합니다.

TDD(Test-Driven Development) 테스트 주도 개발. 즉 실제 코드를 작성하기 전에 테스트케이스 먼저 작성합니다.

전체 팀(Whole Team) 고객도 개발팀의 일원으로 생각합니다.

  1. 지속적 프로세스 (Continuous Process)

지속적인 통합(Continuous Integration) 지속적으로 통합하여 오류를 빠르게 발견하고 해결합니다.

리팩토링(Refactoring) 기능은 유지하면서 내부를 끈임없이 개선합니다.

소규모 릴리즈(Small Releases) 고객의 새로운 요구를 빠르게 반영하기 위해 배포를 작게 자주합니다.

  1. 이해 공유 (Shared Understanding)

공동 코드 소유(Collective Ownership) 팀원들이 구분없이 전체 소스 코드를 공유합니다.

시스템 은유(System Metaphor) 팀원들이 시스템을 쉽게 이해할 수 있도록 비유를 활용합니다.

단순한 설계(Simple Design) 현재의 요구사항에만 집중합니다. 불필요한 미래 예측은 복잡도를 높일 뿐입니다.

코딩 표준(Coding Standards) 코딩 표준에 따라 프로그래밍합니다. 누가 작성했든 일관된 결과를 얻을 수 있습니다.

  1. 개발자 복지 (Programmer Welfare)
    지속 가능한 속도 (Sustainable Pace) 야근 등 초과 근무를 지양합니다.

요구사항

  • 기능 요구사항 (Functional Requirements)
    시스템이 무엇(What)을 해야하는지

  • 비기능 요구사항 (Non-Functional Requirements)
    시스템이 어떻게(How) 동작해야 하는지. 성능, 보안, 인터페이스 등 기능 요구사항을 제외한 모든 요구사항

사용자로부터 요구사항을 도출하고 정리하는 활동입니다.

  1. 요구사항 도출 (Elicitation)
  2. 요구사항 분석 (Analysis)
  3. 요구사항 명세 (Specification)
  4. 요구사항 확인 (Validation)

프로젝트 일정 관리
1. PERT
3점 추정치

  • 낙관치(Optimistic)
  • 기대치(Most Likely)
  • 비관치(Pessimistic)
  1. CPM (Critical Path Method)

  2. 간트 차트 (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 설계 방법론

  • 구조적 설계 (Structured Design)
    프로세스 중심(Process-Oriented)
    분할과 정복(Divide and Conquer)
  • 객체-지향 설계 (OOD)
    객체-부품
  • 컴포넌트-기반 설계 (CBD)

S/W 설계 도구

  • HIPO
  • UML
  • 기타 도구

상세설계도구

  • 플로우 차트 (Flow Chart)
  • N-S 차트

클린코드 작성 원칙

  • 가독성
  • 단순성
  • 의존성 배제
  • 중복성 최소화
  • 추상화

객체-지향의 3대 구성요소

  • 객체 (Object)

  • 클래스 (Class)
    데이터 (Data) : 객체의 속성이나 특성을 정의합니다
    연산 (Operation) : 객체의 동작을 정의합니다

  • 메시지 (Message)

객체-지향의 4대 특징

  • 상속 (Inheritance)
  • 추상화 (Abstraction)
  • 다형성 (Polymorphism)
  • 캡슐화 (Encapsulation)

객체-지향의 5대 설계 원칙

  • SRP : 단일 책임 원칙(Single Responsibility Principle)
  • OCP : 개방-폐쇄 원칙(Open-Closed Principle)
  • LSP : 리스코프 치환 원칙(Liskov Substitution Principle)
  • ISP : 인터페이스 분리 원칙(Interface Segregation Principle)
  • DIP : 의존 역전 원칙(Dependency Inversion Principle)

UML

  • 사물 (Things)
  • 관계 (Relationships)
  • 다이어그램 (Diagram)

관계종류

  • 연관 관계(Association)
  • 집합 관계(Aggregation)
  • 포함 관계(Composition)
  • 일반화 (Generalization)
  • 실체화 (Realization)
  • 의존 관계(Dependency)

은행 앱
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();
  1. CommandHandler : 직접 명령을 받아 Controller에게 전송한다. 의존성 필요
    private Controller controller;
    private Scanner scanner;

  2. Controller : 받은 돈을 Account에 떠 맡긴다. 로그함수도 불러서 처리한다. (의존성 필요)
    private Account account;
    private TransactionManager transactionManager;
    private View view;

  3. TransactionManager : log를 관리한다.
    Private Listhistory = new ArrayList<>(); ->로그 전달해야 되기 때문

  4. View : 첫화면과 거래 화면을 관리한다.
    의존성과 List 필요 없지만 받는 메소드 필요

profile
just for programming test

0개의 댓글