소프트웨어 설계
클래스 - 객체 지향 프로그램에서 데이터를 추상화는 단위
- 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현
-속성은 변수의 형태로, 행위는 메서드 형태로 선언
인스턴스 - 프로그램에서 클래스를 통해 만든 실제의 실행 객체, 프로그램의 실행 단계에서 나타남
- 객체 지향 기법에서 클래스에 속한 각각의 객체를 의미
객체 - 자신 고유의 데이터를 가지며 클래스에서 정의한 행위를 수행
메시지 - 객체에게 어떤 행위를 하도록 지시하기 위한 방법
메서드 - 클래스로부터 생성된 객체를 사용하는 방법
객체 지향 기법
-현실 세계를 모형화하여 사용자와 개발자가 쉽게 이해할 수 있다.
-소프트웨어의 재사용률이 높아진다.
-소프트웨어의 유지보수성이 향상된다.
-객체 지향 프로그래밍은 추상화, 캡슐화, 모듈화를 수행하며
자료와 프로세서를 묶어서 클래스로 정의한다.
추상화 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원칙의 기초 원칙