<aside>
💡
프로그래밍을 처음 배울 때 설계가 아닌 사용하는 법을 먼저 배웠다.
객체지향은 설계 이론이다. 사용 이론이 아니며, 이점을 유의하며 추상화에 대해 접근해보자.
</aside>
- 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것
- 클래스들의 중요하고 공통된 성질들을 추출하여 부모 클래스를 선정
- 이벤트 발생의 정확한 절차나 방법을 정의하지 않고 대표할 수 있는 표현으로 대체
- 프로그래밍을 빠르게 설계하고 구현하기 위해 사용
제어 추상화
- 클래스의 메서드를 사용하는 유저에게 해당 메서드의 작동방식과 같은 내부 로직을 숨기는 것
- ex) 리스트의 원소의 개수를 얻고 싶은 경우
count
함수 사용.
- 유저가 원하는건 리스트의 원소의 수(결과)이며,
count
내부 동작 까지 이해할 필요가 없음.
- 내부 로직을 수정하더라도 외부 API는 그대로 유지되므로 사용자 코드에 영향을 미치지 않음. → 유지보수 향상
- 내부 구현을 감춤으로써 사용자는 메서드의 동작 원리를 몰라도 사용할 수 있음. → 복잡성 감소
데이터 추상화
- 대상을 간단한 개념으로
일반화
하는 과정
- 삼각형, 사각형, 원 → 도형
- 아이폰 → 휴대폰 → 통신기기 → 전자제품
- 추상화한 상위 요소부터 각 요소에 맞는 기능들을 정의한다.
- 전자제품 : 전원기능
- 통신기기 : 통화기능
- 휴대폰 : 카메라, 게임기능, 등
- 아이폰 : Apple제품연동기능
- 데이터 추상화를 상위 요소로 분리해 놓으면 상속을 통해 빠르게 구조를 확장할 수 있음.
- 휴대폰은 아이폰 뿐만이 아닌 갤럭시, 화웨이 등 다른 OS로 접근이 가능.
- 통신기기는 인터폰, 무전기 등으로 확장이 가능.
- 즉 종류가 늘어날 수록 장점으로 작용됨.