본문 바로가기

취업/면접

소프트웨어 개발의 기초 - OOP

반응형

1. 객체 지향 기법의 개요

  • 객체 지향 기법의 개요
    • 객체지향 기법은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 사용되고 있다.
    • 소프트웨어의 재사용 및 확장을 용이하게 함으로써 고품질 소프트웨어를 빠르게 개발할 수 있으며 유지보수가 쉽다.
    • 복잡한 구조를 단계적, 계층적으로 표현한다.
  • ⇒ 객체 지향 기법은 현실 세계의 개체를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있도록 하는 기법이다.
  • 객체
    ⇒ 객체는 데이터와 데이터를 처리하는 함수를 묶어놓은 하나의 소프트웨어 모듈이다.
    • 데이터 ⇒ 객체가 가지고 있는 정보로 속성이나 상태, 분류등을 나타낸다. 속성, 상태, 변수, 상수, 자료구조라고도 한다.
    • 함수 ⇒ 객체가 수행하는 기능으로, 객체가 갖는 데이터를 처리하는 알고리즘이다. 객체의 상태를 참조하거나 변경하는 수단이 되며, 메소드, 동작 연산이라고도 하며 기존의 구조적 기법에서의 함수, 프로스저에 해당한다.
    • 객체는 상태와 행위를 가지고 있다.
    • 객체는 다른 객체들과 구별될 수 있는 이름이 있으며, 일정한 기억장소를 가지고 있다.
    • 객체의 메소드는 다른 객체로부터 메시지를 받았을 때 수행하게 된다.
  • 클래스
    ⇒ 공통된 속성과 연산을 갖는 객체의 집합으로 객체의 일반적인 타입이다.
    • 클래스는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀이다.
    • 클래스에 속한 각각의 객체를 인스턴스라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스 화 라고 한다.
    • 최상위 클래스는 상위 클래스를 갖지 않는 유일한 클래스, 슈퍼클래스는 특정 클래스의 상위 클래스이고, 서브클래스는 특정 클래스의 하위 클래스이다.
  • 메시지
    메시지는 객체들 간에 상호작용을 하는 데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구 사항이다.
    • 메시지의 구성 요소 : 메시지를 받는 객체의 이름, 객체가 수행할 메소드 이름, 메소드를 수행할 때 필요한 인자
    • 메시지를 받은 수신 객체는 요구된 메소드를 수행하여 결과를 반환하게 된다.

2. 객체 지향 기법의 기본 원칙

객체 지향 기법의 기본 원칙에는 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등이 있으며, 이 중 구조적 기법과 차별되는 개념은 캡슐화, 상속화, 다형성이다.

  • 캡슐화
    ⇒ 캡슐화는 데이터와 데이터를 처리하는 함수를 하나로 묶는 것을 의미한다.
    • 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적다.
    • 캡슐화된 객체들은 재사용이 용이하다.
  • 정보 은닉
    ⇒ 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다. 
    • 각 객체의 수정이 다른 객체에게 주는 영향을 최소화하는 기술이다.
    • 외부 객체가 접근하거나 사용하지 못하므로 유지보수와 소프트웨어 확장 시 오류를 최소화 할 수 있다.
  • 추상화
    ⇒ 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략하는 것, 즉 모델화 하는 것이다.
  • 상속성
    ⇒ 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것이다. 
    • 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 재 정의하지 않고도 즉시 자신의 속성으로 사용할 수 있다.
    • 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다.
    • 객체와 클래스의 재사용, 즉 소프트웨어 재사용을 극대화 시키는 개념이다.
    • 다중 상속성(Multiple Inheritance) : 한 개의 클래스가 두개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것이다.
  • 다형성
    ⇒ 메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 의미한다.
    • 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.

