본문으로 바로가기

객체지향(Object-Oriented)

 - 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식

 - 소프트웨어의 재사용 및 확장이 용이하고 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉬움

 - 객체지향은 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해할 수 있다.


객체(Object)

 - 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈

 - 독립적으로 식별 가능한 이름을 가지고 있음

 - 객체가 가질 수 있는 조건을 상태라고 하는데, 일반적으로 상태는 시간에 따라 변함

 - 객체와 객체는 상호 연관성에 의한 관계가 형성

 - 객체가 반응할 수 있는 메시지의 집합을 행위라고 하며, 객체는 행위의 특징을 나타냄

 - 객체는 일정한 기억장소를 갖고 있음

 

클래스(Class)

 - 공통된 속성과 연산을 갖는 객체의 집합으로, 객체의 일반적인 타입을 의미

 - 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀

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

 

메소드(method)

 - 멤버 함수라고도 하며, 객체지향 프로그래밍 언어에서 클래스 혹은 객체에 소속된 서브루틴을 가리킴

 - 데이터와 멤버 변수에 대한 접근 권한을 가짐

 

캡슐화(Encapsulation)

 - 데이터와 데이터를 처리하는 함수를 하나로 묵는 것을 의미

 - 캡슐화된 객체들은 재사용이 용이함

 - 캡슐화된 객체는 객체 내의 응집도는 높아지고, 객체 간의 결합도는 낮아짐

 

상속(Inheritance)

 - 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

 - 상위클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게하고 기능의 일부분을 변경해야 할 경우 상속받은 하위클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것

 

다형성(Polymorphism)

 - 메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 의미

 - 여러 가지 형태를 가지고 잇다는 의미로 하나의 메시지에 대해 여러 가지 형태의 응답이 있다는 것을 의미


공통 모듈

 - 여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미
 - 자체적으로 컴파일 가능, 다른 프로그램에서 재사용 가능
 - 여러 기능 및 프로그램에서 공통으로 사용할 수 있는 모듈(예-날짜 처리를 위한 유틸리티 모듈 등)


공통모듈 원칙

 - 정확성 : 해당 기능이 실제 시스템 구현시 필요한지 아닌지를 알 수 있도록 정확하게 작성
 - 명확성 : 해당 기능에 대해 일관되게 이해하고 한가지로 해석될 수 있도록 작성
 - 완전성 : 시스템이 구현될 때 필요하고 요구되는 모든 것을 기술
 - 일관성 : 공통 기능 간에 상호 충돌이 없도록 작성
 - 추적성 : 공통 기능에 대한 요구사항 출처와 관련 시스템 등의 유기적 관계에 대한 식별이 가능하도록 작성


효과적인 모듈 설계 방안

 - 결합도는 줄이고 응집도는 높여서 모듈의 독립성과 재사용성을 높임

 - 모듈의 제어 영역안에서 그 모듈의 영향 영역을 유지

 - 복잡도와 중복성을 줄이고 일관성을 유지

 - 유지보수가 용이해야 함

 - 하나의 입구와 하나의 출구를 갖도록 해야 함

 


코드(Code)

 - 컴퓨터를 이용하여 자료를 처리하는 과정에서 분류·조합 및 집계를 용이하게 하고, 특정 자료의 추출을 쉽게 하기 위해서 사용하는 기호

 


코드의 종류

 1. 순차 코드
   - 자료의 발생 순서, 크기 순서 등 일정 기준에 따라서 최초의 자료부터 차례로 일련번호를 부여하는 방법
 2. 블록코드
   - 코드화 대상 항목 중에서 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여하는 방법
 3. 10진 코드
   - 코드화 대상 항목을 0~9까지 10진 분할하고, 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법
 4. 그룹 분류 코드
   - 코드화 대상에 대한 분류 기준에 따라 대분류, 중분류, 소분류로 나누고 각 분류 안에서 번호를 순서적으로 부여하는 방법
 5. 연상 코드
   - 코드화 대상 항목의 명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드를 부여하는 방법
 6. 표의 숫자 코드
   - 코드화 대상 항목의 성질(길이, 넓이, 부피, 지름, 높이 등)의 물리적 수치를 그대로 코드에 적용하는 방법
 7. 합성 코드
   - 필요한 기능을 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법


디자인 패턴(Design Pattern)

 - 디자인 패턴은 1995년 GoF(Gang of Four)라고 불리는 에릭 감마(Erich Gamma), 리차드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시디스(John Vissides)가 처음으로 구체화 및 체계화 함

 - 소프트웨어 디자인에서 특정 맥락에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책

 - GoF의 디자인 패턴은 유형에 따라 생성 패턴 5개, 구조 패턴 7개, 행위 패턴 11개 총 23개의 패턴으로 구성


생성 패턴(Creational Pattern)

 ※ 객체의 생성과 관련된 패턴

 - 추상 팩토리(Abstract Factory)
 - 빌더(Builder)
 - 팩토리 메소드(Factory Method)
 - 프로토타입(Prototype)
 - 싱글톤(Singleton)


구조 패턴(Structural Pattern)

 ※ 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴

 - 어댑터(Adapter)
 - 브리지(Bridge)
 - 컴포지트(Composite)
 - 데코레이터(Decorator)
 - 퍼싸드(Facade)
 - 플라이웨이트(Flyweight)
 - 프록시(Proxy)

 

행위 패턴(Behavioral Pattern)

 ※ 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의 하는 패턴

 - 책임 연쇄(Chain of Responsibility)
 - 커맨드(commnad)
 - 인터프리터(Interpreter)
 - 반복자(lterator)
 - 중재자(Mediator)
 - 메멘토(Memento)
 - 옵서버(Observer)
 - 상태(state)
 - 전략(Strategy)
 - 템플릿 메소드(Template Method)
 - 방문자(Visitor)