객체지향 개념 (쫌 아는체 하기)

75
객체지향 개념 Object Orientation 쫌 아는체 하기(궁서체) 이승준 fb.com/plusjune

Transcript of 객체지향 개념 (쫌 아는체 하기)

Page 1: 객체지향 개념 (쫌 아는체 하기)

객체지향 개념Object Orientation

쫌 아는체 하기(궁서체)

이 승 준fb.com/plusjune

Page 2: 객체지향 개념 (쫌 아는체 하기)

오늘 이야기

주제: “객체지향” 개념 (어렴풋이 알았던)목표: 딴데가서 쫌 아는체 하기

Page 3: 객체지향 개념 (쫌 아는체 하기)

사람은 포유류에 속하는 동물임

사람이 다른 동물과 구별되는, 고유한 특징은?

. .

Page 4: 객체지향 개념 (쫌 아는체 하기)

재미있는 동물의 세계부터 시작해 보죠.

Page 5: 객체지향 개념 (쫌 아는체 하기)

마모셋 원숭이들,'박스 뚜껑 여는 방법'이 담긴 교육 비디오를 보여준 다음박스를 줬더니, 비디오에서 보고 배운 대로 박스 뚜껑을 열었다

Page 6: 객체지향 개념 (쫌 아는체 하기)

도구 사용법을 서로 배우는 앵무새들

Page 7: 객체지향 개념 (쫌 아는체 하기)

버섯농사 짓는

잎꾼개미

5천만년 전 부터 농사 시작인류는 겨우(?) 1만년전 부터

심지어 농약도 만든다능 @.@

Page 8: 객체지향 개념 (쫌 아는체 하기)

빵 조각으로 낚시하는 해오라기

Page 9: 객체지향 개념 (쫌 아는체 하기)

혼자서도 잘 노는 강아지

Page 10: 객체지향 개념 (쫌 아는체 하기)

호모 사피엔스

호모 파베르

호모 루덴스

생각

도구

놀이

Page 11: 객체지향 개념 (쫌 아는체 하기)

호모 사피엔스

호모 파베르

호모 루덴스

생각

도구

놀이

사람만의

전유물이 아니라능…

Page 12: 객체지향 개념 (쫌 아는체 하기)

진정한 고유의 특징?다른 동물과 구별되는, 사람만이 가진

Page 13: 객체지향 개념 (쫌 아는체 하기)

그것은 바로,

“상징 체계” 를 만들고 공유하는 하는 능력

Page 14: 객체지향 개념 (쫌 아는체 하기)

그것은 바로,

“상징 체계” 를 만들고 공유하는 하는 능력

언어

문자 수학음악

Page 15: 객체지향 개념 (쫌 아는체 하기)

그것은 바로,

“상징 체계” 를 만들고 공유하는 하는 능력

사람은,상징 체계를 만들고, 발전시켜다음세대에 물려줍니다.

언어

문자 수학음악

Page 16: 객체지향 개념 (쫌 아는체 하기)

그것은 바로,

“상징 체계” 를 만들고 공유하는 하는 능력

사람은,상징 체계를 만들고, 발전시켜다음세대에 물려줍니다.

언어

문자 수학음악

이것을 가능하게 하는 것, 바로 “추상”화하는 능력입니다.

Page 17: 객체지향 개념 (쫌 아는체 하기)

abstraction抽象

Page 18: 객체지향 개념 (쫌 아는체 하기)

피카소(?) 추상화(?), 어려운 것?abstraction抽象

Page 19: 객체지향 개념 (쫌 아는체 하기)

피카소(?) 추상화(?), 어려운 것?abstraction抽象

Page 20: 객체지향 개념 (쫌 아는체 하기)

abstraction

코끼리 상 모양 상

抽象뽑아낼 추 대상으로부터,

모양을 뽑아내는 것

Page 21: 객체지향 개념 (쫌 아는체 하기)

abstraction

코끼리 상 모양 상

즉, 대상에서 특징만을 뽑아낸 것(것 = description)

抽象뽑아낼 추 대상으로부터,

모양을 뽑아내는 것

Page 22: 객체지향 개념 (쫌 아는체 하기)

“추상”들을 만들고, 공유하고, 발전시키는 능력

이 능력이야 말로다른 동물과 구별되는, 사람만이 가진고유한 능력이라고 할 수 있습니다.