3. 객체 지향 기법의 생명주기

  • 객체 지향 기법의 생명 주기객체 지향 기법의 생명주기는 계획 및 분석, 설계, 구현, 테스트 및 검증으로 이루어진다.
    ⇒ 객체 지향 기법을 사용하는 소프트웨어 개발 과정의 가장 큰 특징은 각 과정에서 사용되는 객체, 클래스, 메소드, 속성 등이 동일한 개념으로 사용된다는 것이다.
  • 객체 지향 분석(OOA: Object Oriented Analysis)
    ⇒ 사용자의 요구 사항을 분석하여 요구된 문제와 관련된 모든 클래스, 이와 연관된 속성과 연산, 그들간의 관계 등을 정의하여 모델링하는 작업이다.
    • 소프트웨어를 개발하기 위한 비즈니스를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석한다.
    • 객체는 클래스로부터 인스턴스화 되고, 이 클래스를 식별하는 것이 객체지향분석의 주요한 목적이다.
  • 객체 지향 설계(OOD : Object Oriented Design)
    ⇒ 객체지향 분석을 사용해서 생성한 여러가지 분석 모델ㅇ르 설계 모델로 변환하는 작업으로, 시스템 설계와 객체 설계를 수행한다.
    • OOD에서 가장 중요한 문제는 시스템을 구성하는 객체와 속성, 연산을 인식하는 것이다.
    • OOD 설계 개념은 추상화, 정보은닉, 기능 독립성, 모듈화, 상속성을 바탕으로 하며 이중 가장 중요한 개념은 모듈화이다.
  • 객체 지향 구현(OOP)
    ⇒ 설계 단계에서 생성된 설계 모델과 명세서를 근거로 하여 코딩하는 단계이다. 객체는 순차적으로 또는 동시적으로 구현될 수 있다.
    • OOP는 새로운 개념의 모듈 단위, 즉 객체라는 단위를 중심으로 하여 프로그램을 개발하는 기법이다.
    • 쉽고 빠르고 재사용성이 높고 조작하기 쉬우며, 이미 개발된 프로그램에서 확장된 프로그램을 개발할 수 있다.
    • 객체 기반언어, 클래스 기반 언어, 객체 지향성 언어 등으로 분류할 수 있다.
  • 객체 지향 테스트(OOT)
    • 클래스 테스트 : 구조적 기법에서의 단위 테스트와 같은 개념으로 가장 작은 단위, 즉 캡슐화된 클래스나 객체를 검사하는 것이다.
    • 통합 테스트 : 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사로, 스레드 기반 테스트와 사용 기반 테스트로 분류할 수 있다.
      • 스레드 기반 테스트 : 시스템에 대한 하나의 입력이나 이벤트에 응답하는 데 요구되는 클래스들을 통합하는 것으로, 각각의 스레드가 통합되고 개별적으로 테스트된다.
      • 사용 기반 테스트 : 독립 클래스를 테스트한 후 독립 클래스를 사용하는 다음 계층의 종속 클래스를 테스트한다.
      • 확인 테스트 : 사용자의 요구사항에 대한 만족 여부를 검사한다.
      • 시스템 테스트 : 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는 지 검사한다.

4. 아키텍처 스타일

기존의 시스템이나 애플리케이션을 개발자가 아닌 다른 사람이 요지보수를 해야하는 경우 서로 설계 방식이 달라 코드를 분석하는데 많은 어려움이 따른다. 이를 해결하기 위해 많은 사람들 또는 신뢰있는 기관에서 검증된 보편적인 설계 방법의 양식들을 사용하는데, 이것을 아키텍처 스타일 이라고 한다.

- IEEE 1471

소프트웨어 집약적인 시스템에서 아키텍처가 표현해야 하는 요소와 내용들, 이들 간의 관계를 규정하고 있는 국제 표준이다.

  • 특징
    • 표준화 : 아키텍처 관련 용어와 개념들을 통일함
    • 중립성 : 모델링 언어와 방법론을 제시하지 않고, 독립적인 메타 모델을 제공함
    • 유연성 : 표현을 위한 요소들과 관계의 일반화로 규모에 상관없이 시스템 구축에 적용 가능함
    • 의사소통 : 이해 당사자 간의 의사소통을 지원하고, 다양한 관점에서 표현함.
  • 구성요소
    • Architectural Description : 시스템 구축 시 아키테겇가 기록되는 방법
    • Stakeholder : 소프트웨어 시스템 개발에 관련된 모든 이해 당사자를 의미함
    • Concerns : 시스템의 성능, 유지보수, 보안, 분배 등과 같은 Stakeholder들의 의견과 목표
    • View : Stakeholder들이 가지는 관점으로 전체 시슽메을 표현하거나 묘사하는 방법
    • Viewpoint : View를 구성하기 위한 규칙을 정의하는 패턴으로, AD는 하나 이상의 Viewpoint를 선택하여 사용함.

