SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
객체지향 개념
Object Orientation
쫌 아는체 하기(궁서체)
이 승 준
fb.com/plusjune
오늘 이야기
주제: “객체지향” 개념 (어렴풋이 알았던)
목표: 딴데가서 쫌 아는체 하기
사람은 포유류에 속하는 동물임
사람이 다른 동물과 구별되는, 고유한 특징은?
. .
재미있는 동물의 세계부터 시작해 보죠.
마모셋 원숭이들,
'박스 뚜껑 여는 방법'이 담긴 교육 비디오를 보여준 다음
박스를 줬더니,
비디오에서 보고 배운 대로 박스 뚜껑을 열었다
도구 사용법을 서로 배우는 앵무새들
버섯농사 짓는
잎꾼개미
5천만년 전 부터 농사 시작
인류는 겨우(?) 1만년전 부터
심지어 농약도 만든다능 @.@
빵 조각으로 낚시하는 해오라기
혼자서도 잘 노는 강아지
호모 사피엔스
호모 파베르
호모 루덴스
생각
도구
놀이
호모 사피엔스
호모 파베르
호모 루덴스
생각
도구
놀이
사람만의
전유물이 아니라능…
진정한 고유의 특징?
다른 동물과 구별되는, 사람만이 가진
그것은 바로,
“상징 체계” 를 만들고 공유하는 하는 능력
그것은 바로,
“상징 체계” 를 만들고 공유하는 하는 능력
언어
문자 수학
음악
그것은 바로,
“상징 체계” 를 만들고 공유하는 하는 능력
사람은,
상징 체계를 만들고, 발전시켜
다음세대에 물려줍니다.
언어
문자 수학
음악
그것은 바로,
“상징 체계” 를 만들고 공유하는 하는 능력
사람은,
상징 체계를 만들고, 발전시켜
다음세대에 물려줍니다.
언어
문자 수학
음악
이것을 가능하게 하는 것, 바로 “추상”화하는 능력입니다.
abstraction抽象
피카소(?) 추상화(?), 어려운 것?abstraction抽象
피카소(?) 추상화(?), 어려운 것?abstraction抽象
abstraction
코끼리 상 모양 상
抽象
뽑아낼 추 대상으로부터,
모양을 뽑아내는 것
abstraction
코끼리 상 모양 상
즉, 대상에서 특징만을 뽑아낸 것
(것 = description)
抽象
뽑아낼 추 대상으로부터,
모양을 뽑아내는 것
“추상”들을 만들고, 공유하고, 발전시키는 능력
이 능력이야 말로
다른 동물과 구별되는, 사람만이 가진
고유한 능력이라고 할 수 있습니다.
객체지향에 대해 이야기하려던거
아니었나요?
무신소리
하는 거야?
본론으로 돌아 가서...
객체지향
客體指向
Object Oriented
우선 사전을 찾아봅니다.
객체(客體): 작용의 대상이 되는 쪽
지향(指向): 어떤 목표로 뜻이 쏠리어 향함
(네이* 국어사전)
“객체지향”이라..
음…
객체는 … 구체적인 대상
지향(指向).. 향한다
객체를 향해 간다? 객체를 추구한다?
“객체지향”이라..
음…
객체는 … 구체적인 대상
지향(指向).. 향한다
객체를 향해 간다? 객체를 추구한다?
여기서 말하는 oriented 는 방향성 (X)
Oriented 은 “위주” 혹은 “선호”라고 하는 것이 더 잘 어울립니다.
예를 들어,
안주 Oriented 란?
술은 안마시고 안주만 먹는
나름 다시 정리해 봅니다.
객체(客體): 객관적으로 존재하는 실체
지향(指向): → 위주(爲主), 주되는 것으로 삼는 것
Object Oriented,
"객체 위주"라고 이해하는 것이 훨씬 편합니다.
• Object Oriented Analysis, 객체 갖고 분석하다
• Object Oriented Design, 객체 갖고 설계하다
• Object Oriented Programming, 객체 갖고 프로그램 하다
Object Oriented, 한마디로
"객체 갖고 놀자"
객체지향 키워드 5 ( 쫌 아는 척 가능하게 하는 )
클래스(class), 오브젝트(object)
캡슐화 (Encapsulation)
상속성 (Inheritance)
다형성 (Polymorphism)
클래스와 오브젝트
클래스(class) = 추상(abstract)
오브젝트(object) = 실체(instance)
정의 1. 클래스(class)는 표현 대상의 특징에 대한 서술 말한다.
= abstraction 추상
클래스는 표현 대상들의 공통적인 특징을 서술(description)한 것
추상 abstraction (다시 한번)
추상은 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 하는 기능
• 프로시져 추상화 (Procedural abstraction) : 함수
• 데이터 추상화 (Data abstraction) : 구조체, 배열, 포인터
정의 2. 오브젝트(object)는 클래스의 인스턴스(instance) 이다
오브젝트는 instance of class 입니다.
즉, 클래스가 실체로 만들어진 것이죠.
클래스와 오브젝트
멍멍이
초롱이
누렁이
점박이
우리집
외가댁
옆집
클래스(class)
공통 특징, 서술
오브젝트 (object)
구체, 실제 존재, 고유성
클래스와 오브젝트
클래스(class) = 추상(abstract)
오브젝트(object) = 실체(instance)
다양한 용어들, 그러나 같은 뜻
 attribute = data = member variables = state = field
 behavior = operation = member function = method