Page 23: 객체지향 개념 (쫌 아는체 하기)

객체지향에 대해 이야기하려던거

아니었나요?

무신소리하는 거야?

Page 24: 객체지향 개념 (쫌 아는체 하기)

본론으로 돌아 가서...

Page 25: 객체지향 개념 (쫌 아는체 하기)

객체지향客體指向

Object Oriented

Page 26: 객체지향 개념 (쫌 아는체 하기)

우선 사전을 찾아봅니다.

객체(客體): 작용의 대상이 되는 쪽

지향(指向): 어떤 목표로 뜻이 쏠리어 향함(네이* 국어사전)

Page 27: 객체지향 개념 (쫌 아는체 하기)

“객체지향”이라..음…

객체는 … 구체적인 대상

지향(指向).. 향한다객체를 향해 간다? 객체를 추구한다?

Page 28: 객체지향 개념 (쫌 아는체 하기)

“객체지향”이라..음…

객체는 … 구체적인 대상

지향(指向).. 향한다객체를 향해 간다? 객체를 추구한다?

여기서 말하는 oriented 는 방향성 (X)

Page 29: 객체지향 개념 (쫌 아는체 하기)

Oriented 은 “위주” 혹은 “선호”라고 하는 것이 더 잘 어울립니다.

예를 들어,

안주 Oriented 란? 술은 안마시고 안주만 먹는

Page 30: 객체지향 개념 (쫌 아는체 하기)

나름 다시 정리해 봅니다.

객체(客體): 객관적으로 존재하는 실체

지향(指向): → 위주(爲主), 주되는 것으로 삼는 것

Page 31: 객체지향 개념 (쫌 아는체 하기)

Object Oriented,

"객체 위주"라고 이해하는 것이 훨씬 편합니다.

Page 32: 객체지향 개념 (쫌 아는체 하기)

• Object Oriented Analysis, 객체 갖고 분석하다

• Object Oriented Design, 객체 갖고 설계하다

• Object Oriented Programming, 객체 갖고 프로그램 하다

Object Oriented, 한마디로

"객체 갖고 놀자"

Page 33: 객체지향 개념 (쫌 아는체 하기)

객체지향 키워드 5 ( 쫌 아는 척 가능하게 하는 )

클래스(class), 오브젝트(object)

캡슐화 (Encapsulation)

상속성 (Inheritance)

다형성 (Polymorphism)

Page 34: 객체지향 개념 (쫌 아는체 하기)

클래스와 오브젝트

클래스(class) = 추상(abstract)

오브젝트(object) = 실체(instance)

Page 35: 객체지향 개념 (쫌 아는체 하기)

정의 1. 클래스(class)는 표현 대상의 특징에 대한 서술 말한다.

= abstraction 추상

클래스는 표현 대상들의 공통적인 특징을 서술(description)한 것

Page 36: 객체지향 개념 (쫌 아는체 하기)

추상 abstraction (다시 한번)

추상은 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 하는 기능

• 프로시져 추상화 (Procedural abstraction) : 함수• 데이터 추상화 (Data abstraction) : 구조체, 배열, 포인터

Page 37: 객체지향 개념 (쫌 아는체 하기)

정의 2. 오브젝트(object)는 클래스의 인스턴스(instance) 이다

오브젝트는 instance of class 입니다.

즉, 클래스가 실체로 만들어진 것이죠.

Page 38: 객체지향 개념 (쫌 아는체 하기)

클래스와 오브젝트

멍멍이

초롱이

누렁이

점박이우리집

외가댁

옆집

클래스(class)공통 특징, 서술

오브젝트 (object)구체, 실제 존재, 고유성

Page 39: 객체지향 개념 (쫌 아는체 하기)

클래스와 오브젝트

클래스(class) = 추상(abstract)

오브젝트(object) = 실체(instance)

Page 40: 객체지향 개념 (쫌 아는체 하기)

다양한 용어들, 그러나 같은 뜻

attribute = data = member variables = state = field behavior = operation = member function = method

• 클래스(class) = 개념(concept) = 타입(type)

• 객체(object) = 실체(instance) = 변수(variable)

Page 41: 객체지향 개념 (쫌 아는체 하기)

class Dog {

int x; int y;

public:

void move(int, int);

void bark();

void run();

};

int main() {

Dog d;

d.move(10, 20);

return 0;

}

클래스(class)공통 특징, 서술

