본문 바로가기
Programming/정보처리기사

2022 정보처리기사 객체지향 프로그래밍 기술이란

by 하하호호 2022. 2. 6.
반응형

 

 

 

 

 

객체지향 프로그래밍이란

소프트웨어의 위기가 찾아온 시기가 있었다. 소프트웨어 개발 및 유지보수 비용이 지속적으로 증대되;는 것이다. 소프트웨어의 관리적 측면이 강조되고, 하드웨어 기술에 비해 소프트웨어 기술이 뒤떨어지게 되는 것이다. 사용자의 요구 변화가 많아지고 시장이 넓어진다. 업무의 전문성은 높아지지만 소프트웨어를 평가하는 기준이 미비했다.

 

이러한 위기상황에서 해결책으로 등장한 것이 객체지향 프로그래밍 기법이다. 현실세계의 개체들을 속성과 메소드가 결합된 형태로 객체화하는 것이다. 현실 세계 속성을 데이터화한 것을 데이터베이스라 표현한다. 속성에 대한 기능 및 동작을 메소드라 칭한다. 구현된 객체와 객체 간 통신을 위해 객체지향 프로그램이 구현되는 것이다.

 

객체는 크게 객체, 속성, 메소드로 구성된다. 객체는 속성과 메소드로 구성된 클래스이 인스턴스를 의미한다. 속성은 객체를 나타내는 자료구조, 상태 등을 의미한다. 메소드는 속성에 대한 연산기능과 객체가 수행하는 행위를 의미한다.

 

 

객체지향기술의 장점

규모가 큰 대형 프로그램 개발을 객체를 이용하면 쉽게 프로그래밍할 수 있다. 객체를 재사용하기 때문에 확장성과 유지보수가 용이하며 개발 속도가 빠르다. 실제 세계와 유사한 구조의 프로그램을 개발할 수 있다.

 

객체지향기술의 단점

객체의 규모가 큰 경우 실행 속도가 느려질 수 있다. 객체를 이용하면 쉽지만 객체 자체의 설계가 어렵다. 

 

객체지향 기술의 구성요소

객체지향 기술을 구성하는 요소는 크게 클래스, 객체, 인스턴스, 메시지가 있다.

 

클래스

객체의 타입을 정의하고 객체를 구현하는 틀이다. 유사한 성격의 객체들의 공통된 특성을 표현한 데이터 추상화 단위다. 같은 문제를 해결하기 위한 속성과 메소드를 정의한 것이다. 기존 언어의 사용자 정의 자료형(구조체)와 함수의 개념을 발전시킨 것이다.

 

객체

클래스에 의해 구현된 대상들의 총칭으로, 현실 세계의 개체와 같은 개념이다. 객체마다 고유한 속성을 가지며 클래스의 정의된 메소드수행이 가능하다. 

 

 

 

인스턴스

특정 클래스에서 구현된 객체로, 좁은 범위의 객체를 뜻한다.

 

메시지

객체들 사이를 상호작용하기 위한 인터페이스(메소드)를 뜻한다. 객체들은 메시지를 통해 메소드 수행을 시작하게 된다.

 

 

 

객체지향 기술의 종류

객체지향 기술의 종류는 캡슐화, 추상화, 상속, 다형성이 있다. 먼저 캡슐화는 클래스는 클래스의 정의 단계에서 문제 해결에 관여하는 속성과 메소드를 하나로 묶는 것을 말한다. 정보은닉은 캡슐화의 가장큰 특징이다. 클래스 내부 속성과 메소드를 외부의 고려되지 않은 영향으로 부터 보호할 수 있도록 설계하는 방법이다.

 

캡슐화를 통해 재사용이 용이하고 중복성을 최소화하는 프로그래밍이 가능하다. 인터페이스가 단수해지고 가독성이 향상된다. 정보 은폐로 데이터의 일관성을 유지할 수 있다. 사이드이팩트에 의한 오류의 파급효과를 줄일 수 있다.

 

추상화란 클래스의 공통된 요소를 추출해 상위 클래스로 구현하는 것이다. 하위 클래스 구현을 위한 큰 틀을 제공한다고 보면 된다. 상세한 구현은 하위 클래스에서 진행한다. 현실 세계를 자연스럽게 표현할 수 있어 객체 중심의 안정된 모델링이 가능해진다. 복잡한 문제를 간략화하는 기법으로 분석의 초점이 명확해진다.

 

 추상화는 IPO과정을 추상화하는 기능추상화, 데이터와 데이터에 적용할 기능을 함께 추상화하는 자료 추상화, 외부 이벤트에 대한 반응을 추상화하는 제어 추상화로 구분된다.

 

상속이란 상위클래스의 속성과 메소드를 하위 클래스에서 사용하도록 하는 기법이다. 하위 클래스는 상위 클래스의 모든 요소를 재사용 또는 확장할 수 있다. 상위 클래스의 추상적인 요소를 하위 클래스가 구체화하여 사용하게 된다. 같은 수준의 상위 클래스가 둘 이상인 경우를 다중 상속이라 부른다.

 