• 클래스(class) = 개념(concept) = 타입(type)
• 객체(object) = 실체(instance) = 변수(variable)
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++)은 신경쓰지 마세요 !
전체적인 생김새만 보세요.
오브젝트는 데이터와 데이터에 대한 조작의 묶은 것입니다.
오브젝트의 모양은 클래스(class)에 서술되어 있죠.
코드의 문법(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;
}
(리뷰) 클래스와 오브젝트
정의 1. class: 표현 대상에 대한 description
정의 2. object: instance of class
다음 세가지 특성을 지원하는 언어를
객체지향 프로그래밍언어라고 합니다.
① 캡슐화 (encapsulation)
② 상속성 (inheritance)
③ 다형성 (polymorphism)
정의 3. 캡슐화: '데이터'와 '데이터를 다루는 방법'를 묶는 것
data + operation on data
class Dog {
int x; int y;
public:
void move(int, int);
void bark();
void run();
};묶음
캡슐화(encapsulation)
• 캡슐화는 “데이터 + 데이터에 대한 조작”을 묶는 것
• 관련 있는 것을 묶어서 생각하는 것은 매우 자연스러운 일
묶어서 이름을 부여하는 것, 바로 추상화(abstraction)입니다.
정의 4. 상속성
하나의 클래스가지고 있는 특징들을 그대로 다른 클래스가 물려 받는 것
= 데이터 + 조작
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
Dog
Poodle
썰매개
Bulldog
Samoyed
상속성은 계보(계층)의 의미도 있습니다.
썰매개 IS-A Dog
Dog
Poodle
썰매개
Bulldog
Samoyed
새로운 개념 등장
기존 클래스와 구분되는 특징만기술하여
추가 합니다.
Dog
Poodle
썰매개
Bulldog
Husky IS-A 썰매개
Samoyed
Husky
Husky 추가
Dog과 썰매개의 특징을 그대로
물려받습니다.
(재사용, 유연성)
썰매개 IS-A Dog
정의 5. 다형성
상속성의 계층를 따라서 각각의 클래스에 한가지 이름을 줄 수 있는것
• 다형성(polymorphism; 폴리 모피즘) "여러 형태"를 의미하는 그리스어
• 상속성의 계층를 따라서 각 클래스에 동일한 이름의 메소드을 사용할 수 있는 것
• 간단히 말해, 같은 명령을 각기 다른 오브젝트에 줄 수 있다는 뜻
Dog
Poodle
썰매개
Bulldog
Samoyed
Husky
bark()
“왈왈”
Dog d;
d = new Poodle()
d.bark() // “왈왈”
d = new Bulldog()
d.bark() // “멍멍”
d = new Husky()
d.bark() // “…”
코드의 문법(가상언어)은 신경쓰지 마세요 !
bark()
“멍멍”
bark()
“컹컹”
bark()
“…”
메시지 전달 (message passing)
객체지향관점에서 프로그램은 오브젝트에 message를 보내는 것으로 실행
Dog d;
d = new Poodle()
d.bark() // “왈왈”
d = new Bulldog()
d.bark() // “멍멍”
• d.bark(): “객체 d에 bark라는 메시지를 보낸다”고 읽는다.
• 실제로는 객체 d의 bark()를 호출
• 즉, 실제 구체적 동작과 관계없이
“객체”와 객체에 대한 상호작용 관점을 제공
(리뷰) 캡슐화, 상속성, 다형성
정의 3. 캡슐화: Data + operation on data
정의 4. 상속성: 상속 계층을 따라 특성(data, operation)을 공유
정의 5. 다형성: 다양한 형태에 동일한 명령을 사용
객체지향은 프로그래밍 중의 하나입니다.
 구조적 프로그래밍 (파스칼, C)
 객체지향 프로그래밍 (자바, C++)
 명령형 프로그래밍 (포트란, 코볼, 알골, 파스칼, C, 에이다)
 선언형 프로그래밍 (프롤로그, SQL)
 함수형 프로그래밍 (하스켈, 리스프)
 객체기반 (자바스크립트, 에이다), 이벤트 드리븐, 절차적… 등등등등등 많네요.