오브젝트 (object)고유성, 구체, 실제 존재

코드의 문법(C++)은 신경쓰지 마세요 !전체적인 생김새만 보세요.

Page 42: 객체지향 개념 (쫌 아는체 하기)

오브젝트는 데이터와 데이터에 대한 조작의 묶은 것입니다.

오브젝트의 모양은 클래스(class)에 서술되어 있죠.

Page 43: 객체지향 개념 (쫌 아는체 하기)

코드의 문법(C++)은 신경쓰지 마세요 !

Object = data + operation on data + Identity

class Dog {

int x; int y;

public:

void move(int, int);

void bark();

void run();

};

int main() {

Dog d;

d.move(10, 20);

return 0;

}

Page 44: 객체지향 개념 (쫌 아는체 하기)

(리뷰) 클래스와 오브젝트

정의 1. class: 표현 대상에 대한 description

정의 2. object: instance of class

Page 45: 객체지향 개념 (쫌 아는체 하기)

다음 세가지 특성을 지원하는 언어를

객체지향 프로그래밍언어라고 합니다.

① 캡슐화 (encapsulation)

② 상속성 (inheritance)

③ 다형성 (polymorphism)

Page 46: 객체지향 개념 (쫌 아는체 하기)

정의 3. 캡슐화: '데이터'와 '데이터를 다루는 방법'를 묶는 것

data + operation on data

class Dog {

int x; int y;

public:

void move(int, int);

void bark();

void run();

};묶음

Page 47: 객체지향 개념 (쫌 아는체 하기)

캡슐화(encapsulation)

• 캡슐화는 “데이터 + 데이터에 대한 조작”을 묶는 것

• 관련 있는 것을 묶어서 생각하는 것은 매우 자연스러운 일

묶어서 이름을 부여하는 것, 바로 추상화(abstraction)입니다.

Page 48: 객체지향 개념 (쫌 아는체 하기)

정의 4. 상속성

하나의 클래스가지고 있는 특징들을 그대로 다른 클래스가 물려 받는 것

= 데이터 + 조작

Page 49: 객체지향 개념 (쫌 아는체 하기)

class Dog {

int x; int y;

public:

void move(int, int);

void bark();

void run();

};

class Poodle: public Dog {

void bark();

};

Dog

Poodle

Poodle에 x,y, move()가 없지만Dog에서 물려 받습니다.Bark()는 새로 정의 됩니다.

상속을 표현하는 화살표는상속의 방향이 아니라IS-A 관계를 표현합니다.

Poodle IS-A Dog

Page 50: 객체지향 개념 (쫌 아는체 하기)

Dog

Poodle

썰매개

Bulldog

Samoyed

상속성은 계보(계층)의 의미도 있습니다.

썰매개 IS-A Dog

Page 51: 객체지향 개념 (쫌 아는체 하기)

Dog

Poodle

썰매개

Bulldog

Samoyed

새로운 개념 등장

기존 클래스와 구분되는 특징만기술하여추가 합니다.

Page 52: 객체지향 개념 (쫌 아는체 하기)

Dog

Poodle

썰매개

Bulldog

Husky IS-A 썰매개

SamoyedHusky

Husky 추가

Dog과 썰매개의 특징을 그대로물려받습니다. (재사용, 유연성)

썰매개 IS-A Dog

Page 53: 객체지향 개념 (쫌 아는체 하기)

정의 5. 다형성

상속성의 계층를 따라서 각각의 클래스에 한가지 이름을 줄 수 있는것

• 다형성(polymorphism; 폴리 모피즘) "여러 형태"를 의미하는 그리스어

• 상속성의 계층를 따라서 각 클래스에 동일한 이름의 메소드을 사용할 수 있는 것

• 간단히 말해, 같은 명령을 각기 다른 오브젝트에 줄 수 있다는 뜻

Page 54: 객체지향 개념 (쫌 아는체 하기)

Dog

Poodle

썰매개

Bulldog

SamoyedHusky

bark()

“왈왈”

Dog d;

d = new Poodle()

d.bark() // “왈왈”

d = new Bulldog()

d.bark() // “멍멍”

d = new Husky()

d.bark() // “…”

코드의 문법(가상언어)은 신경쓰지 마세요 !

bark()

“멍멍”

bark()

“컹컹”

bark()

“…”

Page 55: 객체지향 개념 (쫌 아는체 하기)

