csmoon1010의 SW 블로그

<소프트웨어 설계> - (3) 애플리케이션 설계 ( 객체지향 ) 본문

전공 필기/SW공학

<소프트웨어 설계> - (3) 애플리케이션 설계 ( 객체지향 )

csmoon1010 2021. 1. 1. 16:58

[3. 객체지향(Objected-Oriented]

1. 객체지향의 개요

: 현실세계의 개체(Entity)를 하나의 객체(Object)로 만들어 SW개발 시 조립해서 작성할 수 있는 기법

 

(1) 배경 : 구조적 기법의 문제점 해결

- 구조적 기법 : 프로시저에 근간을 두고 하나의 커다란 작업을 여러개의 작은 작업으로 분할

                    → 모듈 : 각각의 소작업 수행 → 한 곳에 모아 하나의 프로그램으로

- 문제점

   - 개발 공정에만 치우침(유지보수 고려X)

   - 개발 시작 후 추가적인 요구사항 대응 어렵

   - 재사용의 어려움 → 인력, 시간 소모

 

(2) 특징

- 구조의 단계적, 계층적 표현

- 멀티미디어 데이터 및 병렬 처리 지원

 

(3) 장점

- 재사용 및 확장이 쉬움

- 고품질의 SW를 빠르게 개발

- 유지보수의 용이성

- 의사소통 : 현실세계의 모형화 → 개발자, 사용자의 의사소통

 

 

 

 

2. 객체지향의 구성요소

<객체(Object)>

(1) 의미 : 데이터 + 함수를 묶어 놓은(캡슐화한) 하나의 소프트웨어 모듈

**데이터 : 객체가 가지고 있는 정보 (속성, 상태, 변수, 상수, 자료 구조)

**함수 : 객체가 수행하는 기능. 객체의 데이터를 처리하는 알고리즘. (메소드, 서비스, 동작, 연산)

 

(2) 특성

- 이름 : 독립적으로 식별 가능한 이름

- 상태(State) : 객체가 가질 수 있는 조건. 시간에 따라 변화.

- 관계 : 객체와 객체 간의 상호 연관성에 의해 형성

- 행위 : 객체가 반응할 수 있는 메시지(Message)의 집합

- 일정한 기억장소 가짐

- 메소드 : 다른 객체로부터 메시지를 받았을 때 "정해진 기능" 수행

 

 

<클래스(Class)>

(1) 의미 : 공통된 속성과 연산(행위)를 갖는 객체의 집합 = 객체의 일반적인 타입(틀)

(2) 인스턴스(Instance) : 클래스에 속한 각각의 객체

(3) 인스턴스화(Instantiation) : 클래스로부터 새로운 객체 생성

(4) 최상위 클래스 : 상위 클래스를 갖지 않는 클래스

(5) 슈퍼 클래스(Super Class) : 특정 클래스의 상위(부모) 클래스

(6) 서브 클래스(Sub Class) : 특정 클래스의 하위(자식) 클래스

 

 

 

 

 

3. 객체지향의 기본 원리

<캡슐화(Encapsulation)>

(1) 의미 : 데이터와 함수를 하나로 묶는 것

(2) 장점

- 정보 은닉 : 외부 모듈의 변경으로 인한 파급 효과가 적음

- 재사용의 용이

- 단순한 인터페이스, 낮은 결합도

 

 

<정보 은닉(information hiding)>

(1) 의미 : 캡슐 속에 있는 객체의 상세한 내용을 외부에 철저히 숨기는 것

(2) 특징

- 메시지만으로 객체와 상호작용하도록 구성 → 단순화, 독립성, 유지보수성, 이식성

  • 인터페이스 : 외부에 노출된 부분
  • 구현 : 내부에 숨겨진 부분

(3) 구현 방식 : 접근지정자 (public/private/protected)

(참고 - [Programming Language/Java] - 접근지정자와 static, final )

 

 

 

<상속(Inheritance)>

(1) 의미 : 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스)가 물려받음

(2) 특징

- 상위 클래스의 모든 속성과 연산을 다시 정의하지 않고 사용 가능(재사용성)

- 새로운 속성과 연산의 첨가 가능 (확장성)

(3) 다중 상속(Multiple Inheritance)

: 한 개의 클래스가 "두 개 이상의 상위 클래스"로부터 속성과 연산을 상속받음

- 복잡한 계층, 상속 순서 추적의 어려움

- 다른 클래스에 영향을 줄 수 있으니 신중히 사용

 

 

<다형성(Polymorphism)>

(1) 의미 : 하나의 메시지에 대해 각각의 객체가 가지고 있는 "서로 다른 고유한 방법(특성)"으로 응답할 수 있는 능력

(2) 오버라이딩(Overriding)

: 상속을 통해 받은 상위 클래스의 메소드를 확장

(3) 오버로딩(Overloading)

: 같은 이름의 메소드 + 다른 인자 개수, 자료형

 

 

 

Comments