패러다임
= 관점(인식 체계)
가장 대표적인 프로그래밍 패러다임 두가지
 구조적 프로그래밍 Structured Programming (파스칼, C)
 객체지향 프로그래밍 Object Oriented Programming (자바, C++)
OOP
구조적 (Structured)
에츠허르 데이크스트라
Sequence, Alternative, Iteration
Divide and quanquer
Top-down design
Pascal, C
객체지향 (Object-Oriented)
앨런 케이
Class, object
Encapsulation, Inheritance, Polymorphism
Simula 67, Smalltalk, C++, Java
에츠허르 데이크스트라
Edsger Wybe Dijkstra, 네덜란드의 컴퓨터 과학자, 1972년 튜링상 수상
• (모든 고수준 언어의 조상)인 ALGOL 개발(’50년대 말)
• (1968) [Goto Statement Considered Harmful]
[소프트웨어 공학]과 Structured Programming 시대를 여심
• [데이크스트라 알고리즘], 처음으로 최단거리 알고리즘을 학문적으로 연구
• [세마포어]의 개념 사용, 운영체제의 영역까지 지대한 영향
• 1972 [Turing Award] 수상
"Can machine think?" (기계가 생각을 할 수 있을까요?)
데이크스트라 교수는 대답 대신 반문했다.
"Can submarine swim?" (잠수함은 헤엄칠 수 있을까?)
(1930~ 2002)
앨런 케이
Alan Curtis Kay 미국의 컴퓨터 과학자
• 이반 서덜랜드와 함께 스케치패드 개발(1960년대 유타대학교)
• 제록스 파크(PARC)에서 Smalltalk 개발 (70년대)
• 객체지향 프로그래밍을 개척한 공로로 튜링상(2003)
미래를 예측하는 가장 좋은 방법은 미래를 발명하는 것이다.
(The best way to predict the future is to invent it.)
(1940~ )
Smalltalk, “SW시스템”
 Smalltalk의 목표는
프로그래밍을 하지 않아도 되는 시스템을 만드는것이 아니라,
누구라도 쉽게 프로그래밍을 할 수 있는 환경을 만드는 것
 Smalltalk는 현대 대부분 객체지향언어의 조상
 Smalltalk를 개발한 알토 워크스테이션은 최초의 GUI 시스템
이후 다른 컴퓨터 시스템들이 GUI에 지대한 영향
 Smalltalk는 SW시스템 (프로그래밍 언어, 개발환경, 라이브러리로 구성)
Smalltalk-76 User Interface
Object Oriented Programming Languages
cs.washington.edu cse341
진짜 원조 OOP
원조 OOP
객체지향과 시뮬레이션의 관계?
최초의 객체지향 언어 “Simula67”는
시뮬레이션을 위해 만들어진 언어
• Class, object 등의 개념은 모두 실세계를 어떻게 묘사할 것인가에 출발
• 실제, 객체지향 분석/설계는 현실세계를 시뮬레이션 한다는 관점에서 진행
객체지향의 장점
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)
뭔지 모르겠지만
좋다는 이야기 같음
다양한 오해들
• 객체지향 언어 = 객체지향 프로그래밍
 누가, 어떻게 쓰냐에 따라 달라진다.
• 기존의 방법보다 좋다
 어디에, 어떻게 쓰냐에 따라 다르다.
• 객체지향은 프로그래밍 방법론이다
 분석/설계/구현을 포함한 SW시스템 관점에서 봐야
분석/설계
구조적 (Structured)
 기능적 분할 (functional decomposition)
 절차 중심 (procedure-oriented)
 처리 위주 - 프로세스의 계층에 초점
 데이터가 드러남, 단일성, 1회사용,
