추상화(abstract)란 뭘까?
추상화란 뭘까..
일단 나는 아래와 같이 생각했다.
- 추상화 대상의 세부(구체적인) 규칙은 제거하고, 핵심 규칙만 싹 발라내는 것
- 따라서 세부 규칙이 바뀌어도 영향이 없게끔 만드는 것
- 즉 사용처에서는 세부 구현 방식은 전혀 모르게끔 하는 것.
예시가 뭐가있을까? 일상생활에서도 많다.
예를들면..냄비를 생각해보자
냄비의 역할은
- 액체나 고체(?)등 음식 및 여러가지를 넣을 수 있음.
- 가열이 가능함
- 전자레인지 조리도 가능함
이다.
저 세개의 규칙을 통해서 라면도 끓일 수 있고, 행주도 삶을 수 있고, 밥도 지을 수 있다. 심지어 호빵도 찔 수 있다.
그리고 우리는 냄비가 '어떻게' 가열이 가능한건지 몰라도 쉽게 여러 요리를 할 수 있다.
그럼 추상화를 왜할까?
- 추상화는 세부구현을 감추고 단순하게 표현한다.
- 따라서 사용자가 세부 원리/규칙을 몰라도 기능을 활용할 수 있게끔 만들어준다.
- 요렇게 복잡한 기능을 추상화하여 사용하게끔 만들면, 추상화된 기능을 사용해서 더 복잡한 문제를 쉽게 풀 수 있음! (우린 잘 추상화된 냄비를 사용해서 맛있는 여러 요리를 할 수 있다)
추상화 === 공통 기능 뽑아내기?!
하지만 이렇게되면..
- 요구사항 1. 라면 끓이는 냄비 만들어주세요.
- 요구사항 2. 밥(백미,현미) 짓는 냄비 만들어주세요.
- 요구사항 3. 호빵 찌는 냄비 만들어주세요.
라고 했을 때 이에 맞춰서 추상화된 냄비를 만들것이다. 그런데 만약..
요구사항 2번이 "근데 이제는 잡곡밥도 지을 수 있게 해주세요!!" 라고 한다면 어떨까?
그러면 추상화된 냄비에 기능을 덧대거나..하는 과정이 반복됨. 설계 시에 이런 것들을 모두 예측할 수도 없다.
세부 규칙들에서 추상적인걸 뽑지 말고, 추상적인걸 먼저 떠올려보기
- 즉 bottom up 이 아니라 top down 방법을 생각해보자
- 세부 규칙에 따라 추상화를 하지말고, 추상화를 먼저 하고 이를 세부 규칙에 적용해보는 것
- 그런데 만약 추가 기능이 필요하다면..그 때는 추상화된 기능을 덧대는게 아니라 새로운 추상화된 기능을 추가해야할 때!!
- 즉.. 상속이 아니라 합성을 사용해보자
- 냄비1를 잡곡밥을 지을 수 있는 재질로 코팅하는게 아니라, 잡곡밥 전용 냄비 뚜껑1을 추가로 만들어서 냄비1 과 냄비 뚜껑1을 조립해서 잡곡밥도 만들 수 있게 하자.