- 저장소 구조

중앙자료구조와 독립된 컴포넌트로 구성된 아키텍처다. 큰 데이터의 이동 및 공유에 적합하며, 컴포넌트 간의 통신은 이뤄지지 않는다

  • 장점
    • 대량의 데이터를 저장하는데 효과적이다.
    • 컴포넌트 추가, 삭제가 용이하다.
    • 중앙 집중화를 통해 데이터 관리가 용이하고, 보안적인 측면이 뛰어나다.
  • 단점
    • 저장소에 오류가 발생하면 시스템 전체에 문제가 생긴다.
    • 데이터의 분산이 어렵다

- MVC 구조

상호 작용 애플리케이션을 Model, View, Controler의 세개의 컴포넌트로 구분하는 아키텍처로, 유저 인터페이스와 비즈니스 로직들을 서로 분리하여 개발하는 방법이다.

  • 장점
    • 동일한 모델에 대해 다양한 뷰를 제공한다.
    • 효율적인 모듈화가 가능하다.
    • 모델과 뷰의 구분으로 상용자 인터페이스에 대한 요구 사항을 적용시키는데 용이핟.
  • 단점
    • 간단한 어플리케이션에 적용하기에는 복잡하다
    • 모델의 자주 변경되는 경우 업데이트 요청이 많아 뷰의 갱신이 따라가지 못한다.

- 클라이언트 / 서버 구조

클라이언트와 서버로 나뉘는 아키텍처를 뜻하며, 하나의 서버에 다수의 클라이언트가 접속하는 일대 다 관계로 구성되며, 서버는 하나의 중앙 서버 또는 여러 서버가 존재할 수 있다.

  • 구성
    • 클라이언트 : 사용자로부터 입력을 받아 서버에 요청을 전달함
    • 서버 : 수신된 요청을 수행하고, 데이터의 일관성을 유지함
  • 특징
    • 새로운 서버의 추가 및 업그레이드가 용이하다.
    • 데이터가 서버에 집중되어 데이터 관리가 용이하고, 보안적인 측면이 뛰어나다.
    • 서버에 네트워크 트래픽과 데이터가 집중되어 처리 비용이 급증할 수 있다.

- 계층구조

계층적으로 조직화가 가능한 어플리케이션에 적합한 아키텍처이다. 각 계층이 특정 측명만을 전문저긍로 다루기 때문에 응집력 있는 설계가 가능하며, 설계를 더욱 쉽게 이해할 수 있게 한다. 대표적으로 OSI 7계층이 있다.

  • 상위 계층은 하위 계층의 서비스 제공자가 되며, 하위 계층은 상위 계층의 클라이언트의 입장에 선다.
  • 복잡한 문제를 점진적이고 순차적으로 분할하여 구현할 수 있다.
  • 인접 계층 사이에서만 요청과 응답이 이뤄지며, 변경사항을 적용할 때에도 두개의 인접 계층에서만 영향을 미쳐 원할한 변경이 가능하다.
  • 구축시 적절한 레이어 수나 규모를 결정하는 것이 어렵다.

- 파이프 필터 구조

데이터의 흐름을 점진적으로 처리하는 시스템을 위한 아키텍처이다. 프로세싱을 위한 시스템이 각 필터에 캡슐화 되어 있으며, 데이터는 인접 필터 사이의 파이프를 통해 전달되는 형태이다.

반응형

'취업 > 면접' 카테고리의 다른 글

React 배열에 key가 존재하는 이유  (0) 2021.08.06
CSS in JS vs CSS  (0) 2021.08.05
이력서를 변경해보자 - 3편  (0) 2021.07.15
이력서를 변경해보자 - 2편  (2) 2021.07.14
이력서를 변경해보자 - 1편  (2) 2021.07.12