본문 바로가기
카테고리 없음

[소프트웨어 공학] 객체 지향 개념과 장점 그리고 클래스와 객체

by 세개남 2024. 5. 24.
반응형

객체 지향 개념

최근 소프트웨어 개발에 객체지향 기술이 많이 보급되어 사용되어지고 있습니다.

새로 시스템을 개발하는 경우 거의 객체지향 기술과 언어가 사용되고 있는데 그 이유는 객체지향 기술이 여러 가지 장점을 가지고 있기 때문입니다.

객체지향의 장점

먼저 객체 모델은 문제를 더 자연스럽게 표현할 수 있기 때문에 개발자가 설계를 작성하고 이해하기가 쉽습니다. 또한 객체지향 개념은 자료와 함수를 함께 추상화하여 프로그램의 기본 단위로 묶어 줌으로써 변화에 영향을 적게 받습니다.

함수 중심의 절차적 소프트웨어는 그 기본 기능이 이미 개발되어 있음에도 불구하고 처음부터 새로 작성되는 경우가 많습니다. 약간의 차이를 예를 들면 자료 구조가 같더라도 타입이 다르거나, 같은 기능을 하는 함수라도 매개 변수 타입의 차이 때문에 다시 사용하지 못합니다.

1990년대에 들어서면서 이러한 문제들이 객체지향 패러다임으로 인하여 해결될 수 있다는 공감대가 형성되어 왔습니다. 따라서 재래식 소프트웨어 개발 방법과 절차적 프로그래밍 언어로부터 객체지향 기술로 전향되었고 이미 객체지향 기술이 소프트웨어 개발 방법의 주류가 되었습니다. 특히 객체지향 기술은 최근 소프트웨어 제품의 전형적인 타입인 사용자 중심, 대화식 프로그램의 개발에 아주 적합한 방법입니다. 사용자 중심의 대화식 프로그램의 경우 조작되는 타입만 다르고 데이터를 조작하는 방법은 같은 것이 많습니다. 예를 들면 환자의 3차원 영상에서 종양을 찾는 프로그램이나 국제경제 모델을 여러 가지 변수로 나타내어 그 추세를 보여주는 프로그램, 원자로의 핵반응을 화면에 보여 주는 프로그램이 있다고 가정해 봅시다. 세 시스템이 다루는 자료형은 다르지만 사용자를 위한 기능은 같습니다. 예를 들면 조작할 데이터를 선택하는 기능, 작은 화면에 다 나타내지 못한 사실을 스크롤하는 기능, 조작한 자료를 파일로 저장하는 기능 등은 공통적입니다.

객체지향 기술은 이러한 유사성을 이용할 수 있는 방법을 제공합니다. 즉 각기 다른 자료 타입에 대하여 스크롤 하는 동작은 조금씩 다르지만 '스크롤러'의 개념은 공통으로 사용할 수 있습니다. 이런 것을 라이브러리로 만들어 필요할 때 적절히 특수화(specialization)하고 알맞게 변경(adaptation)하여 사용할 수 있습니다. 소프트웨어 부품을 체계적으로 다시 사용할 수 있도록 하면 프로그래밍 생산성은 매우 향상될 수 있습니다.

객체지향 기술의 또 다른 특징은 프로그램을 뚜렷하게 구별되는 단위 (object)로 분할할 수 있다는 것입니다. 구별된 단위들은 잘 정의된 인터페이스를 이용, 상호 작용할 수 있습니다. 이렇게 되면 큰 시스템에 대한 원래의 요구를 잘 분할(localize)하여 생각해 볼 수 있고 잘 분할된 시스템은 수정할 때 그 영향권이 적어지므로 변경 작업이 쉬워집니다.

코드 재사용에 의하여 프로그램 생산성을 높이고 변경이 쉬워지며 일관된 소프트웨어 개발 모델을 제공하는 객체지향 기술은 이미 소프트웨어 생산 기술에서 매우 중요한 위치를 차지하고 있습니다.

객체지향과 절차적 방법의 비교

객체지향 기술의 근본적인 개념은 주어진 문제를 이해하고 모델링하는 시각에 있다. 객체지향에서는 주어진 문제 영역을 그 안에 존재하는 객체의 집합으로 보며 객체들은 서로 정보를 주고받아 상호 작용한다고 여겨집니다. 절차 중심의 재래식 방법은 주어진 문제와 소프트웨어에 대한 시각이 전혀 다릅니다. 소프트웨어는 데이터 구조와 이를 이용한 함수들의 집합이라고 봅니다. 이러한 방식의 문제점은 앞서 기술한 바와 같이 함수, 즉 기능의 변화가 많은데도 불구하고 기능 중심으로 설계하기 때문에 차후 변경이 필요한 경우 그 파급 효과가 크다는 것입니다. 또한 데이터와 함수는 관련이 깊은데도 불구하고 별도로 독립된 것처럼 원시 코드에 퍼져 있습니다. 전역 변수로 정의된 데이터는 관련된 함수들이 따로 존재하여 연관 관계가 표현되어 있지 않기 때문에 관련 함수를 찾기 어렵다.

객체지향 개념에서는 소프트웨어를 여러 개의 객체의 모임으로 생각하며 객체는 데이터와 관련 함수를 모아 놓은 것이다. 즉 관련된 자료와 함수를 객체로 묶어 놓고 이들의 상호작용에 의하여 작업이 수행됩니다. 대학의 수강신청을 관리하는 시스템을 예로 들어보자. 수강 신청과 관련된 대학영역 안에 있는 객체는 교수, 학부학생, 대학원생, 강의실, 강의시간 등이다. 학부학생과 대학원생은 학생이라는 객체에 속하며 학생이라는 객체는 학생 신상에 대한 자료와 이에 대한 오퍼레이션을 모아 놓은 것이다.

객체지향 기술의 중요한 기본 개념은 객체, 클래스, 캡슐화, 상속, 다형성, 객체 사이의 관계 등입니다

.

클래스와 객체

클래스는 타입, 즉 개념에 대한 의도가 있는 정의입니다. 클래스는 속성과 오퍼레이션을 캡슐화 한 것이며 객체는 클래스의 인스턴스입니다.

우리 주변의 대부분의 사물에는 종류나 유형이 있습니다. 자동차가 무수히 많지만 승용차, 화물차, 버스, 승합차로 나눌 수 있습니다. , 객체의 타입(object type)이 존재하며 이를 클래스(class)라고 합니다. 같은 클래스에 속하는 개개의 객체를 그 클래스의 인스턴스(instance)라고 한다. 예를 들어, 회사 내에 근무하는 '직원'이라는 클래스를 생각할 수 있다. 회사에 근무하는 '홍길동'이란 사람은 직원 클래스에 속하는 하나의 인스턴스로 볼 수 있다.

클래스를 정의하기 위해서는 클래스가 가지는 속성(attribute)을 도출하여야 합니다. '직원'이라는 클래스는 이름, 직위, 월급, 전화 번호 등의 속성을 가질 수 있습니다. 또한 관련되는 함수를 생각해 냅니다. 예를 들면, '진급', '월급 인상', '전화 변경' 등이 '직원'이란 클래스와 관련되는 함수입니다.

결국 클래스란 각각의 객체들이 갖는 속성과 적용되는 연산을 정의하고 있는 틀(templet)입니다.

 

참고자료 출처 : 새로쓴 소프트웨어 공학 (저자 : 최은만)

반응형