컴퓨터 그래픽스컴퓨터의 도움으로 영상을 창조(create), 조작(manipulate), 저장(store), 표현(display)하는 것영상을 만들고 조작하는 것 뿐만 아니라 저장하고 출력하는 입출력도 포함된 개념이다. 컴퓨터 그래픽스도 다른 컴퓨터 작업과 마찬가지로 어떤 일이 주어졌을 때, 이를 수학적으로 잘 표현한 뒤이를 기반으로 알고리즘 또는 슈도 코드를 작성하는 과정을 거친다. 컴퓨터 그래픽스는 다양한 분야에서 사용된다.게임, 애니메이션과 같은 엔터테이먼트 분야, 시뮬레이션, CAD, 과학 연구의 시각화, 의학, 교육, VR, AR 등에서 활용될 수 있다. 그래픽스의 역사는 1950년대부터 시작되었다.1950년대에는 CRT 디스플레이, 라이트 펜을 이용한 드로잉, 벡터 그래픽의 시대였다.이때 t..
C 라는 절차지향 언어에서 C++ 이라는 객체지향 언어가 등장한 이유는 '모듈화' 때문이다.모듈화를 한다는 것은 소스코드의 각 조각을 독립적으로 만든다는 것이고,각 조각이 독립적이라는 것은 다른 소스코드에 의존하지 않는다는 것이다.또한 각 조각은 필요에 따라 얼마든지 쉽게 '재사용' 될 수 있다. 객체지향에서 소스코드를 재사용하기 위한 제일 핵심적인 개념은 '캡슐화(encapsulation)' 이다.필요한 행위만 외부에 보여주고 나머지 디테일한 구현은 다 숨기는 것이다. 캡슐화를 할 때는 2가지를 지켜야 한다.1. 외부에 보여질 인터페이스의 수 (public function) 를 최소화해야 한다.2. 인터페이스를 한번 정의할 때, 시간이 지나도 수정되지 않도록 잘 정의해야 한다. 지금까지는 캡슐화의 범위..
지금까지 requirement description 을 기반으로 커뮤니케이션 다이어그램 또는 시퀀스 다이어그램을 그린 뒤, 이 결과를 클래스 다이어그램으로 변환하는 모든 과정을 살펴보았다.이번 글에서는 사용자 UI 를 설계하는 과정을 더 자세히 정리한다. 우리는 시스템 아키텍처를 설계할 때 boundary class, control class, entity class 3가지 종류로 구분하여 설계하였다.이를 가리켜 3-tier architecture 라고도 부른다. boundary class 는 presentation layer 라고도 부르며,사용자 또는 다른 외부 시스템에서 사용하는 인터페이스를 다루고,사용자가 데이터를 입력할 수 있는 매커니즘을 제공하며,인터페이스에 가지고 있는 데이터를 적절하게 포맷팅..
지난 글에서는 커뮤니케이션 다이어그램 대신 그릴 수 있는 시퀀스 다이어그램에 대해 정리하였다.이번 글에서는 커뮤니케이션 다이어그램 / 시퀀스 다이어그램을 통해 그렸던 analysis class diagram 에 detailed design 을 추가하는 방법을 정리해본다. 클래스 다이어그램에 detailed design 을 추가하는 것은 다음 작업들을 하는 것이다. 1. 어트리뷰트 타입 추가클래스 다이어그램에 어트리뷰트를 기술할 때는 다음과 같이 기술한다. 이름 : 타입 = 초기값 {특성 값} 특성 값에는 constant, fixed, not null 과 같은 특성을 기술한다.이름 앞에 / 를 붙이면 상속받은 (derived) 특성을 나타내고, 밑줄을 그으면 class-scope(static) 변수를 나타..
지난 글에서는 use case description 으로부터 시스템을 설계하는 class diagram 을 만드는 과정을 정리하였다.이때 중간에 오브젝트 간 상호작용을 표현하는 방법으로서 communication diagram 으로 상호작용을 표현했다.이번 글에서는 sequence diagram 이라는 또 다른 오브젝트 간 상호작용 표현 방법을 정리해본다. Sequence Diagram시퀀스 다이어그램은 오브젝트간 상호작용을 시간순으로 나타낸 다이어그램이다.그리고 이 상호작용의 디테일 정도는 계층을 나눠서 필요한 만큼만 표현한다.한번에 모든 상호작용의 전체 디테일을 다 표현하면 너무 복잡하기 때문이다. 시퀀스 다이어그램은 클래스 다이어그램을 그리기 전 커뮤니케이션 다이어그램 대신에 그릴 수 있는 다이어그..
소프트웨어 개발의 주요 단계를 다시 정리해보면 다음의 5단계를 거쳐서 소프트웨어를 개발한다. 1. specification2. design3. implementation4. test5. maintenance specification 단계에서는 사용자의 요구사항을 파악하고, use case diagram 을 통해 시스템의 기능을 시각화하였다.그리고 사용자의 액션에 따라서 시스템이 어떻게 응답해야 하는지 use case description 을 작성하여 시스템에서 개발해야 하는 부분이 어디인지 명확하게 정의하였다. 이번 글부터는 design 단계를 진행한다.design 단계에서는 앞서 파악한 요구사항을 분석하여, 실제로 프로그램을 개발할 때 어떤 클래스와 메서드를 사용할 지 설계한다.이 과정을 마치고나면 커..
지난 글에서는 뉴럴 네트워크와 역전파에 대해 정리하였다. 뉴럴 네트워크는 기계학습에서 학습시키는 함수의 새로운 형태로, 여러 단위 함수의 중첩함수 형태이다.뉴럴 네트워크를 학습시킬 때도 로스를 구해서 로스의 값이 줄어드는 방향으로 학습시키게 되는데, 경사하강법을 사용하는 경우 미분 값이 필요하다. 여러 함수들이 합성된 뉴럴 네트워크에서 미분값을 구하기 위해, 데이터를 넣어서 전체 값을 계산하는 추론 과정과, 해당 값을 이용해서 각 레이어의 미분값을 구하는 학습 과정이 일어난다.학습 과정에서는 역전파를 통해 각 레이어의 미분값을 구해두고, 업데이트 하려는 값에 대해서만 미분값을 활용하여 경사하강법과 같은 방식으로 다음 w 값을 업데이트 한다. 이번 글에서는 CNN 에 대해서 정리해보려고 한다.사실 딥러닝..
Configuration Management (CM)CM은 소프트웨어 시스템의 변화를 관리하는 도구, 프로세스, 정책과 관련된 개념이다.특히 팀 프로젝트를 하다보면 각 개발자들이 서로 다른 변화를 만들어내기 때문에 이 변화들을 관리하기 위해 필수적이다. 소프트웨어 컴포넌트의 확정된 변경사항은 버전별로 repository 라는 공동 저장소에 저장되어 있고, 개발자들은 repository 에 있는 코드를 자신의 workspace 로 가져와서 개발한다. CM 에서 수행하는 활동은 크게 4가지가 있다. 1. version management시스템 컴포넌트를 버전 별로 추적 관리하는 것 2. system building컴포넌트, 데이터, 라이브러리를 모아서 하나의 실행가능한 프로그램으로 만드는 것 3. chan..
Use Case Diagramuse case diagram 을 그리는 목적은 크게 2가지가 있다. 1. 시스템의 functionality (functional requirement) 를 '사용자의 관점'에서 문서화하는 것2. 사용자와 시스템 사이의 상호작용을 use case description을 사용해 문서화하는 것 이때 use case description 을 작성하면, 시스템 관점에서 어떤 기능을 개발해야 하는지 명료하게 정리된다.그러면 이 내용을 기반으로 시스템을 설계하고 구현하면 끝이다. use case diagram은 철저하게 '사용자의 관점' 에서 작성해야 한다.사용자가 로그인 화면에서 아이디와 비밀번호를 입력하고 로그인 버튼을 클릭했을 때, 시스템이 사용자 정보를 DB에서 조회하고.. 하는..