메시지 전달 (message passing)

객체지향관점에서 프로그램은 오브젝트에 message를 보내는 것으로 실행

Dog d;

d = new Poodle()

d.bark() // “왈왈”

d = new Bulldog()

d.bark() // “멍멍”

• d.bark(): “객체 d에 bark라는 메시지를 보낸다”고 읽는다.• 실제로는 객체 d의 bark()를 호출• 즉, 실제 구체적 동작과 관계없이

“객체”와 객체에 대한 상호작용 관점을 제공

Page 56: 객체지향 개념 (쫌 아는체 하기)

(리뷰) 캡슐화, 상속성, 다형성

정의 3. 캡슐화: Data + operation on data정의 4. 상속성: 상속 계층을 따라 특성(data, operation)을 공유정의 5. 다형성: 다양한 형태에 동일한 명령을 사용

Page 57: 객체지향 개념 (쫌 아는체 하기)

객체지향은 프로그래밍 중의 하나입니다.

구조적 프로그래밍 (파스칼, C)

객체지향 프로그래밍 (자바, C++)

명령형 프로그래밍 (포트란, 코볼, 알골, 파스칼, C, 에이다)

선언형 프로그래밍 (프롤로그, SQL)

함수형 프로그래밍 (하스켈, 리스프)

객체기반 (자바스크립트, 에이다), 이벤트 드리븐, 절차적… 등등등등등 많네요.

패러다임

= 관점(인식 체계)

Page 58: 객체지향 개념 (쫌 아는체 하기)

가장 대표적인 프로그래밍 패러다임 두가지

구조적 프로그래밍 Structured Programming (파스칼, C)

객체지향 프로그래밍 Object Oriented Programming (자바, C++)

OOP

Page 59: 객체지향 개념 (쫌 아는체 하기)

구조적 (Structured)

에츠허르 데이크스트라

Sequence, Alternative, Iteration

Divide and quanquer

Top-down design

Pascal, C

객체지향 (Object-Oriented)

앨런 케이

Class, object

Encapsulation, Inheritance, Polymorphism

Simula 67, Smalltalk, C++, Java

Page 60: 객체지향 개념 (쫌 아는체 하기)

에츠허르 데이크스트라Edsger Wybe Dijkstra, 네덜란드의 컴퓨터 과학자, 1972년 튜링상 수상

• (모든 고수준 언어의 조상)인 ALGOL 개발(’50년대 말)• (1968) [Goto Statement Considered Harmful]

[소프트웨어 공학]과 Structured Programming 시대를 여심• [데이크스트라 알고리즘], 처음으로 최단거리 알고리즘을 학문적으로 연구• [세마포어]의 개념 사용, 운영체제의 영역까지 지대한 영향• 1972 [Turing Award] 수상

"Can machine think?" (기계가 생각을 할 수 있을까요?)데이크스트라 교수는 대답 대신 반문했다."Can submarine swim?" (잠수함은 헤엄칠 수 있을까?)

(1930~ 2002)

Page 61: 객체지향 개념 (쫌 아는체 하기)

앨런 케이Alan Curtis Kay 미국의 컴퓨터 과학자

• 이반 서덜랜드와 함께 스케치패드 개발(1960년대 유타대학교)• 제록스 파크(PARC)에서 Smalltalk 개발 (70년대)• 객체지향 프로그래밍을 개척한 공로로 튜링상(2003)

미래를 예측하는 가장 좋은 방법은 미래를 발명하는 것이다.(The best way to predict the future is to invent it.)

(1940~ )

Page 62: 객체지향 개념 (쫌 아는체 하기)

Smalltalk, “SW시스템”

Smalltalk의 목표는

프로그래밍을 하지 않아도 되는 시스템을 만드는것이 아니라,

누구라도 쉽게 프로그래밍을 할 수 있는 환경을 만드는 것

Smalltalk는 현대 대부분 객체지향언어의 조상

Smalltalk를 개발한 알토 워크스테이션은 최초의 GUI 시스템

이후 다른 컴퓨터 시스템들이 GUI에 지대한 영향

Smalltalk는 SW시스템 (프로그래밍 언어, 개발환경, 라이브러리로 구성)

Smalltalk-76 User Interface

Page 63: 객체지향 개념 (쫌 아는체 하기)

Object Oriented Programming Languages

cs.washington.edu cse341