순차적인 알고리즘 위주
객체지향 (Object-Oriented)
 객체와 객체간 역할과 관계 중심
 객체중심 (Object Orientation)
 데이터 감추기 - 행위만 보여진다.
 모듈화가 자연스레 달성, 재사용성,
순서없는 메시지 기반
객체지향 분석/설계
1) 문제영역에서 배우(actor)를 찾아내고
2) 각 배우들의 책임과 역할을 정의하고
3) 배우들간의 관계를 지정하고
4) 각 배우들에 대한 대본(script)를 쓴다.
객체지향 분석/설계 방법론 요약
식별하고 일반화하고(object, class),
대상들 간의 관계(inheritance, embedded)를 설정하고,
상호작용 하도록(behavior) 한다.
Iteration Planning
Requirements
Capture
Analysis & Design
Implementation
Test & Release
폭포수모델(Waterfall model) 나선 모델(Spiral model)
요구분석 분석
설계구현
대표적 개발 모델
(리뷰) 구조적 프로그래밍, 객체지향 프로그래밍
• 구조적 프로그래밍: 기능, 절차 중심
• 객체지향 프로그래밍: 객체, 관계 중심
(리뷰) 기본 개념
• 객체지향: 객체 위주, 즉 “객체 갖고 놀자”
• 클래스(class): 표현 대상에 대한 description
• 오브젝트(object): instance of class
(리뷰) 객체 지향의 핵심 개념
• 캡슐화: Data + Operation on data
• 상속성: 상속 계층을 따라 특성(data, operation)을 공유
• 다형성: 다양한 형태에 동일한 명령을 사용
• 메시지 전달 (message passing): 객체간에 메시지를 주고 받아 실행
캡슐화(추상화 능력), 상속성(분류하는 능력), 다형성(같은 방법으로 다루기)
메시지 전달 (실존하는 객체들이 상호작용)
객체지향은 사람의 추상능력, 인식방법에 가까운 개발 방법론
객체지향을 한마디로 정의하면,
"사람이 세계를 보고 이해하는 방법을 흉내 낸 방법론"
이승준 fb.com/plusjune

Contenu connexe

Tendances

고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님NAVER D2
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)_ce
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 

Tendances (20)

고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 

En vedette

오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) 오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) Yongho Ha
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptWojciech Dzikowski
 
Lecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeLecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeKobkrit Viriyayudhakorn
 
ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]Guillermo Paz
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overviewhesher
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념중선 곽
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)민지 김
 
보고서 쓸 때 문장 줄이기 연습
보고서 쓸 때 문장 줄이기 연습보고서 쓸 때 문장 줄이기 연습
보고서 쓸 때 문장 줄이기 연습Sungchul CHOI
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in JavaStrannik_2013
 
Micro Service Architecture 탐방기
Micro Service Architecture 탐방기Micro Service Architecture 탐방기
Micro Service Architecture 탐방기jbugkorea
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionJunHo Yoon
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견NAVER D2
 
Practical Machine Learning
Practical Machine LearningPractical Machine Learning
Practical Machine LearningDavid Jones
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance TuningJi-Woong Choi
 
20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은VentureSquare
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Giorgio Cefaro
 
왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나소리 강
 
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)Sangkyu Rho
 

En vedette (20)

오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) 오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern Javascript
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
Lecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeLecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-Native
 
ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]ES6 in Production [JSConfUY2015]
ES6 in Production [JSConfUY2015]
 
ES2015 (ES6) Overview
ES2015 (ES6) OverviewES2015 (ES6) Overview
ES2015 (ES6) Overview
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념
 
TensorFlow
TensorFlowTensorFlow
TensorFlow
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)
 
보고서 쓸 때 문장 줄이기 연습
보고서 쓸 때 문장 줄이기 연습보고서 쓸 때 문장 줄이기 연습
보고서 쓸 때 문장 줄이기 연습
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in Java
 
Micro Service Architecture 탐방기
Micro Service Architecture 탐방기Micro Service Architecture 탐방기
Micro Service Architecture 탐방기
 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd Edition
 
