안드레이 2024. 3. 5. 15:13

▼구조적 프로그래밍 

프로그램의  이해가 쉽고 디버깅 작업이 쉽다.  하나의 입력과 하나의 출력 구조를 갖지고 있다. 대신 분기(GOTO)문은 사용하지 않는다. 기본적으로 순차 구조, 선택 구조, 반복 구조등이 구조프로그래밍의 기본 구조라고 할 수 있다.

 

▼절차적  프로그래밍

순서대로 일련의 명령어를 나열하여 프로그래밍 한다. Function 기반의 프로그래밍이며, 프로시저로서  Function 외에도 Subroutine이 문법적으로 구현되어 있다. 절차형 언어의 경우 규모가 커지면 커질수록 함수가 기하급수적으로 늘어난다.

함수가 타 프로그램과  문제를 일으킬  수  있는  문제점을 가지고 있다. 프로그램과 별개로 데이터 취급이 되므로 완전하지 않고 현실 세계 문제를 프로그램으로 표현하는데 제약이 있다.

 

▼객체지향 분석

현실 세계의 대상 체인 개체(Entiny)를 속성(Attribute)과 메소트로 결합하여 객체로 표현한다.. 소프트웨어 개발 대상을 기능이 아닌  객체를 대상으로 하며 개체 간의 상호 관계를 모델링하는 방식이며, 구조적 소프트웨어 위기를 해결하기 위한 생산성, 재사용성, 확장성, 사용편리성, 유지보수성 요구로 인하여 등장하였다. 현실세계를 객체라는 모형으로 형상화하므로 사용자와 개발자의 상호이해도가 높다.

 

▼객체지향 프로그래밍

컴퓨터 소프트웨어를 구조적인 코드 단위로 보는 것이 아닌 오브젝트 단위로 구분하고 오브잭트 간의 모음으로 설계하는 것이다. 소프트웨어 내의 오프잭트는 서로 메세지를 주고 받으며 처리 요구를 받은 객체가 자기 자신 안에 있는 내용을 가지고 처리하는 방식이다.프로그램이 단순하고 생산성, 신뢰성이 높아져 대규모 개발에 많이 사용된다.

 

▼객체지향 구성 요소

구분 설명
객체Object 객체란, 데이터와 데이터를 처리하는 함수를 캡슐화한 하나의 모듈이다.
함수는 객체가 수행하는 기능, 객체가 갖는 데이터를 처리하는 알고리즘
함수는 객체가 메시지를 받아 실행해야 할 객체의 구체적 연산을 정의
함수를 메소드, 서비스, 동작, 연산이라고도 한다.
Attribute :  오브젝트가 가지고 있는 데이터값
Method : 오브젝트의 행위인 함수
클레스Class 클래스는 공통된 속성과 연산을 갖는 객체의 집합을 의미한다.
인스턴스 : 클래스에 속한 각 객체를 의미
메세지Message 메시지란 객체들 간에 상호작용을 하는 데 사용되는 수단으로 객체에 어떤 행위를 하도록 지시하는 명령을 말한다.
상속Inheritance 상속은 다른 클래스의 속성, 행동을 포함한 하위 클래스를 만드는 것으로 주로 코드 중복을 피하거나 범주화(비슷한 객체끼리 묶음 -> IS-A 관계)인 경우에 사용할 수 있다.

 

★클래스 설계

분석 단계 중 아직 확정되지  않은 클래스  내부 부분 중 구현에 필요한  중요한 사항을 결정하는  작업을 의미한다. 클래스의 서비스 인터페이스에 대한  정확한 정의, 메소드 내부의 로직 등   객체의 상태 변화와  오퍼레이션의 관계를 상세히 설계해야하며, 클래스가 가지는 속성값에 따라 오퍼레이션이 구현된다. 객체의 상태변화 모델링은 필수.

 

★클래스 인터페이스

관점이 다른 개발자들이 클래스 명세의 어떤 부분에 관점이 있는가? 관심이 있는가?가 다르므로 클래스의 인터페이스가중요하다.

클래스 구현 : 실제 설계로 부터 클래스를 구현하려는 개발자.

클래스 사용: 구현된  클래스를 이용하여 다른 클래스를 개발하려는 개발자.

클래스 확장: 구현된 클래스를 확장하여 다른 클래스로 만들고자 하는 개발자.

 

★협약에 의한 설계 3가지 타입

