일반적으로 소프트웨어 시스템은 복잡한 많은 업무 분야의 문제를 해결해야 합니다.
하지만 한 사람의 머리로는 한꺼번에 복잡한 모든 문제를 파악할 수도 없고 해결할 수는 더더욱 없습니다.
그래서 구조적 방법론에서는 사람이 이해할 수 있는 작은 단위로 나누어서 해결하려고 합니다.
따라서 '나누어서 정복한다(divide and conquer)'는 것이 구조적 방법론의 모토가 되는 것이지요.
객체지향 방법론에서의 문제 해결 방법은 추상화(abstraction),캡슐화(encapsulation),모듈성(modularity),계층성(hierarchy)라는 4가지 개념으로 요약할 수 있습니다.
추상화:
복잡한 많은 업무를 관리해야 할 때 중요하지 않은 세세한 것 까지 일일이 신경 쓸 필요는 없을 것입니다.
그보다는 오히려 보다 중요하고 필수적인 사항만을 다루는 것이 바람직할 것입니다.
이것을 객체지향 방법론에서는 추상화라고 합니다.
그러나 여기서 주의해야 할 것은 무엇이 중요하고 무엇이 덜 중요한 것인가를 판단하는 일입니다.
어떤 업무에서는 중요한 것이 다른 업무에서는 전혀 중요하지 않은 것일 수도 있으며, 그 반대의 경우도 있을 수 있습니다.
또는 같은 업무라고 하더라도 어느 관점에서는 중요한 것이 다른 관점에서는 덜 중요한 경우도 있을 수 있습니다.
그 판단은 많은 경우에 있어서 경험의 문제일 수도 있습니다.
만약 분석가 또는 설계자가 해당 업무 분야에 대하여 많은 경험을 갖고 있다면 쉬게 판단할 수도 있을 것이기 때문입니다.
그렇지 않다면 경험이 많은 업무 당당자를 빨리 찾아서 도움을 요청해야겠지요.
캡슐화:
아마 여러분은 굳이 텔레비전의 내부를 뜯어보지 않아도 리모컨을 통해 텔레비전을 사용할 수 있을 것입니다.
또는 자동차가 어떻게 작동하는지 알지 못해도 운전하는 방법만 알고 있다면 자동차를 운전할 수 있을 것입니다.
설사 여러분이 운전을 할 수 있다고 하더라도 실제로 자동차의 엔진 내부를 뜯어본 사람은 별로 없을 것입니다.
엔진은 자동차에게서 가장 중요한 부품이 아닙니까? 오히려 엔진 내부를 뜯어봤다면 아마도 그 자동차는 제대로 작동하지 않을지도 모르죠.
자동차 정비소에서 엔진을 한번 볼 기회가 있었는데 캡슐같이 생긴 통 안에 머리카락이라도 보일까 봐서 아주 깊숙이 꼭꼭 숨어있더라고요.
이렇게 꼭꼭 숨어있다고 하더라도, 그것이 엔진이 어떻게 작동되는지 세부적인 사항을 알지 못하더라도 우리는 이 엔진을 손쉽게 작동시킬 수 있습니다.
자동차가 제공하는 엑셀레이터를 통해서 말이죠.
이것이 객체지향 방법론에서 말하는 캡슐화라고 하는 것입니다.
말 그대로 중요하고 세부적인 구현 방법에 대한 자세한 사항은 캡슐 안에 꼭꼭 숨겨놓는 것입니다.
자동차에게 중요한 것이 엔진이라면 소프트웨어 시스템에게 있어서 중요한 것은 데이터입니다. 그래서 캡슐화를 데이터 감추기(data hiding)라고도 하는 것이지요.
인터페이스:
그런 후에는 마치 자동차의 엑셀러레이터를 통해서 엔진을 작동시키는 것과 같이, 데이터를 조작할 수 있는 방법을 외부에 제공하게 되는 것이지요. 이와 같이 외부에 노출시켜 제공하는 방법들을 인터페이스(interface)라고 합니다. 약간의 차이는 있지만 일반적으로 한 자동차를 운전하는 방법을 알고 있다면 분명히 다른 자동차를 운전할 수 있을 것입니다. 이것은 자동차가 제공하는 운전이라고 하는 인터페이스가 같기 때문입니다.
다형성:
TV가 인터페이스를 어떻게 구현했느냐에 따라 화질이 달라질 수도 있습니다.
화질이 좋지만 값이 비싼 TV도 있을 수 있고,
화질은 별로 좋지 않지만 값이 싼 TV도 있은 것처럼 말입니다.
DVD는 같은 방법으로 TV에게 영상 정보를 받으라고 메시지를 보내는데 TV에 따라서 서로 다른 화질의 결과를 보여주는 것이지요.
이것을 다형성(polymorphism)이라고 하는 것입니다.
이처럼, 인터페이스는 다형성의 원리에 기초하고 있는 것입니다.
계층성(상속성):
여러 개의 조각으로 나누다 보면 어떤 조각들은 서로 비슷한 특성이나 기능을 가질 때가 있습니다. 예를 들어 승용차, 승합차, 화물차 등의 조각들이 있다고 한다면, 우리는 이들 조각들에게서 비슷한 특성이나 기능들을 발견할 수 있게 됩니다. 차체, 엔진, 바퀴, 스티어링, 엑셀러레이터, 브레이크 등과 운전방법, 이런 것들은 자동차라면 모두 갖게 되는 특성이나 기능입니다. 승용차는 여기에 승차인원이 5명까지로 제한된다는 특성 만을 더 갖는 것이지요. 화물차의 경우에는 사람이 아닌 물건을 싣는다는 특성을 더 갖게 됩니다. 이때 자동차는 보편적인 격이 되고, 승용차나 승합차, 화물차는 특수한 것이 됩니다. 계층성이란 이와 같이 보편적인 것을 사위에 두고 특수한 것을 하위에 두는 것을 말합니다. 다시 말해서 동급이나 순서에 따라 계층적인 구조로 조각들을 배열하는 것을 말합니다. 이때 자동차는 부모 클래스(parent class)로 특수한 개념인 승용차나 승합차, 화물차는 자식 클래스(child class)로 표현됩니다.
'IT > 트렌드&개념공부&TIP' 카테고리의 다른 글
자료구조 종류 간단한 정리 (0) | 2021.02.01 |
---|---|
객체지향 5원칙 (0) | 2021.01.31 |
[요약] 암호학-알기쉬운 정보보호개론 (0) | 2021.01.25 |
리팩토링이란? (0) | 2021.01.24 |
Head First Design Pattern 정리 (0) | 2021.01.24 |
댓글