[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견[D2]java 성능에 대한 오해와 편견
[D2]java 성능에 대한 오해와 편견
 
Practical Machine Learning
Practical Machine LearningPractical Machine Learning
Practical Machine Learning
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은20150526 오픈업 mcn의 미래_명승은
20150526 오픈업 mcn의 미래_명승은
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015
 
왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나
 
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
공짜 경제에서 어떻게 돈을 버는가?(How to Make Money in Free Economy)
 

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

객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본용호 최
 
Explaining knowledge distillation
Explaining knowledge distillationExplaining knowledge distillation
Explaining knowledge distillationtaeseon ryu
 
2012 3 qp_hybrid algorithm optimization with artificial intelligence
2012 3 qp_hybrid algorithm optimization with artificial intelligence 2012 3 qp_hybrid algorithm optimization with artificial intelligence
2012 3 qp_hybrid algorithm optimization with artificial intelligence Jong MIn Yu
 
데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님NAVER D2
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍QooJuice
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)용호 최
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingChangHyeon Bae
 
기계학습 / 딥러닝이란 무엇인가
기계학습 / 딥러닝이란 무엇인가기계학습 / 딥러닝이란 무엇인가
기계학습 / 딥러닝이란 무엇인가Yongha Kim
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 releaseJaehyeuk Oh
 
[이러닝 블로그 : 박형주] 학습과제분석
[이러닝 블로그 : 박형주] 학습과제분석[이러닝 블로그 : 박형주] 학습과제분석
[이러닝 블로그 : 박형주] 학습과제분석hyungjoo park
 
언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptxMUUMUMUMU
 
추천 시스템 개요 (1)-draft
추천 시스템 개요 (1)-draft추천 시스템 개요 (1)-draft
추천 시스템 개요 (1)-drafthyunsung lee
 
파이썬 쪼렙 탈출 2주차 (20171031) jjolab
파이썬 쪼렙 탈출 2주차   (20171031) jjolab파이썬 쪼렙 탈출 2주차   (20171031) jjolab
파이썬 쪼렙 탈출 2주차 (20171031) jjolab건환 손
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for BioinformaticsHyungyong Kim
 

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

Communism OOP
Communism OOPCommunism OOP
Communism OOP
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
Light Tutorial Python
Light Tutorial PythonLight Tutorial Python
Light Tutorial Python
 
Explaining knowledge distillation
Explaining knowledge distillationExplaining knowledge distillation
Explaining knowledge distillation
 
2012 3 qp_hybrid algorithm optimization with artificial intelligence
2012 3 qp_hybrid algorithm optimization with artificial intelligence 2012 3 qp_hybrid algorithm optimization with artificial intelligence
2012 3 qp_hybrid algorithm optimization with artificial intelligence
 
데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님데이터분석과통계2 - 최재걸님
데이터분석과통계2 - 최재걸님
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
Hello, C# : OOP
Hello, C# : OOPHello, C# : OOP
Hello, C# : OOP
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
기계학습 / 딥러닝이란 무엇인가
기계학습 / 딥러닝이란 무엇인가기계학습 / 딥러닝이란 무엇인가
기계학습 / 딥러닝이란 무엇인가
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
[이러닝 블로그 : 박형주] 학습과제분석
[이러닝 블로그 : 박형주] 학습과제분석[이러닝 블로그 : 박형주] 학습과제분석
[이러닝 블로그 : 박형주] 학습과제분석
 
언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx
 
Gpg1
Gpg1Gpg1
Gpg1
 
추천 시스템 개요 (1)-draft
추천 시스템 개요 (1)-draft추천 시스템 개요 (1)-draft
추천 시스템 개요 (1)-draft
 
