1. 객체지향 핵심 개념
1. 객체지향 관점
- 전통적인 관점: 프로그램 = 자료구조 + 알고리즘. 데이터와 프로시저가 독립적이라고 여김.(사실 x)
- 객체지향 관점: 프로그램 = 객체 + 객체, 객체 = 자료구조 + 알고리즘,
2. 캡슐화(Encapsulation)
: data와 operation을 캡슐화한다.
- encapsulation이 중요한 이유: 특정 data와 operation은 의미적으로 연관되어, 이들을 묶어 생각해야함.
3. 정보은닉(Information Hiding)
: 객체 지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법.
- 장점(2): 객체에 대한 추상적인 관점을 제공. 다른 객체에 영향을 안 주고 알고리즘 을 수정할 수 있음.
4. 객체란?
: data와 operation(작업)을 포함하는 모델이다. (encapsulation과 information hiding을 수행하는 방법.)
- 객체 특징(3): state(상태), well-defined behavior(잘 정의된 동작), uique identity(고유 식별자).
- 복합 객체(composite object): 다른 객체를 포함하고 있는 객체
5. 메시지
: 다른 객체에 접근하는 유일한 방법이다. behavior이나, protoxol로 알려져있다.
6. 클래스와 인스턴스
(1) 클래스: 소프트웨어에서 object type의 표현임.
(2) 인스턴스: 클래스로 부터 만들어진 객체.
7. 상속
- 부모클래스(super class)로 부터 자식클래스(subclass)가 상속받아 부모 클래스의 코드를 사용할 수 있음. 코드 중복 제거에 용이.
8. 추상클래스
: Instance를 못만드는 클래스. 탬플릿만 있기 때문에 호출하면 프로그램 다운됨.
- 추상클래스의 목적(2)(사실 먼소린지 모르겠)
+ 공통 동작의 완전한 기능 구현
+ 구체적인 하위 클래스 메서드로 정의되기를 의도한 동작 템플릿
- 추상 클래스 안에 추상메서드도, 일반 메서드도 있을 수 있음.
- 만약 추상클래스 A가 B에게 상속된다면, B에서 A의 추상 메서드가 정의되어야함.
- (추상 메서드는 추상 클래스 안에만 존재)
9. 다형성(Polymorphsim)
: 같은 이름의 메서드나 연산자가 다른 클래스에 대해 다른 동작을 하도록 하는 것을 말합니다.
- > 자바에서는 overloading과 overriding으로 구현.
- Overloading: 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것을 말합니다. 코드 재활용, 독자적인 기능 추가 가능.
- Onerriding: 같은 이름의 메서드를 다양한 매개변수 타입과 개수로 오버로딩하여 사용하는 것을 말합니다. 오버로딩은 메서드 이름을 동일하게 유지하면서도, 다양한 상황에서 유연하게 대응할 수 있는 방법을 제공합니다.
2. UML(Unified Modeling Language)
1. UML이란?
: 모델링 언어의 통합을 위한 표준.
- UML은 데이터 모델링, 객체 모델링, 컴포넌트 모델링을 포함.
- 시각화, 명세화, 문서화하기 위한 표준 언어
2. UML 종류
아래에서 볼 diagram(5)
- 유즈케이스 다이어그램: use case와 actor를 사용해 시스템의 경계와 주요 기능 추출.(인터렉션 다이어그램으로 각 use case 설명.)
- 순차 다이어그램: 인터렉션 다이어그램에 포함됨(각 유즈케이스 설명)
- 통신 다이어그램
- 클래스다이어그램: 시스템의 정적인 구조 표현
- 상태 다이어그램: 객체들의 행동 표현
- 컴포넌트 다이어그램: 시스템의 물리적인 구조 표현
- 배치 다이어그램(Deployment): 시스템의 물리적인 구조 표현
- 액티비티 다이어그램: 시스템의 전반적인 흐름 표현
3. 유즈케이스 다이어그램(usecase)
: 액터와 유즈케이스 관계를 도식화.
- 유즈케이스보다 액터를 먼저 찾자!(사용자를 찾고 그 시스템의적을 찾자!)
- 사용자의 요구사항을 더 잘 파악하기 위해 만듦.
4. 순차 다이어그램.(sequence)
: 시간 순서대로 하나의 유즈케이스를 설명.(interaction diagram에 포함됨.)
- 장점: 순서가 위에서부터 아래이므로 numbering이 필요없음.
- 단점: 공간의 제약이 있음.
5. 통신 다이어그램(communication)
: 객체관점에서 객체들의 상호작용 표시. 하나의 유즈케이스를 설명.(interaction diagram에 포함됨.)
- 장점: 공간의 제약이 없음.
- 단점: 순서를 한 눈에 알아보기 힘듦.
6. 클래스 다이어그램(class)
: 클래스들과 그들의 관계를 표시.
- 클래스 다이어그램의 요소
- 클래스와 구조 및 행위
- 클래스들 간의 관계(association, aggregation, dependency, ingeritance 등)
- 개수와 상호 참조 표시자
- 역할 이름
7. 상태 다이어그램(state machine)
: 클래스의 일생, 한 상태에서 다른 상태로 전이를 일으키는 사건, 상태 전이 결과인 행동을 표시.
8. 컴포넌트 다이어그램(communication)
: 소프트웨어 클래스, 물리적인 구조와 컴포넌트 사이의 의존 관계를 표시,
- 컴포넌트: 시스템의 기능을 정의. 한 개 이상의 클래스가 실형. 인터페이스를 제공.
- 산출물: 소스코드(.java) or 런타임(.exe, .jar, .dll)
9. 배치 다이어그램(Deployment)
: 런타임 프로세싱 요소들과 그 곳에서 운영할 소프트웨어 구성요소들을 표시.
- 전체 시스템 구성요소들의 배치 상황을 시각화
10. 액티비티 다이어그램
: 전체 시스템 작업 flow를 보여줌
11. UML 확장
: 스테레오타입을 사용해 사용자 정의 타입이나 아이템을 생성해서 UML 확장
'Computer Science > Software Engineering' 카테고리의 다른 글
[소공] 6장 설계 원리 (0) | 2023.10.28 |
---|---|
[소공] 5장 요구 모델링 (0) | 2023.10.27 |
[소공] 4장 요구 분석 (1) | 2023.10.09 |
[소공] 3장 프로젝트 관리와 계획 (1) | 2023.10.07 |
[소공] 2장 프로세스와 방법론 (0) | 2023.09.12 |