일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 순열
- dfs
- python
- 어려웠던 문제
- 최소공배수
- 문자열
- 조합
- 튜플
- HashMap
- 점프와 순간이동
- 에라토스테네스의 체
- 메뉴리뉴얼
- 프로그래머스
- 동적계획법
- 2017 카카오 코드
- 규칙찾기
- pandas
- Java
- fragment identifier
- Dynamic Programming
- 후위 표기법
- Stack
- 보이어무어
- 쿼드압축 후 개수세기
- 완전 탐색
- 알고리즘
- 영문자 확인
- 완전탐색
- HashSet
- 반복문
- Today
- Total
csmoon1010의 SW 블로그
<소프트웨어 설계> - (3) 애플리케이션 설계 ( 객체지향 ) 본문
[3. 객체지향(Objected-Oriented]
1. 객체지향의 개요
: 현실세계의 개체(Entity)를 하나의 객체(Object)로 만들어 SW개발 시 조립해서 작성할 수 있는 기법
(1) 배경 : 구조적 기법의 문제점 해결
- 구조적 기법 : 프로시저에 근간을 두고 하나의 커다란 작업을 여러개의 작은 작업으로 분할
→ 모듈 : 각각의 소작업 수행 → 한 곳에 모아 하나의 프로그램으로
- 문제점
- 개발 공정에만 치우침(유지보수 고려X)
- 개발 시작 후 추가적인 요구사항 대응 어렵
- 재사용의 어려움 → 인력, 시간 소모
(2) 특징
- 구조의 단계적, 계층적 표현
- 멀티미디어 데이터 및 병렬 처리 지원
(3) 장점
- 재사용 및 확장이 쉬움
- 고품질의 SW를 빠르게 개발
- 유지보수의 용이성
- 의사소통 : 현실세계의 모형화 → 개발자, 사용자의 의사소통
2. 객체지향의 구성요소
<객체(Object)>
(1) 의미 : 데이터 + 함수를 묶어 놓은(캡슐화한) 하나의 소프트웨어 모듈
**데이터 : 객체가 가지고 있는 정보 (속성, 상태, 변수, 상수, 자료 구조)
**함수 : 객체가 수행하는 기능. 객체의 데이터를 처리하는 알고리즘. (메소드, 서비스, 동작, 연산)
(2) 특성
- 이름 : 독립적으로 식별 가능한 이름
- 상태(State) : 객체가 가질 수 있는 조건. 시간에 따라 변화.
- 관계 : 객체와 객체 간의 상호 연관성에 의해 형성
- 행위 : 객체가 반응할 수 있는 메시지(Message)의 집합
- 일정한 기억장소 가짐
- 메소드 : 다른 객체로부터 메시지를 받았을 때 "정해진 기능" 수행
<클래스(Class)>
(1) 의미 : 공통된 속성과 연산(행위)를 갖는 객체의 집합 = 객체의 일반적인 타입(틀)
(2) 인스턴스(Instance) : 클래스에 속한 각각의 객체
(3) 인스턴스화(Instantiation) : 클래스로부터 새로운 객체 생성
(4) 최상위 클래스 : 상위 클래스를 갖지 않는 클래스
(5) 슈퍼 클래스(Super Class) : 특정 클래스의 상위(부모) 클래스
(6) 서브 클래스(Sub Class) : 특정 클래스의 하위(자식) 클래스
3. 객체지향의 기본 원리
<캡슐화(Encapsulation)>
(1) 의미 : 데이터와 함수를 하나로 묶는 것
(2) 장점
- 정보 은닉 : 외부 모듈의 변경으로 인한 파급 효과가 적음
- 재사용의 용이
- 단순한 인터페이스, 낮은 결합도
<정보 은닉(information hiding)>
(1) 의미 : 캡슐 속에 있는 객체의 상세한 내용을 외부에 철저히 숨기는 것
(2) 특징
- 메시지만으로 객체와 상호작용하도록 구성 → 단순화, 독립성, 유지보수성, 이식성
- 인터페이스 : 외부에 노출된 부분
- 구현 : 내부에 숨겨진 부분
(3) 구현 방식 : 접근지정자 (public/private/protected)
(참고 - [Programming Language/Java] - 접근지정자와 static, final )
<상속(Inheritance)>
(1) 의미 : 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스)가 물려받음
(2) 특징
- 상위 클래스의 모든 속성과 연산을 다시 정의하지 않고 사용 가능(재사용성)
- 새로운 속성과 연산의 첨가 가능 (확장성)
(3) 다중 상속(Multiple Inheritance)
: 한 개의 클래스가 "두 개 이상의 상위 클래스"로부터 속성과 연산을 상속받음
- 복잡한 계층, 상속 순서 추적의 어려움
- 다른 클래스에 영향을 줄 수 있으니 신중히 사용
<다형성(Polymorphism)>
(1) 의미 : 하나의 메시지에 대해 각각의 객체가 가지고 있는 "서로 다른 고유한 방법(특성)"으로 응답할 수 있는 능력
(2) 오버라이딩(Overriding)
: 상속을 통해 받은 상위 클래스의 메소드를 확장
(3) 오버로딩(Overloading)
: 같은 이름의 메소드 + 다른 인자 개수, 자료형
'전공 필기 > SW공학' 카테고리의 다른 글
<소프트웨어 설계> - (3) 애플리케이션 설계 ( 디자인 패턴 ) (0) | 2021.02.02 |
---|---|
<소프트웨어 설계> - (3) 애플리케이션 설계 ( 코드 ) (0) | 2021.02.01 |
<소프트웨어 설계> - (3) 애플리케이션 설계 ( 모듈 ) (0) | 2021.01.02 |
<소프트웨어 설계> - (3) 애플리케이션 설계 ( SW아키텍처 ) (0) | 2021.01.01 |
<소프트웨어 설계> - (2) 화면 설계 (0) | 2020.12.26 |