다양한 기록

OOP #1 : 등장, 객체란? 본문

소프트웨어공학

OOP #1 : 등장, 객체란?

라구넹 2024. 10. 20. 19:27

Observations

- 1970's .. 구조적 프로그래밍

- 1980's .. 구조적 프로그래밍 -> 객체지향 프로그래밍 전환

- 1990's .. 완전한 객체지향 프로그래밍

- 2000's .. WWW와 EC를 위한 객체 기술

- 현재 .. CBD (Component Based Development)와 소프트웨어 공장

 

역사

Root: SIMULA (1966)

- 클래스의 개념 제시

 

SMALLTALK (1970 ~ 1980)

- 클래스 라이브러리 등장

 

AI Community (1980's)

 

Programming Language Community (1980's)

- Abstract Data Type, Encapsulation

- Alphard, CLU, ADA


객체 지향의 개념

 

객체 지향 기술

- 소프트웨어를 개발하고 패키지화하는 방법으로, 실세계 객체들이 서로 관계를 맞는 방식과 공통된 경험에 크게 의존하는 방식

 

객체지향 시스템

- 객체지향 기술을 지원하는 모든 프로그래밍 언어, 도구 및 방법론을 의미

 

객체지향 기본 원칙

1. 추상화

2. 캡슐화

3. 모듈화

4. 계층화

 

추상화

- 어떤 사물에 대하여 내부의 세세한 것은 숨기고 외부에는 중요한 특징만 공개

 

캡슐화

- 관련있는 것끼리 묶음

- 데이터 + 데이터와 연관된 함수

 

계층화

- 상속 구조

 

함수지향 vs. 객체지향

함수지향

- 절차형

- 순차형

 

절차형 프로그래밍

- 구조적 프로그램: 함수를 모듈 기본으로

- Data Structures + Functions = Program

- 데이터와 함수가 독립적인 것처럼 다뤄지지만 사실 아님

 

객체지향 프로그래밍

- Data Structures + Functions = Object

- Objects + Objects = Program

- 객체를 모듈의 기본 단위로 구성

 

객체 지향의 주요 개념

- Obejct

- Class

- Encapsulation

- Information Hiding

- Inheritance

- Polymorphism

 

Object란?

정의

1. 현실 세계의 어떤 실체를 나타냄

2. 데이터와 해당 데이터에 작용하는 연산을 포함하는 모듈

- 데이터는 객체의 상태를 제공하고, 연산은 객체의 동작을 제공

 

Object 특징

- 상태와 값을 가짐

- 행동의 셋을 가짐

- 유니크한 아이덴티티를 가짐

 

Object Examples

- 물리적 엔티티 : 트럭

- 개념적 엔티티 : 화학 과정

- 소프트웨어 엔티티 : 스택, 큐

 

Objects

객체의 상태(State)

- 객체의 특성(Property)를 나타내며, variable로 표현되며 값을 가질 수 있다.

- 상태의 특성은 변하지 않으나 그 값은 변한다

- State, Property, Variable, Data, Member

 

객체의 행위(Behavior)

- 상태의 값을 변경시킬 수 있는 행위

- 여러 개의 method로 표현된다

- Behavior, Action, Operation, Function, Method

- Member function, 연산자

 

객체와 클래스

객체와 클래스 간의 관계

객체->클래스 : 추상화

클래스 -> 객체 : 구체화(인스턴스화)

 

- 객체는 클래스의 인스턴스 (instantiate), 클래스의 복사물임

- 객체 간의 상호작용 : 메시지

 

Composite/Complex Obejct

- 다른 객체들을 가지는 객체

 

Finding Obejcts

- 개발할 문제 영역에서 어떻게 객체를 추출?

=> 명사를 추출... 명사가 객체의 후보. 그 중 더 이상 쪼갤 수 없는 건 속성이 되고, 동사는 행동이 됨