| 추상화 (모델링)
- 현실 세계의 객체에서 필요한 부분만 뽑아 클래스로 만드는 작업을 말한다.
추상화란 구체적인 것을 분해하여 관심 영역에 있는 특성만 가지고 재조립하는 것(= 모델링)
[출처] 스프링 입문을 위한 객체 지향의 원리와 이해
| 추상화가 모델링인 이유
관심 영역(앱의 경계)에 따라 클래스 모델링이 달라진다.
- 현실 세계에서 물리적으로는 동일한 실체에 대해서도 관심 영역(여기서는 애플리케이션에 적용할 영역)이 어디냐에 따라서, 클래스 모델링이 달라진다.
Ex. 사람(객체)을 동물로 본다면 "다리 갯수", "자손 생식 방식" 등을 보겠지만, 고객으로 본다면 "연령대", "지출금액" 등을 볼 것이다.
| 추상화의 예시
[1] 상속을 통한 추상화와 구체화
- 상속 관계에서 상위 클래스로 올라갈 수록 추상화/일반화가 이루어지며,
- 상속 관계에서 하위 클래스로 내려갈 수록 구체화/특수화가 이루어진다.
[2] 인터페이스를 통한 추상화
- 인터페이스를 통해 공통된 메소드를 하나로 묶어 주는 것도 추상화이다.
- 예시 ) Map 인터페이스로부터 파생된, Hashtable과 HashMap
* 두 객체는 기능적으로 거의 유사하지만 차이를 보인다.
* Hashtable의 경우 key에 null을 넣을 수 없지만 HashMap은 가능하며, Hashtable은 HashMap과 달리 멀티 쓰레드 환경에 우수하다.
// Map 인터페이스로부터 구현된 클래스들
// 1. Hashtable
Hashtable<Integer, Integer> ht = new Hashtable<>();
ht.put(0, 10);
System.out.println(ht.get(0));
// 2. HashMap
HashMap<Integer, Integer> hm = new HashMap<>();
hm.put(0, 10);
System.out.println(hm.get(0));
| UML 표현
- 앞에서 잠깐 언급했던 '사람'을 토대로 간단한 클래스 다이어그램을 만들면 아래와 같다.
Logical | Physical | ||||||
|
|
[참조]
- [스프링 입문을 위한 자바 객체 지향의 원리와 이해], 김종민
- 기타 블로그
'Language > Java' 카테고리의 다른 글
객체지향 언어의 특징 3_다형성 (사용 편의성) (0) | 2022.07.22 |
---|---|
객체지향 언어의 특징 2_상속 (재사용 + 확장) (0) | 2022.07.20 |
객체지향 프로그래밍이란? (0) | 2022.07.18 |
자바 설치부터 제어문까지 기본 핵심 복습 (0) | 2022.07.05 |
자바 기초 개념 정리 (0) | 2022.07.01 |