추상화란 무엇인가?
2024-06-21
추상화 Abstraction
미술에서 추상화는 대상의 구체적인 형상을 나타낸 것이 아니라 점, 선, 면, 색과 같은 순수한 조형 요소로 표현한 미술의 한가지 흐름이다.
컴퓨터 과학에서의 추상화는 복잡한 데이터, 구조, 시스템등으로 부터 핵심만을 가려내 덜 자세하게 만드는 것 또는 세부사항, 절차 등을 감추고 인터페이스 등을 만드는 것으로 복잡도를 낮추는 방법론을 뜻한다.
데이터 추상화
데이터 추상화란 데이터의 구체적인 구현을 숨기고, 데이터의 중요한 특성과 연산에 집중할 수 있도록 하는 프로그래밍 기법이다.
어떠한 데이터들의 공통점을 모으고 차이점은 버린다. 예를 들어 고양이, 강아지, 원숭이 등의 객체들의 공통적인 특징을 묶어 동물이라는 카테고리로 카테고리화 시킨다.
abstract class Animal { public abstract void animalSound(); public void sleep(){ System.out.printIn("zzz") } } class Pig extends Animal { public void animalSound() { Sysyem.out.printIn("꿀꿀") } } class Dog extends Animal { public void animalSound() { Sysyem.out.printIn("왈왈") } }
위의 코드는 Pig와 Dog를 Animal이라는 클래스를 기반으로 추상화한 것이다.
프로세스 추상화
프로세스 추상화는 내부 프로세스(프로그램 실행 단위)를 추상화하여 숨기는 것을 뜻한다. 데이터베이스가 어떻게 데이터를 저장하는지는 모르지만 단순하게 insert, upsert등의 쿼리로 데이터를 저장하는 것이 그 예시다.
추상화를 사용하는 이유
추상화를 잘 사용하면 복잡한 시스템을 간단하고 이해하기 쉽게 만들수가 있다.
복잡성 관리
단순화 :복잡한 시스템의 세부 사항을 감추고, 중요한 부분에만 집중할 수 있도록 한다.
모듈화 : 시스템을 작은 모듈로 나누어 각각 독립적으로 개발하고 유지할 수 있다.
재사용성 증가
일반화 : 공통적인 기능을 일반화하여 여러 곳에서 재사용할 수 있다.
컴포넌트 재사용 : 추상화된 컴포넌트는 다른 프로젝트나 시스템에서도 재사용할 수 있어 개발 시간을 단축하고 비용을 절감할 수 있다.
확장성
확장 용이성 : 새로운 기능을 추가할 떄 기존 시스템을 크게 수정하지 않고도 쉽게 확장할 수 있다.
유연성 : 시스템의 요구사항이 변경될 때, 추상화된 구조를 통해 유연하게 대처할 수 있다.