Study/Computer

소프트웨어 설계

고래상어9 2022. 2. 14. 23:03

클래스 - 객체 지향 프로그램에서 데이터를 추상화는 단위

           - 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현

           -속성은 변수의 형태로, 행위는 메서드 형태로 선언

인스턴스 - 프로그램에서 클래스를 통해 만든 실제의 실행 객체, 프로그램의 실행 단계에서 나타남

            - 객체 지향 기법에서 클래스에 속한 각각의 객체를 의미 

객체 - 자신 고유의 데이터를 가지며 클래스에서 정의한 행위를 수행

메시지 - 객체에게 어떤 행위를 하도록 지시하기 위한 방법

메서드 - 클래스로부터 생성된 객체를 사용하는 방법

 

객체 지향 기법

-현실 세계를 모형화하여 사용자와 개발자가 쉽게 이해할 수 있다.

-소프트웨어의 재사용률이 높아진다.

-소프트웨어의 유지보수성이 향상된다.

-객체 지향 프로그래밍은 추상화, 캡슐화, 모듈화를 수행하며

  자료와 프로세서를 묶어서 클래스로 정의한다.

추상화 Abstraction  - 공통 성질을 추출하여 클래스를 설정하는 기법

상속성 Inheritance - 상위 클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법

정보 은닉 Informatino Hiding - 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만 접근이 가능하도록 하는 코드 보안 기술

다형성 Polymorphism - 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력 

                              -오버로딩, 오버라이딩이 대표적이다. 

                              -다형성은 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는

                                성질이다.

 

객체 지향 기법에서 캡슐화

-객체 지향 개념에서 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 과정이다. 

-캡슐화된 객체들은 재사용이 용이하다.

-프로그램 변경에 대한 오류의 파급효과가 적다.

-인터페이스가 단순해진다.

-변수를 외부에 노출하지 않기 때문에 모듈에 대한 결합도가 낮아진다.

-캡슐화는 서로 관련성이 많은 데이터와 이와 관련된 함수들을 한 묶음으로 처리하는 기법이다.

-캡슐화는 객체 지향에서 정보 은닉과 가장 밀접한 관계이다.

 

 

객체 지향 설계에서 정보 은닉

-정보 은닉은 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만 접근이 가능하도록 하는 코드 보안 기술이다.

-객체 지향 설계에서 객체가 가지고 있는 속성과 오퍼레이션의 일부를 감추어서 객체의 외부에서는 접근이 불가능하게 하는 개념 

-필요하지 않은 정보는 접근할 수 없도록 하여 한 모듈 또는 하부시스템이 다른 모듈의 구현에 영향을 받지 않게 설계되는 것을 의미한다.

-모듈들 사이의 독립성을 유지시키는 데 도움이 된다.

-설계에서 은닉되어야 할 기본정보로는 IP 주소와 같은 물리적 코드, 상세 데이터 구조 등이 있다.

-모듈 내부의 자료 구조와 접근 동작들에만 수정을 국한하지 않기 때문에 요구사항 등 변화에 따른 수정이 가능하다.

 

소프트웨어 설계에서 사용되는 대표적인 추상화(Abstraction) 

-과정 추상화 / 자료 추상화 / 제어 추상화

 

객체 지향 방법론의 종류 

야콥슨 Jacobson - 유스케이스에 의한 접근 방법으로 유스케이스를 모든 모델의 근간으로 활용

럼바우 Rumbaugh - 그래픽 표기법을 이용하여 소프트웨어 구성요소를 모델링하는 방법론

 - 분석 절차는 객체 모델링 -> 동적 모델링 -> 기능 모델링 순서로 진행

럼바우의 객체 모델링 기법 - OMT - 객동기 객체 모델링, 동적 모델링, 기능 모델링 

부치 Booch - 설계 문서화를 강조하여 다이어그램 중심으로 개발하는 방법론

                   -미시적(Micro) 개발 프로세스와 거시적 (Macro)개발 프로세스를 모두 사용하는 분석 방법

Coad와 Yourdon - E-R 다이어그램을 사용하여 객체의 행위를 모델링하며, 객체 식별, 구조 식별, 주체 정의, 속성 및 관계 정의, 서비스 정의 등의 과정으로 구성되는 객체 지향 분석 방법

Wirfs-Brock - 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 분석 방법

 

객체 지향 설계 원칙 중, 서브 타입(상속받은 하위 클래스)는 어디에서나 자신의 기반 타입(상위 클래스)로 교체할 수 있어야 함을 의미하는 원칙은 LSP(Liskov Substitution Principle)이다.

 

인터페이스 분리의 원칙 - Interface Segreagation Principle

한 클래스는 자신이 사용하지 않는 인터페이스를 구현하지 말아야 한다는 원칙

클라이언트는 자신이 사용하지 않는 메서드와 의존관계를 맺으면 안된다.

클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다. 

의존성 역전의 원칙 - Dependency Inversio Principle

실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고받음으로써 관계를 최대한 느슨하게 만드는 원칙

리스코프 치환의 원칙 - Liskov Substitutino

서브 타입(상속받은 하위 클래스)는 어디서나 자신의 기반 타입(상위 클래스)로 교체할 수 있어야 한다는 원칙

단일 책임의 원칙 - Single Responsibility Principle 

하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙, 객체 지향 프로그래밍의 5원칙 중 나머지 4원칙의 기초 원칙