진짜 원조 OOP

원조 OOP

Page 64: 객체지향 개념 (쫌 아는체 하기)

객체지향과 시뮬레이션의 관계?

최초의 객체지향 언어 “Simula67”는

시뮬레이션을 위해 만들어진 언어

• Class, object 등의 개념은 모두 실세계를 어떻게 묘사할 것인가에 출발

• 실제, 객체지향 분석/설계는 현실세계를 시뮬레이션 한다는 관점에서 진행

Page 65: 객체지향 개념 (쫌 아는체 하기)

객체지향의 장점

1. 자연스런 모델링 (Natual Modeling of Problem)

2. 생산성 향상 (Higher Productivity)

3. 점진적 개발 (Incremental Development)

4. 견고한 의미적 모델링 (Stable Semantic Modeling)

5. 명확한 인터페이스 기술 (Clear Interface Description)

6. 보안 (Secure System)

7. 유지보수의 용이성 (Better Maintainability)

뭔지 모르겠지만좋다는 이야기 같음

Page 66: 객체지향 개념 (쫌 아는체 하기)

다양한 오해들

• 객체지향 언어 = 객체지향 프로그래밍

누가, 어떻게 쓰냐에 따라 달라진다.

• 기존의 방법보다 좋다 어디에, 어떻게 쓰냐에 따라 다르다.

• 객체지향은 프로그래밍 방법론이다 분석/설계/구현을 포함한 SW시스템 관점에서 봐야

Page 67: 객체지향 개념 (쫌 아는체 하기)

분석/설계

구조적 (Structured)

기능적 분할 (functional decomposition)

절차 중심 (procedure-oriented)

처리 위주 - 프로세스의 계층에 초점

데이터가 드러남, 단일성, 1회사용,

순차적인 알고리즘 위주

객체지향 (Object-Oriented)

객체와 객체간 역할과 관계 중심

객체중심 (Object Orientation)

데이터 감추기 - 행위만 보여진다.

모듈화가 자연스레 달성, 재사용성,

순서없는 메시지 기반

Page 68: 객체지향 개념 (쫌 아는체 하기)

객체지향 분석/설계

1) 문제영역에서 배우(actor)를 찾아내고2) 각 배우들의 책임과 역할을 정의하고3) 배우들간의 관계를 지정하고4) 각 배우들에 대한 대본(script)를 쓴다.

Page 69: 객체지향 개념 (쫌 아는체 하기)

객체지향 분석/설계 방법론 요약

식별하고 일반화하고(object, class), 대상들 간의 관계(inheritance, embedded)를 설정하고, 상호작용 하도록(behavior) 한다.

Page 70: 객체지향 개념 (쫌 아는체 하기)

Iteration Planning

Requirements

Capture

Analysis & Design

Implementation

Test & Release

폭포수모델(Waterfall model) 나선 모델(Spiral model)

요구분석 분석

설계구현

대표적 개발 모델

Page 71: 객체지향 개념 (쫌 아는체 하기)

(리뷰) 구조적 프로그래밍, 객체지향 프로그래밍

• 구조적 프로그래밍: 기능, 절차 중심• 객체지향 프로그래밍: 객체, 관계 중심

Page 72: 객체지향 개념 (쫌 아는체 하기)

(리뷰) 기본 개념

• 객체지향: 객체 위주, 즉 “객체 갖고 놀자”• 클래스(class): 표현 대상에 대한 description

• 오브젝트(object): instance of class

Page 73: 객체지향 개념 (쫌 아는체 하기)

(리뷰) 객체 지향의 핵심 개념

• 캡슐화: Data + Operation on data

• 상속성: 상속 계층을 따라 특성(data, operation)을 공유• 다형성: 다양한 형태에 동일한 명령을 사용• 메시지 전달 (message passing): 객체간에 메시지를 주고 받아 실행

캡슐화(추상화 능력), 상속성(분류하는 능력), 다형성(같은 방법으로 다루기)메시지 전달 (실존하는 객체들이 상호작용)객체지향은 사람의 추상능력, 인식방법에 가까운 개발 방법론

Page 74: 객체지향 개념 (쫌 아는체 하기)

객체지향을 한마디로 정의하면,

"사람이 세계를 보고 이해하는 방법을 흉내 낸 방법론"

Page 75: 객체지향 개념 (쫌 아는체 하기)

이승준 fb.com/plusjune