다형성이란 상속된 여러 하위 개체들이 서로 다른 형태를 가질 수 있는 성질이다. 오버로딩, 오버라이딩 기술로 동일한 메소드명으로 서로 다른 작업을 할 수 있다. 오버로딩이란 동일한 이름의 여러 메소드 중, 매개변수로 전달되는 인수의 타입과 개수를 식별하여 적절한 메소드를 호출해 주는 기능이다. 오버라이딩이란 상속 받은 메소드의 내부 기능을 새롭게 정의하는 기능이다. 오버로딩이 상속받은 메소드의 기능을 풍부하게 하는 것이라면 오버라이딩은 상속받은 메소드를 아예 새롭게 만드는 것이다. 둘 이상의 클래스에서 동일한 메시지에 대해 서로 다르게 반응할 수 있도록 하는 것이다.

 

 

 

 

객체지향 개발 절차

객체지향 분석이란 소프트웨어로 개발해야 하는 업무를 분석하는 것이다. 분석 대상을 클래스, 객체, 속성, 멤버드으이 형식적인 형태로 기술한다. 기존의 업무 시스템을 객체 간의 상호작용으로 표현하는 것이다. 럼바우 방식이 가장 대표적이며 객체 모델링, 동적 모델링, 기능 모델링의 순서로 분석하여 도식화한다. 

 

객체(정보)모델링이란 업무 영역에서 요구하는 객체를 식별하는 단계를 의미한다. 식별된 객체에 포함될 속성과 메소드를 식별한다. 속성에 사용될 자료 구조를 표현한다. 객체 다이어그램을 사용해 객체를 표현한다.

 

동적 모델링이란 객체 모델링에서 생성된 객체들의 기능과 상태 등을 파악하는 단계를 의미한다. 사건과 상태, 조건과 활도들을 파악하여 표시한다. 상태, 활동 다이어그램을 활용하여 기능의 흐름을 표시한다.

 

기능 모델링이란 사용자 요구사항을 분석하여 입출력 데이터를 결정한다. 객체들의 제어 흐름, 기능의 상호작용 순서를 자료흐름도(DFD)로 나타낸다. 각 기능을 세부적으로 상세히 분석한다. 제한사항, 성능 등을 파악하여 문제가 발생하지 않도록 한다. 

 

 

 

객체지향 설계하는 방법

분석이 완료된 모델을 가지고 구체적이 절차로 표현하는 단계를 말한다. 사용자 중심, 대화식 프로그램 개발에 적합한 방식이다. 클래스를 객체로, 속성을 자료구조로, 기능을 알고리즘으로 표현하는 것에 중점을 두고 설계한다.

 

객체지향을 설계하는 원칙은 단일 책임, 개방폐쇄, 리스코프 치환, 인터페이스 분리, 의존성 뒤집기 방식이 있다. 단일 책임은 단일 클래스가 제공하는 모든 기능은 하나의 책임을 수행해야 한다는 것이다. 클래스를 변경하는 이유는 오직 하나 뿐이어야 한다. 낮은 결합도, 높은 응집도 유지가 가능하도로 하는 것이다.

 

개방폐쇄(Open-Closed)는 소프트웨어 구성 요소는 확장에는 열리고, 변경에는 닫혀 있어야 한다는 것이다. 리스코프 치환은 하위 클래스는 언제나 상위 클래스로 교체(호환)할 수 있어야 하는 것이다. 서브 클래스는 상위 클래스가 정의한 제약사항을 준수해야 한다는 것이다.

 

인터페이스 분리는 사용하지 않는 인터페이스에 시스템이 영향을 받아서는 안된다는 것이다. 사용하지 않는 인터페이스는 구현하지 말아야 한다. 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스를 구성하는 것이 좋다. 의존성 뒤집기는 하위 클래스의 변경 사항이 사우이 클래스에 영향을 미치지 않도록 해야 한다는 것이다. 복잡한 컴포넌트들의 관계를 단순화하고 효율적인 커뮤니케이션이 가능하게 하는 것이다.

 

 

 

객체지향 설계 순서

먼저 객체분석에서 정의된 요구 명세서를 기반으로 객체 연산자를 정의하여 설계한다. 객체 모델은 객체를 구성하고 있는 클래스와 속성을 객체와 자료구조로 표현하는 것이다. 동적 모델은 설계 시 자료에 가해지는 프로세스를 묶어 정의하고 관계를 규명하는 것이다. 

 

시스템 설계는 객체 인터페이스를 결정하는 것이다. 객체 설계 단계에서 정의된 객체 간의 인터페이스를 정하여 전체적인 시스템을 설계하는 것이다. 분석된 객체 모형을 특성별로 구분한 서브시스템을 말한다. 데이터, 자원 관리 방법을 결정한다. 객체와 그들의 부 객체의 계층적 구조를 보여주는 계층 차트를 그린다. 객체 제어 방식을 결정한다.

 

순차적 제어 방식은 순서가 존재하는 객체 운영방식이다. 동시 제어 방식은 객체 사용을 동시에 수행하는 방식이다. 이벤트 중심 제어방식은 사건이 발생할 때마다 객체가 수행되는 방식이다. 

 

 

 

 

반응형

댓글