일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Linux
- 상속
- 책너두
- 성수핫플
- 헤드퍼스트디자인패턴
- 독서일지
- 코딩
- IntelliJ
- JavaScript
- 성수볼거리
- 객체지향프로그래밍
- 성수
- 헤드퍼스트
- 주니어개발자
- JAVA개발자
- DesignPattern
- 독서
- 깨끗한코드
- 성수맛집
- Java
- 클린코드
- 디자인패턴
- 직장인점심
- 성수직장인
- docker
- 객체지향
- 오브젝트
- 책읽기
- 직장인
- 개발자
- Today
- Total
닭발개발
[오브젝트] 19일차. 235-249pg | 모듈, 추상 데이터 타입 본문
[오브젝트] 19일차. 235-249pg | 모듈, 추상 데이터 타입
D269 2023. 7. 18. 17:4419일차.
오브젝트: 코드로 이해하는 객체지향 설계[4주차_월요일]
235-249pg
#요약
**Chapter 07. 객체 분해**
01. 프로시저 추상화와 데이터 추상화
02. 프로시저 추상화와 기능 분해
03. 모듈
1) 정보 은닉과 모듈
- 기능을 기반으로 시스템을 분해하는 것이 아니라 변경의 방향에 맞춰 시스템 변경
- 정보 은닉(information hiding) : 시스템을 모듈 단위로 분해하기 위한 기본 원리. 시스템에서 자주 변경되는 부분을 상대적으로 덜 변경되는 안정적인 인터페이스 뒤로 감춰야 한다.
- 기능 분해가 하나의 기능을 구현하기 위해 필요한 기능들을 순차적으로 찾아가는 탐색의 과정이라면 모듈 분해는 감춰야 하는 비밀을 선택하고 비밀 주변에 안정적인 보호막을 설치하는 보존의 과정
- 모듈이 감춰야 할 비밀 : 복잡성, 변경 가능성
2) 모듈의 장점과 한계
- 모듈의 장점
a. 모듈 내부의 변수가 변경되더라도 모듈 내부에만 영향을 미친다.
b. 비즈니스 로직과 사용자 인터페이스에 대한 관심사를 분리한다.
c. 전역 변수와 전역 함수를 제거함으로써 네임스페이스 오염(namespace pollution)을 방지한다.
- 모듈은 데이터와 함수가 통합된 한 차원 높은 추상화를 제공하는 설계 단위다.
- 모듈의 단점 : 인스턴스 개념 제공 안함.
- 추상화 메커니즘이 필요하기 때문에 추상 데이터 타입이 등장
04. 데이터 추상화와 추상 데이터 타입
1) 추상 데이터 타입
- 타입(type) : 변수에 저장할 수 있는 내용물의 종류와 변수에 적용될 수 있는 연산의 가짓수
- 타입은 저장된 값에 대해 수행될 수 있는 연산의 집합을 결정하기 때문에 변수의 값의 행동을 예측 가능하게 함.
- 프로시저 추상화를 보완하기 위해 나타난 데이터 추상화(data abstraction)
- 추상 데이터 타입을 구현하기 위해 필요한 것
a. 타입 정의 선언 가능
b. 타입의 인스턴스를 다루기 위해 사용할 수 있는 오퍼레이션의 집합 정의 가능
c. 제공된 오퍼레이션을 통해서만 조작할 수 있도록 데이터를 외부로부터 보호가능
d. 타입에 대해 여러 개 인스턴스 생성 가능
- 클래스는 추상 데이터 타입인가?
05. 클래스
1) 클래스는 추상 데이터 타입인가?
- 클래스와 추상 데이터 타입 모두 외부에서는 객체의 내부 속성에 직접 접근할 수 없으며 오직 퍼블릭 인터페이스를 통해서만 외부와 의사소통 할 수 있음.
- 하지만 정확히는 클래스=/=추상 데이터 타입
- 핵심 차이! 클래스는 상속과 다형성을 지원하는 데 비해 추상 데이터 타입은 지원하지 못함.
- 둘을 구분하기 위해 상속과 다형성을 지원하면 객체지향 프로그래밍, 지원하지 않는 추상 데이터 타입 기반의 프로그래밍 패러다임을 객체기반 프로그래밍 이라고 한다.
- 추상 데이터 타입은 타입을 추상화한 것, 클래스는 절차를 추상화한 것.
- 추상 데이터 타입은 오퍼레이션을 기준으로 타입을 묶고, 객체지향은 타입을 기준으로 오퍼레이션을 묶는다.
2) 추상 데이터 타입에서 클래스로 변경하기
'책책책 책을 읽읍시다‼ ver.개발 > [ 오브젝트: 코드로 이해하는 객체지향 설계 ]' 카테고리의 다른 글
[오브젝트] 21일차. 264-276pg | 의존성, 명시적의존성, new (0) | 2023.07.19 |
---|---|
[오브젝트] 20일차. 250-263pg | 변경과 의존성 (0) | 2023.07.18 |
[오브젝트] 18일차. 225-234pg | 하향식 기능 분해 (0) | 2023.07.13 |
[오브젝트] 17일차. 214-224pg | 계약에 의한 설계, 프로시저 추상화, 데이터 추상화, (0) | 2023.07.13 |
[오브젝트] 16일차. 199-213pg | 명령-쿼리 분리 법칙, 참조 투명성 (0) | 2023.07.13 |