- 선행조건 : 오퍼레이션이 호출되기  전에 참이 되어야 할 조건.

- 결과조건 : 오퍼레이션이 수행된 후 만족해야하는 조건.

- 불변조건 : 클래스 내부가 실행되는 동안 항상  만족하여야 하는 조건.  

 

▼객체지향의 5가지 특징

구분 설명
캡슐화(Encapsulation 데이터와 데이터를 처리하는 함수를 하나로 묶은 것
캡슐화된 객체의 세부 내용이 은폐되어 변경이 발생해도 오류의 파급효과가 적음
캡슐화된 객체들은 재사용이 용이함
인터페이스가 단순해지고 객체간의 결합도가 낮아짐
추상화Abstraction 불필요한 부분을 생략, 객체 속성 중 가장 주용한 것에 중점을 두어 모델화하는 것
완전한 시스템 구축 전, 그 시스템과 유사한 모델을 만들어 여러 요인들을 테스트할 수 있음
상속성Inheritance 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
하위 클래스는 상위 클래스로부터 받은 속성과 연산 외에도 새로운 것을 첨가할 수 있음
클래스의 재사용, 소프트웨어의 재사용을 높이는 중요한 개념

다중상속성 : 한개의 클래스가 2개 이상의 클래스로부터 속성과 연산을 상속받는 것
다형성Polymorphism 하나의 메시지에 대해 각 객체가 갖고 있는 고유한 방법대로 응답하는 것을 의미
하나의 클래스나 메서드가 다양한 방식으로 동작이 가능한 것을 의미
오버로딩과 오버라이딩이 존재
정보은닉 캡슐화에서 가장 중요한 개념으로 다른 객체에 자신의 정보를 숨기는 것
연산만을 통해 접근을 허용함
각 객체의 수정이 다른 객체에 주는 Side Effect를 최소화하는 기술

 

오버로딩Overloading

한 클래스 내에서 같은 이름의 메소드를 사용하는 것. 같은 이름의 메소드를 여러개 정의하면서 매개 변수의 유형과 갯수를 달라지도록 하는 기술이다.

 

오버라이딩Overriding

상속 관계의 두 클래스의 상위 클래스에서 정의한  메소드를 하위 클래스에서 재정의 하는 것이다.

자바 언어에서는 static 메소드의 오버라이딩을 허용하지 않으며, 오버라이딩의 겨웅 하위 객체의 매개 변수 개수와 타입은 상위 객체와  같아야  한다.

 

객체 지향 설계의 5원칙 S.O.L.I.D

SRP(Single Responsibility Principle): 단일 책임 원칙
OCP(Open Closed Priciple): 개방 폐쇄 원칙
LSP(Listov Substitution Priciple): 리스코프 치환 원칙
ISP(Interface Segregation Principle): 인터페이스 분리 원칙
DIP(Dependency Inversion Principle): 의존 역전 원칙

출처 : https://sjh836.tistory.com/159

 

▼객체지향 개발 방법론

종류 설명 특성
Booth 설계부분만 존재하며 문서화를 강조하여 다이어그램 기반으로 개발되었다. 분석과 설계가 분리되지 않는다.
정적 모델과 동적모델로 표현된다.
OOSE(Jacob-son) 유스 케이스의 한  접근  방법으로 유스 케이스를 모든 모델의 근간으로 활용한다. 분석, 설계 및 구현으로 구성.
기능적 요구사항 중심.
시스템 변화에 유연.
OMT(Rum-baugh) 객체지향 분석, 시스템 설계, 오브젝트 설계/구현 4단계로 구성된다.
객체 모델링: 객체도를 이용하여 시스템의 정적구조를 표현한다.
동적 도멜링 : 상태도를 이용하여 객체의 제어 흐름/ 상호 반응을 표현한다.
기능 모델링 : 자료 호름도를 이용하여 데이터 값의 변화 과정을 표현한다.
복잡한 대형  개발 프로젝트에 유용.
기업 업무의 모델링에 있어 편리하고 사용자와 의사소통이 원활하다.
CASE와 연동이 충실하다.
Coad와 Your-don방법 객체지향 분석 방법론에서 E-R 다이어그램을 사용하여 객체의 행위를 모델링 한다. 객체 식별, 구조 식별, 정의, 속성 및 관계 정의, 서비스 정의 등의 과정으로 구성된다.