파이썬 쪼렙 탈출 2주차 (20171031) jjolab
파이썬 쪼렙 탈출 2주차   (20171031) jjolab파이썬 쪼렙 탈출 2주차   (20171031) jjolab
파이썬 쪼렙 탈출 2주차 (20171031) jjolab
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for Bioinformatics
 

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

  • 1. 객체지향 개념 Object Orientation 쫌 아는체 하기(궁서체) 이 승 준 fb.com/plusjune
  • 2. 오늘 이야기 주제: “객체지향” 개념 (어렴풋이 알았던) 목표: 딴데가서 쫌 아는체 하기
  • 3. 사람은 포유류에 속하는 동물임 사람이 다른 동물과 구별되는, 고유한 특징은? . .
  • 5. 마모셋 원숭이들, '박스 뚜껑 여는 방법'이 담긴 교육 비디오를 보여준 다음 박스를 줬더니, 비디오에서 보고 배운 대로 박스 뚜껑을 열었다
  • 6. 도구 사용법을 서로 배우는 앵무새들
  • 7. 버섯농사 짓는 잎꾼개미 5천만년 전 부터 농사 시작 인류는 겨우(?) 1만년전 부터 심지어 농약도 만든다능 @.@
  • 10. 호모 사피엔스 호모 파베르 호모 루덴스 생각 도구 놀이
  • 11. 호모 사피엔스 호모 파베르 호모 루덴스 생각 도구 놀이 사람만의 전유물이 아니라능…
  • 12. 진정한 고유의 특징? 다른 동물과 구별되는, 사람만이 가진
  • 13. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력
  • 14. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력 언어 문자 수학 음악
  • 15. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력 사람은, 상징 체계를 만들고, 발전시켜 다음세대에 물려줍니다. 언어 문자 수학 음악
  • 16. 그것은 바로, “상징 체계” 를 만들고 공유하는 하는 능력 사람은, 상징 체계를 만들고, 발전시켜 다음세대에 물려줍니다. 언어 문자 수학 음악 이것을 가능하게 하는 것, 바로 “추상”화하는 능력입니다.
  • 18. 피카소(?) 추상화(?), 어려운 것?abstraction抽象
  • 19. 피카소(?) 추상화(?), 어려운 것?abstraction抽象
  • 20. abstraction 코끼리 상 모양 상 抽象 뽑아낼 추 대상으로부터, 모양을 뽑아내는 것
  • 21. abstraction 코끼리 상 모양 상 즉, 대상에서 특징만을 뽑아낸 것 (것 = description) 抽象 뽑아낼 추 대상으로부터, 모양을 뽑아내는 것
  • 22. “추상”들을 만들고, 공유하고, 발전시키는 능력 이 능력이야 말로 다른 동물과 구별되는, 사람만이 가진 고유한 능력이라고 할 수 있습니다.
  • 26. 우선 사전을 찾아봅니다. 객체(客體): 작용의 대상이 되는 쪽 지향(指向): 어떤 목표로 뜻이 쏠리어 향함 (네이* 국어사전)
  • 27. “객체지향”이라.. 음… 객체는 … 구체적인 대상 지향(指向).. 향한다 객체를 향해 간다? 객체를 추구한다?
  • 28. “객체지향”이라.. 음… 객체는 … 구체적인 대상 지향(指向).. 향한다 객체를 향해 간다? 객체를 추구한다? 여기서 말하는 oriented 는 방향성 (X)
  • 29. Oriented 은 “위주” 혹은 “선호”라고 하는 것이 더 잘 어울립니다. 예를 들어, 안주 Oriented 란? 술은 안마시고 안주만 먹는
  • 30. 나름 다시 정리해 봅니다. 객체(客體): 객관적으로 존재하는 실체 지향(指向): → 위주(爲主), 주되는 것으로 삼는 것
  • 31. Object Oriented, "객체 위주"라고 이해하는 것이 훨씬 편합니다.
  • 32. • Object Oriented Analysis, 객체 갖고 분석하다 • Object Oriented Design, 객체 갖고 설계하다 • Object Oriented Programming, 객체 갖고 프로그램 하다 Object Oriented, 한마디로 "객체 갖고 놀자"
  • 33. 객체지향 키워드 5 ( 쫌 아는 척 가능하게 하는 ) 클래스(class), 오브젝트(object) 캡슐화 (Encapsulation) 상속성 (Inheritance) 다형성 (Polymorphism)
  • 34. 클래스와 오브젝트 클래스(class) = 추상(abstract) 오브젝트(object) = 실체(instance)
  • 35. 정의 1. 클래스(class)는 표현 대상의 특징에 대한 서술 말한다. = abstraction 추상 클래스는 표현 대상들의 공통적인 특징을 서술(description)한 것
  • 36. 추상 abstraction (다시 한번) 추상은 사용자가 구체적인 내용을 생각하지 않고도 사용할 수 하는 기능 • 프로시져 추상화 (Procedural abstraction) : 함수 • 데이터 추상화 (Data abstraction) : 구조체, 배열, 포인터
  • 37. 정의 2. 오브젝트(object)는 클래스의 인스턴스(instance) 이다 오브젝트는 instance of class 입니다. 즉, 클래스가 실체로 만들어진 것이죠.
  • 39. 클래스와 오브젝트 클래스(class) = 추상(abstract) 오브젝트(object) = 실체(instance)
  • 40. 다양한 용어들, 그러나 같은 뜻  attribute = data = member variables = state = field  behavior = operation = member function = method • 클래스(class) = 개념(concept) = 타입(type) • 객체(object) = 실체(instance) = 변수(variable)
  • 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++)은 신경쓰지 마세요 ! 전체적인 생김새만 보세요.
  • 42. 오브젝트는 데이터와 데이터에 대한 조작의 묶은 것입니다. 오브젝트의 모양은 클래스(class)에 서술되어 있죠.
  • 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; }
  • 44. (리뷰) 클래스와 오브젝트 정의 1. class: 표현 대상에 대한 description 정의 2. object: instance of class
  • 45. 다음 세가지 특성을 지원하는 언어를 객체지향 프로그래밍언어라고 합니다. ① 캡슐화 (encapsulation) ② 상속성 (inheritance) ③ 다형성 (polymorphism)
  • 46. 정의 3. 캡슐화: '데이터'와 '데이터를 다루는 방법'를 묶는 것 data + operation on data class Dog { int x; int y; public: void move(int, int); void bark(); void run(); };묶음
  • 47. 캡슐화(encapsulation) • 캡슐화는 “데이터 + 데이터에 대한 조작”을 묶는 것 • 관련 있는 것을 묶어서 생각하는 것은 매우 자연스러운 일 묶어서 이름을 부여하는 것, 바로 추상화(abstraction)입니다.
  • 48. 정의 4. 상속성 하나의 클래스가지고 있는 특징들을 그대로 다른 클래스가 물려 받는 것 = 데이터 + 조작
  • 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
  • 51. Dog Poodle 썰매개 Bulldog Samoyed 새로운 개념 등장 기존 클래스와 구분되는 특징만기술하여 추가 합니다.
  • 52. Dog Poodle 썰매개 Bulldog Husky IS-A 썰매개 Samoyed Husky Husky 추가 Dog과 썰매개의 특징을 그대로 물려받습니다. (재사용, 유연성) 썰매개 IS-A Dog
  • 53. 정의 5. 다형성 상속성의 계층를 따라서 각각의 클래스에 한가지 이름을 줄 수 있는것 • 다형성(polymorphism; 폴리 모피즘) "여러 형태"를 의미하는 그리스어 • 상속성의 계층를 따라서 각 클래스에 동일한 이름의 메소드을 사용할 수 있는 것 • 간단히 말해, 같은 명령을 각기 다른 오브젝트에 줄 수 있다는 뜻
  • 54. Dog Poodle 썰매개 Bulldog Samoyed Husky bark() “왈왈” Dog d; d = new Poodle() d.bark() // “왈왈” d = new Bulldog() d.bark() // “멍멍” d = new Husky() d.bark() // “…” 코드의 문법(가상언어)은 신경쓰지 마세요 ! bark() “멍멍” bark() “컹컹” bark() “…”
  • 55. 메시지 전달 (message passing) 객체지향관점에서 프로그램은 오브젝트에 message를 보내는 것으로 실행 Dog d; d = new Poodle() d.bark() // “왈왈” d = new Bulldog() d.bark() // “멍멍” • d.bark(): “객체 d에 bark라는 메시지를 보낸다”고 읽는다. • 실제로는 객체 d의 bark()를 호출 • 즉, 실제 구체적 동작과 관계없이 “객체”와 객체에 대한 상호작용 관점을 제공
  • 56. (리뷰) 캡슐화, 상속성, 다형성 정의 3. 캡슐화: Data + operation on data 정의 4. 상속성: 상속 계층을 따라 특성(data, operation)을 공유 정의 5. 다형성: 다양한 형태에 동일한 명령을 사용
  • 57. 객체지향은 프로그래밍 중의 하나입니다.  구조적 프로그래밍 (파스칼, C)  객체지향 프로그래밍 (자바, C++)  명령형 프로그래밍 (포트란, 코볼, 알골, 파스칼, C, 에이다)  선언형 프로그래밍 (프롤로그, SQL)  함수형 프로그래밍 (하스켈, 리스프)  객체기반 (자바스크립트, 에이다), 이벤트 드리븐, 절차적… 등등등등등 많네요. 패러다임 = 관점(인식 체계)
  • 58. 가장 대표적인 프로그래밍 패러다임 두가지  구조적 프로그래밍 Structured Programming (파스칼, C)  객체지향 프로그래밍 Object Oriented Programming (자바, C++) OOP
  • 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
  • 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)
  • 61. 앨런 케이 Alan Curtis Kay 미국의 컴퓨터 과학자 • 이반 서덜랜드와 함께 스케치패드 개발(1960년대 유타대학교) • 제록스 파크(PARC)에서 Smalltalk 개발 (70년대) • 객체지향 프로그래밍을 개척한 공로로 튜링상(2003) 미래를 예측하는 가장 좋은 방법은 미래를 발명하는 것이다. (The best way to predict the future is to invent it.) (1940~ )
  • 62. Smalltalk, “SW시스템”  Smalltalk의 목표는 프로그래밍을 하지 않아도 되는 시스템을 만드는것이 아니라, 누구라도 쉽게 프로그래밍을 할 수 있는 환경을 만드는 것  Smalltalk는 현대 대부분 객체지향언어의 조상  Smalltalk를 개발한 알토 워크스테이션은 최초의 GUI 시스템 이후 다른 컴퓨터 시스템들이 GUI에 지대한 영향  Smalltalk는 SW시스템 (프로그래밍 언어, 개발환경, 라이브러리로 구성) Smalltalk-76 User Interface
  • 63. Object Oriented Programming Languages cs.washington.edu cse341 진짜 원조 OOP 원조 OOP
  • 64. 객체지향과 시뮬레이션의 관계? 최초의 객체지향 언어 “Simula67”는 시뮬레이션을 위해 만들어진 언어 • Class, object 등의 개념은 모두 실세계를 어떻게 묘사할 것인가에 출발 • 실제, 객체지향 분석/설계는 현실세계를 시뮬레이션 한다는 관점에서 진행
  • 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) 뭔지 모르겠지만 좋다는 이야기 같음
  • 66. 다양한 오해들 • 객체지향 언어 = 객체지향 프로그래밍  누가, 어떻게 쓰냐에 따라 달라진다. • 기존의 방법보다 좋다  어디에, 어떻게 쓰냐에 따라 다르다. • 객체지향은 프로그래밍 방법론이다  분석/설계/구현을 포함한 SW시스템 관점에서 봐야
  • 67. 분석/설계 구조적 (Structured)  기능적 분할 (functional decomposition)  절차 중심 (procedure-oriented)  처리 위주 - 프로세스의 계층에 초점  데이터가 드러남, 단일성, 1회사용, 순차적인 알고리즘 위주 객체지향 (Object-Oriented)  객체와 객체간 역할과 관계 중심  객체중심 (Object Orientation)  데이터 감추기 - 행위만 보여진다.  모듈화가 자연스레 달성, 재사용성, 순서없는 메시지 기반
  • 68. 객체지향 분석/설계 1) 문제영역에서 배우(actor)를 찾아내고 2) 각 배우들의 책임과 역할을 정의하고 3) 배우들간의 관계를 지정하고 4) 각 배우들에 대한 대본(script)를 쓴다.
  • 69. 객체지향 분석/설계 방법론 요약 식별하고 일반화하고(object, class), 대상들 간의 관계(inheritance, embedded)를 설정하고, 상호작용 하도록(behavior) 한다.
  • 70. Iteration Planning Requirements Capture Analysis & Design Implementation Test & Release 폭포수모델(Waterfall model) 나선 모델(Spiral model) 요구분석 분석 설계구현 대표적 개발 모델
  • 71. (리뷰) 구조적 프로그래밍, 객체지향 프로그래밍 • 구조적 프로그래밍: 기능, 절차 중심 • 객체지향 프로그래밍: 객체, 관계 중심
  • 72. (리뷰) 기본 개념 • 객체지향: 객체 위주, 즉 “객체 갖고 놀자” • 클래스(class): 표현 대상에 대한 description • 오브젝트(object): instance of class
  • 73. (리뷰) 객체 지향의 핵심 개념 • 캡슐화: Data + Operation on data • 상속성: 상속 계층을 따라 특성(data, operation)을 공유 • 다형성: 다양한 형태에 동일한 명령을 사용 • 메시지 전달 (message passing): 객체간에 메시지를 주고 받아 실행 캡슐화(추상화 능력), 상속성(분류하는 능력), 다형성(같은 방법으로 다루기) 메시지 전달 (실존하는 객체들이 상호작용) 객체지향은 사람의 추상능력, 인식방법에 가까운 개발 방법론
  • 74. 객체지향을 한마디로 정의하면, "사람이 세계를 보고 이해하는 방법을 흉내 낸 방법론"