소프트웨어는 인류가 과거에 다루었던 공학과는 성격이 매우 다르다.
예를 들면, 기계공학에서는 기계 설계도를 그리고 그 설계도에 따라 부품을 만들고 조립하여 최종 시스템을 완성한다. 마찬가지로 건축공학, 토목공학, 전기전자공학 등에서도 설계도를 그리고 부품을 조립하고 최종 시스템을 만드는 과정은 기본적으로 같다.
하지만, 소프트웨어는 설계도가 없었고 단지 프로그램 코드만이 있었다. 이러한 코드만으로는 인간이 직관적으로 전체 시스템 구성이나 동작을 알기가 매우 어렵다. 기계가 고장나면 그 기계를 설계한 사람이 아니라도 기계를 고칠 수 있고 기계 전공이 아닌 사람도 대충은 기계의 동작을 알 수 있고 간단한 것은 직접 고칠 수도 있다. 하지만, 소프트웨어는 프로그램이 문제가 있으면 전문 프로그래머도 자신이 짠 프로그램이 아니면 이해하는 것이 매우 어렵고 프로그램을 직접 짠 본인도 시간이 지나면 자신의 프로그램을 이해하지 못하는 경우도 있다.
소프트웨어 공학이 추구하는 목표 중에 하나가 소프트웨어를 다른 공학에서와 같이 설계도, 부품, 조립과 같은 형태를 가지게 하는 것이다. 그렇게 되면 소프트웨어의 한 부품이 고장나면 설계도를 보고 다른 부품으로 교체할 수도 있고 소프트웨어의 한 부품을 떼서 다른 소프트웨어에 붙여 사용할 수도 있다. 무엇보다 중요한 것은 이러한 것이 사람들에게 보다 직관적이라는 것이다. 눈에 보이지 않는 소프트웨어를 눈에 보이는 것으로 바꾸는 것이라고 볼 수도 있다.
이러한 기법을 컴포넌트 기반 소프트웨어 공학(Component-based Software Engineering)이라고 부른다.
객체지향 프로그래밍 기법은 컴포넌트 기반 소프트웨어에 보다 근접한 형태로 구현할 수 있다. 각 소프트웨어 부품을 객체로 구현하면 완전하진 않지만 어느 정도의 컴포넌트 기반 프로그래밍이 될 수 있다.
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
정수 반올림 (0) | 2020.04.29 |
---|---|
[C++] 오버로딩과 오버라이딩 차이 (0) | 2020.04.23 |
객체 지향 프로그래밍 뜻 (292) | 2020.04.14 |
List와 Set의 차이 (273) | 2020.04.14 |
객체 지향 프로그래밍 (OOP) 특징 (282) | 2020.04.11 |
댓글