개발의변화
0709 복습 본문
디자인 패턴 유형
- 목적
생성: 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴
구조: 더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴
행위: 클래스나 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴
- 범위
클래스: 클래스 간 관련성, 컴파일 타임에 정적으로 결정
객체: 객체 간 관련성을 다루는 패턴, 런타임에 동적으로 결정
디자인 패턴 종류
-생성
Builder : 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리함으로 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있는 패턴
Prototype: 처음부터 일반적인 원형을 만들어 놓고, 그것을 복사한 후 필요한 부분만 수정하여 사용하는 패턴
Factory Method: 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식
Abstract Factory: 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
Singleton: 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하여, 생성된 객체를 어디에서든지 참조 할 수 잇도록 하는 디자인 패턴
-구조
Bridge: 기능클래스와 구현클래스 연결, 구현클래스에서 추상클래스 분리하여 -> 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 패턴
Decorator: 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴
Facade: 복잡한 시스템에 대하여 단순한 인터페이스를 제공함으로써 사용자와 시스템 간 또는 여타 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게 하는 패턴으로 오류에 대해서 단위별로 확인할 수 있게 함
Proxy: '실체 객체에 대한 대리 객체'로 실체 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 만들며, 이 점을 이용해서 미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 할당하게 하여 메모리 용량을 아낄수 있음
Composite: 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴
Adapter: 기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할
-행위
Mediator: 객체의 수가 너무 많아지면 서로 간 통신을 위해 복잡해져서 중간에 이를 통제하고 지시할 수 있는 역할의 중재자 두기
Interpreter: 언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴
Iterator: 컬렉션 구현 방법을 노출시키지 않으면서도 반복자를 사용하여 접근할 수 있는 디자인 패턴
Template Method: 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
Observer: 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고 자동으로 내용이 갱싱되는 방법을 가지면서 결합하는 디자인 패턴
State: 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경하여, 변경 시 원시 코드의 수정을 최소화할 수 있고, 유지보수의 편의성도 가짐
Visitor: 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴
Command: 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계한느 패턴
요구사항의 분류
기능적 요구사항: 시스템이 제공하는 기능, 서비스에 대한 요구사항
비기능적 요구사항: 시스템이 수행하는 기능 이외의 사항, 시스템 구축에 대한 제약사항에 관한 요구사항
UI요구사항 확인
UI(사용자 인터페이스)
넓은 의미에서 사용자와 시스템 사이에서 의사소통할 수 있도록 고안된 물리적, 가상의 매개체
CLI: 명령어를 텍스트로 입력하여 조작하는 사용자 인터페이스
GUI: 그래픽 환경을 기반으로 한 마우스나 전자펜을 이용하는 사용자 인터페이스
NUI: 키보드나 마우스 없이 신체 부위를 이용하는 사용자 인터페이스
OUI: 현실에 존재하는 모든 사물이 입출력장치로 변화할 수 있는 사용자 인터페이스
UI 설계 원칙
직관성: 누구나 쉽게 이해하고, 쉽게 사용할 수 있어야 함
유효성: 정확하고 완벽하게 사용자의 목표가 달성될 수 있도록 제작
학습성: 초보와 숙련자 모두가 쉽게 배우고 사용할 수 있게 제작
유연성: 사용자의 요구사항을 최대한 수용하고 실수를 방지하도록 제작
UML
객체 지향 소프트웨어 개발 과정에서 산출물을 명세화, 시각화, 문서화할 때 사용되는 모델링 기술과 방법론을 통합해서 만든 표준화된 범용언어
UML의 3요소
사물: 추상적인 개념으로 주제를 나타내는 요소(단어 관점에서 '명사' 또는 '동사'를 의미)
관계: 사물의 의미를 확장하고 명확히 하는 요소, 사물과 사물을 연결하여 관계를 표현하는 요소 (단어 관점에서 '형용사' 또는 '부사'를 의미
다이어그램(Diagrams): 사물과 관계를 모아 그림으로 표현한 형태
UML확장 모델의 스테레오 타입
UML의 스테레오 타입은 UML의 기본적 요소 이외의 새로운 요소를 만들어내기 위한 매커니즘
구조적 다이어그램
클래스
객체 지향 모델링 시 클래스의 속성 및 연산과 클래스 간 정적인 관계를 표현한 다이어그램
클래스: 공통의 속성, 연산, 관꼐, 의미를 공유하는 객체들의 집합
속성: 클래스의 구조적 특성에 이름을 붙인 것이므로 특성에 해당하는 인스턴스가 보유할 수 있는 값의 범위 기술
연산: 이름, 타입, 매개변수들과 연관된 행위를 호출하는데 요구되는 제약사항들을 명시하는 클래스의 행위적 특징
접근 제어자: -(클래스 내부 접근만 허용private), +(클래스 외부 접근을 허용public), #(동일 패키지/파생 클래스에서 접근 가능(protected), ~(동일 패키지 클래스에서 접근 가능(default)
연관 관계 : 연관 관계는 클래스가 서로 개념적으로 연결되어 있는 선 , 2개 이상의 사물이 서로 관련되어 있는 상태를 표현
의존 관계: 하나의 클래스가 또 다른 클래스를 사용하는 관계, 사물 사이에 서로 연관은 있으나 필요에 따라 서로에게 영향을 주는 짧은 시간동안만 연관을 유지하는 관계를 표현
일반화 관꼐: 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지를 표현
실체화 관계: 추상 클래스나 인터페이스를 상속받아 자식클래스가 추상 메서드를 구현할 떄 사용
포함(composition) 관계: 영구적이고, 집합 관계보다 더 강한 관계로 구성, 포함되는 쪽에서 포함하는 쪽으로 속이 채워진 마름모 연결
집합(Aggregation) 관계: 하나의 객체에 여러 개의 독립적인 객체들이 구성되는 관계, 집합 관계는 하나의 사물이 다른 사물에 포함되어 있는 관계 표현
객체
컴포넌트
시스템을 구성하는 물리적인 컴포넌트와 그들 사이의 의존 관계를 나타내는 다이어그램
배치
복합체 구조
패키지
시스템의 서로다른 패키지들 사이의 의존 관계를 표현하기 위한 다이어그램
행위적 다이어그램
유스케이스
시스템이 제공하고 있는 기능 그와 관련된 외부 요소를 사용자의 관점에서 표현하는 다이어그램
시퀀스
객체 간 상호작용을 메시지 흐름으로 표현한 다이어 그램
커뮤니케이션
시퀀스 다이어그램과 같이 동작에 참여하는 개체들이 주고받는 메세지를 표현하고, 메세지뿐만 아니라 객체 간의 연관까지 표현하는 다이어그램
상태
하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지 표현하는 다이어그램
활동
시스템이 어떤 기능을 수행하는지를 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서대로 표현하는 다이억르매
타이밍
데이터 모델은 현실 세계의 정보를 인간과 컴퓨터가 이해할 수 있도록 표현한 모델
연산(Operation): 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세
구조(Structure): 데이터베이스에 논리적으로 표현될 대상으로서의 개체 타입과 개체 타입의 관계
제약 조건(Constraint): 데이터베이스에 저장될 수 있는 실제 데이터의 논리적인 제약조건
개념적 설계
사용자의 요구에 대한 트랜잭션을 모델링 하는 단계
개념적 데이터 모델은 현실 세계에 대한 인식을 추상적, 개념적으로 표현하여 개념적 구조를 도출하는 데이터 모델
ER 다이어그램과 연관
논리적 설계
트랜잭션의 인터페이스를 설계하는 단계
DBMS에 맞는 논리적 스키마를 설계하는 단계
논리적 설계 단계에서 정규화를 수행
물리적 설계
논리 데이터 모델을 특정 DBMS의 특성 및 성능을 고려하여 물리적인 스키마를 만드는 단계
논리 데이터 모델을 사용하고자 하ㄴ는 각 DBMS의 특성을 고려하여 데이터베이스 저장 구조로 변환하는 모델
논리적 데이터 모델링 종류
관계 데이터 모델
논리적 구조가 2차원 테이블 형태로 구성된 모델
기본 키와 이를 참조하는 외래 키로 관계 표현
계층 데이터 모델
논리적 구조가 트리 형태로 구성된 모델
상하관계 존재한다
1:N 관계만 허용
네트워크 데이터 모델
논리적 구조가 그래프 형태로 구성된 모델
상위와 하위 레코드 사이에 다대다 관계를 만족하는 구조
관계 데이터 모델
릴레이션: 행(Row)와 열(Column)로 구성된 테이블
튜플: 릴레이션의 행(Row)에 해당되는 요소
속성: 릴레이션의 열(Column에 해당되는 요소
카디널리티: 튜플(Row)의 수
차수: 애트리뷰트(Column)의 수
스키마: 데이터베이스의 구조, 제약 조건 등의 정보를 담고 있는 기본적인 구조
인스턴스: 정의된 스키마에 따라 생성된 테이블에 실제 저장된 데이터의 집합
관계 대수
관계형 데이터베이스에서 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적 정형 언어
관계 대수 연산자 종류
관계해석
튜플 관계 해석과 도메일 관계 해석을 하는 비절차적 언어이다.
논리 데이터 모델링 속성
개체: 관리할 대상이 되는 실체
속성: 관리할 정보의 구체적 항목
관계: 개체 간의 대응 관계
개체-관계(E-R) 모델
현실 세계에 존재하는 데이터와 그들 간의 관꼐를 사람이 이해 할 수 있는 형태로 명확하게 표현하기 위해서 가장 널리 사용되고 있는 모델
개체-관계 다이어 그램
정규화
이상 현상
삽입 이상: 정보 저장 시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우
삭제 이상: 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우
갱신 이상: 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우
함수 종속
부분 함수 종속(Partial Functional Dependency)
릴레이션에서 기본 키가 복합 키일 경우 기본 키를 구성하는 속성 중 일부에게 종속된 경우
완전 함수 종속(Full Functional Dependency)
릴레이션에서 X->Y 관계가 있을 떄, Y는 X의 전체 속성에 대해 종속하고, 부분 집합 속성에 종속하지 않는 경우
이행 함수 종속(Transitive Functional Dependency)
릴레이션에서 X->Y, Y->Z 종속 관계가 있을 때, X->Z가 성립되는 경우
정규화
1정규형(1NF): 원자값으로 구성
2정규형(2NF): 부분 함수 종속 제거(완전 함수적 종속 관계)
3정규형(3NF): 이행함수 종속 제거
보이스-코드 정규형(BCNF): 결정자 후보 키가 아닌 함수 종속 제거
4정규형(4NF): 다치 종속 제거
5정규형(5NF): 조인 종속 제거
반 정규화
정규화된 엔티티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
반 정규화(비정규화) 기법
테이블 병합 - 1:1 관계, 1:M관계를 통합하여 조인 횟수를 줄여 성능을 향상
데이터 분할: 테이블을 수직 또는 수평으로 분할하는 것을 파티셔닝이라고 함(수평 분할: 테이블 분할에 레코드를 기준으로 활용, 수직 분할: 하나의 테이블이 가지는 컬럼의 개수)
중복 테이블 추가: 대량ㅇ
1. 집계 테이블 추가
집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하여 사용하는 것으로, 트리거의 오버헤드 유의
2. 진행 테이블 추가
이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정
3. 특정 부분만을 포함하는 테이블 추가
데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블 생성
컬럼
조인 성능 향상을 위한 중복 허용
관계
데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만, 이때 발생할 수 있는 성능 저하를 예방하기 위해 추가적 관계를 맺는 방법
데이터베이스 무결성:
데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 성질
개체 무결성: 한 엔터티에서 같은 기본 키를 가질 수 없거나, 기본 키의 속성이 NULL을 허용할 수 없는 제약조건
참조 무결성: 외래 키가 참조하는 다른 개체의 기본 키에 해당하는 값이 기본 키값이나 NULL이 되어야 하는 제약 조건
속성 무결성: 속성의 값은 기본값, NULL 여부, 도메인이 지정된 규칙을 준수해야 하는 제약조건
사용자 정의 무결성: 사용자의 의미적 요구사항을 준수해야 하는 제약 조건
키 무결성: 한 릴레이션에 같은 키값ㅇ르 가진 튜플들을 허용할 수 없는 제약조건
키
유일성: 식별자에 의해 엔터티 타입 내에 모든 엔터티들이 유일하게 구분
최소성: 최소한이 속성으로 식별자 구성
기본 키: 테이블의 각 튜플들을 고유하게 식별하는 칼럼
대체 키: 후보 키 중에서 기본 키로 선택되지 않은 키
후보 키: 테이블에서 각 튜플을 구별하는 데 기준이 되는 칼럼
슈퍼 키: 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족하지 못하는 키
외래 키: 테이블 간 참조 데이터 무결성을 위한 제약 조건
인덱스 설계
인덱스 개념
- 검색 연산의 최적화를 위해 데이터베이스 내 열에 대한 정보를 구성한 데이터구조
- 인덱스를 통해 전체 데이터의 검색 없이 필요한 정보에 대해 신속한 조회 가능
인덱스 적용 기준
분포도 = (1/ (컬럼 값의 종류)) X 100
분포도 = (컬럼 값의 평균 ROW 수) / (테이블의 총 Row 수) X 100
파티셔닝
테이블 또는 인덱스 데이터를 파티션(Partition) 단위로 나누는 기법
1. 레인지 파티셔닝(Range Partitioning)
연속적인 숫자나 날짜를 기준으로 하는 파티셔닝 기법이다.
손쉬운 관리 기법을 제공하여 관리 시간의 단축이 가능하다
2. 해시 파티셔닝(Hash Partitioning)
파티션 키의 해시 함수 값에 의한 파티셔닝 기법
균등한 데이터 분할이 가능하고 질의 성능이 향상 가능하다.
3. 리스트 파티셔닝(List Partitioning)
특정 파티션에 저장 될 데이터에 대한 명시적 제어가 가능한 파티셔닝 기법
분포도가 비슷하고 데이터가많은 SQL에서 컬럼의 조건이 많이 들어오는 경우 유용하다.
4. 컴포지트 파티셔닝
2개 이상의 파티셔닝을 결합하는 파티셔닝 기법이다.
큰 파티션에 대한 I/O 요청을 여러 파티션으로 분산할 수 있다.
5. 라운드로빈(Round-Robin)
라운드로빈으로 회전하면서 새로운 행을 파티션에 할당하는 기법
대이터 마이닝 개념
대규모로 저장된 데이터 안에서 체계적이고 자동적으로 통계적 규칙이나 패턴을 찾아내는 기술
대규모 데이터에서 의미 있는 패턴을 파악하거나 예측하여 의사결정에 활용하는 기법