오늘도 삽질중

추상화란 무엇일까? 본문

기타

추상화란 무엇일까?

Choi3950 2020. 11. 19. 13:23
반응형

본 포스팅은 개인정리 목적으로 작성된 글입니다.

잘못된 정보가 있을 수 있으며, 피드백은 겸허히 받겠습니다.




추상화란 무엇일까?



위키에 추상화에 대한 정의가 이렇게 내려져 있다.


공통의 속성이나 기능을 묶어 이름을 붙이는 것, 객체 지향 관점에 클래스를 정의하는 것을 추상화 라고 할 수 있다.

불필요한 부분을 생략하고 객체의 속석 중 가장 중요한 것에만 중점을 두어 개략화 하는 것

즉 모델화 하는 것으로 데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념이다.



그외에도 여러 블로그를 찾아보며 개념을 정리해보았다.


여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용

구체적인 것을 감추고 보고 싶어하는 전체적인 특성을 드러내는 것

추상화는 표현의 일부이다.


소프트웨어 개발관점에서 추상화란 인터페이스에 의존하고, 구체적인 구현에는 의존하지 않는다.

보통 함수를 기본적인 추상화 방법으로 사용한다.

대표적으로 printf() 가 있다. 

실제 출력에 대해 어떻게 동작하는지 알지 못하지만 무엇을 하는지 알고 사용한다.


함수를 작게 만드는 것이 핵심이며, 함수가 하는 일도 하나여야 한다.


그 하나의 역할이 함수의 이름으로 표현되며, 이름만 가지고 무슨 역할을 하는지 명확히 파악되어야 한다.


함수가 커진다 -> 추상화를 제대로 하지 않은 것이다.


함수내 블록화된 코드를 묶어서 새로운 함수로 만든다. -> 그 블록에 대한 지식을 대표적으로 표현하기 위한 추상화


반복문 전체를 묶어서 하나의 함수로 만들어도 반복문이 무엇을 하는지 쉽게 이해하기 위한 추상화 작업이다.


파일의 이름이나 디렉토리의 이름도 추상화의 일부이다.


내부를 보지 않더라도 이름만으로 어떤 역할을 하는지 파악할 수 있어야 한다.



추상화를 써야 하는 이유는?

코드의 재사용성, 가독성 향상 , 생산성 증가, 에러감소 -> 유지보수 시간 단축




추상클래스 샘플


간단하게 추상화를 이해하기 위해 샘플을 만들어보았다.

대충 이런느낌으로 사용하면 된다고 이해하면 좋을꺼 같다.



우리가 자동차를 만든다고 생각해보자.

그럼 자동차의 기본 뼈대인 프레임이 존재할 것이다.

프레임 안에는 엔진,문짝 등 여러가지가 존재할 것이며,

각 자동차마다 엔진 CC 나 색상이 모두 다를것이다.


하지만 바퀴 수는 4개로 모두 고정적이다.

이러한 내용을 포함하고 있는 최상위 클래스를 추상화하여 작성해 보자.





CarFrame 이라는 추상클래스에는 자동차의 이름과 컬러, 엔진 CC 등 기본적인 정보가 포함되어 있다.

이제 이 클래스를 상속하여 직접 자동차 클래스를 만들어 본다.










해당 차량은 모두 CarFrame 클래스를 상속하고 있으며, CarFrame에 정의된 함수를 오버라이드 하여 값을 각 차마다 다르게 설정하였다. 이제 CarFactory 라는 클래스로 직접 자동차(객체) 를 만들자.




k5,avante,granger 라는 자동차 객체를 만들고

각 클래스안에 존재하는 함수를 호출하면 리턴값을 받는다.

자동차 바퀴인 getWheelCount() 의 경우 모두 4 이므로 최상위 추상클래스에서 미리 값을 지정하면 

자식 클래스는 별도로 작업을 하지 않아도 된다.


이러한 점에서 추상클래스를 잘 사용하면 유지보수에 장점이 있다고 생각한다.



반응형
Comments