Encapsulation
[Abstraction](https://texonom.com/abstraction-b0560525e78846d4ba83075486e83dd9) 


## Capsulization, Information Hiding
keep details hidden
###  낮은 결합도와 높은 응집도를 유지할 수 있도록 설계
= 추상화 (멤버 변수 & 멤버함수 추가)
= 접근제한 지정
객체지향의 핵심인 캡슐화를 잘하기 위한 가장 간단한 방법은 추상화를 잘 하는 것
추상화는 데이터 위주의 성질(고전적 OOP), 형태(타입), 상태(데이터 주도 설계)와 관계 중심인 시간(절차지향), 행동(함수형), 정의(논리형), 상황(도메인 주도 설계, AOP) 등으로 나누어 생각할 수 있음


### Rules
- All member variables should be private
- Basic class operations should be
> - Public member functions
> - Friend or ordinary functions
> - Overloaded operators
- Make class implementation unavailable tousers of class

so separate interface file and implementation file

### Has-a
member relation unlike [OOP Inheritance](https://texonom.com/oop-inheritance-5ad9bda52b384b9fa235be27a85565a5)



> [객체지향 시스템과 패러다임 그리고 철학](https://black7375.tistory.com/86)





