객체지향의 핵심 키워드

 

클래스(Class) : 데이터+메서드

객체(Object), 인스턴스(instanse)

메시지(Message)

캡슐화(Encapsulation)

상속(inheritance)

다형성(polymorphism)

 

클래스 : 메타 데이터 => 데이터의 데이타

다형성 : 서로 다른 객체가 동일한 메세지에 대하여 서로 다른 방법으로 응답할 수 있는 기능

 

 

 

객체지향 (3)_ 자바공부하기

 

객체지향개념의 등장 배경

 

프로그래밍 언어의 발전

- 기계어 -> 어셈블리어 -> 고급언어

 

함수 기반 프로그래밍

- 1970년대 - 1980년대

 

소프트웨어의 위기

- 생산성 향상의 한계

 

객체지향 개념의 등장

- 1980년대

 

객체지향?

 

 

 

객체지향 _ 2 <자바공부하기>

 

데이터 중심 분석과 설계

1980년대

- Peter Chen과 Ed Codd의 접근 방법

* 엔티티라 불리는 일련의 데이터 아이템을 빌딩 블록으로하여 소프트웨어 시스템을 만들고자 함

 

특징

- 데이터가 비즈니스 응용에서 가장 안정된 부분이라 생각하고 데이터 모델링 방법을 사용하여 시스템을 표현하고자 함

ex) E-R 모델

 

- 데이터 모델링 기법은 시스템의 기능을 표현하는데 도움을 주지 못하고 추가적인 방법을 필요로 함

 

객체지향 소프트웨어 방법론

 

어떠한 기존의 방법도 데이터와 함수를 함께 다루지 않는다

 

객체지향 방법론은 높은 응집도와 낮은 결합도를 제공해 주어, 기존의 방법론에서 나타났던 문제점들을 상당부분 해소시켜 줄 수 있는 방법론으로 등장하게 되었다.

 

객체지향방법론

- Object >= Data+Functions

 

 

 

 

스파게티 코딩

1960년대

- 작고 간단한 응용 시스템을 만듦

* 제한된 시스템 자원하에서 최대한의 효과를 보고자 노력함

 

- 개발자들의 창조적인 능력에 의해 소프트웨어가 개발됨

 

- 스파게티 코드 생성

 

- 수많은 GOTO 구문은 소프트웨어 시스템을 보수 / 관리하기 어렵게 함

 

 

 

구조적 설계와 분석

1970년대

- AI Constantine과 Ed Yordon의 접근 방법

* 함수(function)들을 빌딩 블록(building block)으로 하여 소프트 웨어 시스템을 만들고자 함

 

특징

- 모듈화 프로그래밍으로 발정을 가져 옴

- 함수는 언제나 변화할 수 있음

* 거의 변하지 않는 자연 법칙에 따라 작성되는 '과학 프로그램'에는 적합하나, 사용자의 요구가 계속정으로 바뀌는 현실 세계의 응용에는 부적합함

- 함수와 프로시저(procedure)는 생성되는 응용 프로그램에 대해 추상화를 제공함

* 함수는 다른 응용에서 재사용 가능함

* 프로시저는 반복적인 작업을 줄여 줌

- 높은 결합도(coupling)와 낮은 응집도(cohesion)에 의한 시스템의 복잡도 증가

* 결합도

- 특정 코드 부분의 다른 코드나 데이터 저장소에 대한 의존성 정도

- 구조적 방법론은 높은 결합도를 보여 줌

*응집도

- 서로 관련된 일련의 코드와 데이터가 얼마나 적합하게 관련을 맺고 있는가에 대한 정도

- 명령형 언어에서 변수는 공통 영역에 존재하면 모든 함수에서 공유가 가능함

- 구조적 방법론은 낮은 응집도를 보여 줌

 

 

 

 

 

 

객체 지향 (Object Oriented)

 

절차형 프로그래밍과 객체지향 프로그래밍

- C같은 예전 프로그램은 기능을 나열하는 방법의 프로그램을 지원한다. 함수와 서브루틴, 변수들로 이루어져 있다.

- 반면, 현실 세계는 객체들로 이루어져 있고, 각 객체들의 동작과 속성, 상호작용으로 이루어져 있다.

- 현실 세계와 닮은 프로그래밍이 바로 객체지향이다.

 

객체

- 데이터와 프로시져들의 집합 생태를 가지고 독자성을 가지며 각 객체마다 고유한 행동이 있다.

- 프로그램에서는 상태를 변수로 행동은 메소드로 정의한다.

 

 

 

 

캡슐화 (Encapsulation)

 

캡슐화

- 객체의 생태와 행동을 객체 내부에서 구현한다. 외부에서는 내부를 몰라도 조작이 가능하다.

- 버튼을 누른다 -> missile이 발사된다. (버튼 누르는 사람이 과연 모든걸 알고있을까요..?)

 

캡슐화의 이점

-  간결한 코드 : 코드가 간결하고 가독성이 높다

- 모듈화: 코드들은 객체 내부에 들어있다. 외부에서 코드를 알아햐 할 필요가 없다. 우리는 객체에게 명령만 하면 되는 것이다.

- 정보 은닉: 내부 자료의 직접제어는 위험하다. 객체내의 변수제어를 안전한 방식으로만 가능하게 한다.

 

 

 

 

+ Recent posts