기타

[OOP] 객체 지향 - 추상화

비번변경 2024. 9. 6. 22:01

개요

객체 지향 프로그래밍(Object Oriented Programming, OOP)이란, 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 절차적 프로그래밍(Procedure Programming) 관점에서 벗어나 여러 객체가 유기적으로 협력하면서 데이터를 처리하는 프로그램 설계 방식을 말한다.

객체 지향 프로그래밍은 프로그램을 단위로 구분하여 프로그램을 유연하고 쉽게 변경할 수 있도록 만든다. 물론 객체 지향 프로그래밍의 장점을 잘 살릴 수 있도록 프로그램을 설계하기 위해서는 객체 지향 프로그래밍의 특징을 잘 이해하고 있어야 한다.

이번 글에서는 객체 지향 프로그래밍의 특징 중 하나인 추상화(Abstraction)에 대해서 정리해보려고 한다.

 

 

추상화

사전적으로 추상화란, 사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 추출하고 파악하는 것을 뜻한다. 

단어 자체는 미술 시간에 접해본 적이 있을 건데, 미술에서 추상화란 사물을 사실적으로 재현하는 것이 아닌, 점/선/면 등의 단순한 요소로 표현하는 것을 말한다. 즉, 불필요한 세부 사항을 제거하고 본질적이고 공통적인 부분을 추출하여 표현하는 것이다.

마찬가지로 컴퓨터 과학에서도 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미한다.

위의 예시는 자동차와 오토바이를 추상화했을 때를 표현한 것이다. 자동차와 오토바이는 모두 이동 수단(Vehicle)에 해당하면 시동을 켜거나 전진 또는 후진할 수 있다는 공통점을 가진다. 이런 식으로 추상화는 클래스를 정의할 때 중요하고 공통적인 성질을 추출한 부모 클래스를 정의하고, 이벤트 발생의 정확한 절차나 방법을 정의하는 대신 대표적인 표현으로 대체하는 것을 말한다.

추상화는 크게 데이터 추상화와 제어 추상화로 구분할 수 있다.

 

 

제어 추상화

제어 추상화란 클래스의 메서드를 사용하는 사용자에게 메서드의 동작 방식과 같은 내부 로직을 감추는 것을 말한다.

즉, 클래스를 사용하는 사용자는 내부 로직에 대한 이해 없이 클래스가 제공하는 메서드를 사용할 수 있어야 한다. 전자기기나 서비스를 사용하는 소비자들에게 동작에 대한 이해도를 요구하지 않는 것과 같다.

 

예로 들어 여러 국가의 달력을 사용하게 해주는 Java 라이브러리가 있다고 하자. 공식 문서에서 안내하는 달력 사용법은 다음과 같다.

import CountryCalendar;

CountryCalendar cal = CountryCalendar.getInstance("countryName");

달력 라이브러리를 사용하여 특정 국가의 달력을 얻고 싶다면 getInstance라는 함수에 국가의 이름만 전달하면 되는 것이다. 라이브러리 사용자는 getInstance 함수가 어떻게 지정한 국가의 달력을 반환하는지 알 필요가 없다.

이렇게 제어 추상화가 잘 적용된 클래스는 사용자에게 하여금 생상성 및 가독성 증가, 유지 보수에 대한 시간 단축 등의 효과를 제공한다.

 

 

데이터 추상화

데이터 추상화란 대상을 보다 간단한 개념으로 일반화하는 과정을 의미한다.

예로 들어 아이폰이라는 객체를 추상화하면 아이폰 -> 휴대폰 -> 통신기기 -> 전자제품으로 추상화가 이루어질 수 있다. 각각 추상화한 클래스의 부모 클래스부터 각 클래스에 맞는 기능을 정의하고 클래스 간에 상속 관계를 정의함으로써 아이폰 클래스를 개발할 때는 아이폰 만의 고유한 기능 위주로 개발할 수 있게 된다.

데이터 추상화를 잘 적용한 프로그램은 높은 확장성을 갖출 수 있게 된다.

 

 

참고 문서

객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화

💠 객체 지향 개념과 추상화 완벽 이해하기