SlideShare a Scribd company logo
1 of 21
Download to read offline
‘객체지향의 사실과 오해’

- 역할, 책임, 협력
김정규
regular
Len
https://github.com/LenKIM
@다우기술
우리는 객체지향에 대해서 

어디까지 아는 걸까?
SOLID?
캡슐화?
다형성?
추상화?
OOP?
시너지를 생각하라. 전체는 부분의 합보다 크다.

- 스티븐 코비(Stephen R. Covey)
그럼, 우리는 왜 객체지향을 해야되는가?
객체지향프로그래밍

(Object-Oriented Programming)
: 객체지향이란 실세계를 직접적이고 직관적으로
모델링할 수 있는 패러다임
: 객체지향이란 실세계를 직접적이고 직관적으로
모델링할 수 있는 패러다임
소프트웨어 시스템이 해결하려고 하는 실재는
잘해봐야 먼 친척밖에는 되지 않는다.
- 버트란드 마이어(Bertrand Meyer)
: 새로운 세상을 창조하는 것.
객체를 스스로 생각하고/스스로 결정하는
현실 세계의 생명체에 비유하는 이유는
상태와 행위를 ‘캡슐화’하는 소프트웨어와 객체의 ‘자율성’
그리고,
현실 세계의 사람들이 ‘암묵적인 약속과 명시적인 계약’을 기반으로 협력하여
목표를 달성해 나가는 과정은 ‘메시지’를 주고 받으며
공동의 목표를 달성하기 위해 ‘협력’하는
객체들의 관계를 설명하기에 적합하기 하며,
실세계의 사물을 기반으로 소프트웨어 객체를 식별하고
구현까지 이어간다는 개념은
객체지향 설계의 핵심 사상인 ‘연결완전성(seamlessness)’ 에 적합한 틀
커피집을 예로 들어보자.
Customer Casher Barister
Customer Casher Barister
커피 주문 커피 제조
커피 완성커피 완성
@협력적
@상태와 행동을 함께 지닌 자율적인 객체
@협력과 메시지
@메서드와 자율성
Customer Casher Barister
커피 주문 커피 제조
커피 완성커피 완성
여러사람이동일한역할을수행할수있다.

: 손님입장에서 자신이 주문한 커피는 누가 만들든 상관 X

역할은대체가능성을의미한다.

: 손님입장에서 캐시어는 대체 가능(substitutable)

책임을수행하는방법은자율적으로선택할수있다.

: 요청을 받은 사람들은 요청을 처리하는 방법을 자유롭게 선택할 수 있다.

한사람이동시에여러역할을수행할수있다.

: 캐시어와 바리스타라는 개인적인 역할을 이용해 협력관계를 묘사했지만 

한 사람이 캐시어와 바리스타의 역할을 동시에 수행하는 것이 가능
그래서 객체지향이란?🤪
🙌 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고
객체를 이용해 시스템을 분할하는 방법.
🙌 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 개체를 의미
🙌 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력하며,
각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합.
🙌 객체는 다른 객체와 협력하기 위해 메시지를 전송하고,
메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택.
훌룡한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에
서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다.
중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협
력하는가다. 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과하다. 클래스는 객체
지향 세계의 도시전설이다.
손님 객체
바리스타 객체
카라멜 마키아또 객체
에스프레소 객체
카푸치노 객체
아메리카노 객체
아메리카노 객체
카푸치노 객체
카라멜 마키아또 객체
에스프레소 객체
손님은 메뉴판에서

커피를 선택할 수 있다.
손님은 바리스타에게

커피를 주문한다.
커피를 제조한다.
Menu
손님
메뉴판 메뉴 항목
4
바리스타 바리스타
커피를 주문하라.
메뉴 이름
손님
메뉴 항목을 찾아라
메뉴 이름
메뉴 항목
메뉴판
커피를 제조하라
커피 메뉴 항목
바리스타 커피
생성하라
커피를 주문하라.
메뉴 이름
손님
메뉴 항목을 찾아라
메뉴 이름
메뉴 항목
메뉴판
커피
생성하라
커피를 제조하라
커피
메뉴 항목
바리스타
이제진짜핸즈온으로실습을해보자.
order(menuName, menu, barista)
Customer
choose(name):MenuItem
Menu name
price
MenuItem
cost()
getName()
makeCoffee(menuItem):Coffee
Barista <<create>> name
price
Coffee
Coffee(name, price)
코드는 세 가지 관점을 모두 제공해야 한다.
🐳 개념 관점
🐳 명세 관점
🐳 구현 관점
Customer, Menu, MenuItem, Barista, Coffee 클래스
= Customer, Menu, MenuItem, Barista, Coffee 클래스
= 클래스의 인터페이스(협력과 관계 되는)
= 클래스의 내부 구현(ex, 클래스의 메서드와 속성)
인터페이스와 구현을 분리하라.
= 명세 관점과 구현 관점이 뒤섞여 혼란스럽게 만들지 마라.
명세 관점은 클래스의 안정적인 측면 ⬆
구현 관점은 클래스의 불안정한 측면 ⬇
개념적인 관점과 명세 관점 사이는 그렇게 중요하지 않은 경우가 많지만
명세 관점과 구현 관점을 분리하는 것은 매우 중요하다 - 마틴파울러[fowler 1999b]
Q&A && 감사합니다.
괜찮으면... 2탄?
- 책임과 메세지
- 추상화

More Related Content

Similar to '객체지향의 사실과 오해' 북 리뷰 세미나

200903 웹인간론 요약본
200903 웹인간론 요약본200903 웹인간론 요약본
200903 웹인간론 요약본
karisina
 
200903 웹인간론 요약본
200903 웹인간론 요약본200903 웹인간론 요약본
200903 웹인간론 요약본
karisina
 
Social Web 2 [자동 저장]
Social Web 2 [자동 저장]Social Web 2 [자동 저장]
Social Web 2 [자동 저장]
guestfa4990
 
Social Web 1
Social Web 1Social Web 1
Social Web 1
ddories
 

Similar to '객체지향의 사실과 오해' 북 리뷰 세미나 (14)

Post Human Post UX @K mobile confernece
Post Human Post UX @K mobile confernecePost Human Post UX @K mobile confernece
Post Human Post UX @K mobile confernece
 
전문가토크릴레이 3탄 스마트 큐레이션 전략 (최광선 본부장)
전문가토크릴레이 3탄 스마트 큐레이션 전략 (최광선 본부장)전문가토크릴레이 3탄 스마트 큐레이션 전략 (최광선 본부장)
전문가토크릴레이 3탄 스마트 큐레이션 전략 (최광선 본부장)
 
Expressive processing - Making Models
Expressive processing - Making ModelsExpressive processing - Making Models
Expressive processing - Making Models
 
200903 웹인간론 요약본
200903 웹인간론 요약본200903 웹인간론 요약본
200903 웹인간론 요약본
 
200903 웹인간론 요약본
200903 웹인간론 요약본200903 웹인간론 요약본
200903 웹인간론 요약본
 
INNOIZ_UX_YuriLee
INNOIZ_UX_YuriLeeINNOIZ_UX_YuriLee
INNOIZ_UX_YuriLee
 
객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx객체지향 프로그래밍.pptx
객체지향 프로그래밍.pptx
 
Social Web 2 [자동 저장]
Social Web 2 [자동 저장]Social Web 2 [자동 저장]
Social Web 2 [자동 저장]
 
스마트시니어민주시민으로살아가기 노준식
스마트시니어민주시민으로살아가기 노준식스마트시니어민주시민으로살아가기 노준식
스마트시니어민주시민으로살아가기 노준식
 
Social Web 1
Social Web 1Social Web 1
Social Web 1
 
2020 시민참여 인천 스마트 도시 : 마을플랫폼 기획리빙랩 과정기록집
2020 시민참여 인천 스마트 도시 : 마을플랫폼 기획리빙랩 과정기록집2020 시민참여 인천 스마트 도시 : 마을플랫폼 기획리빙랩 과정기록집
2020 시민참여 인천 스마트 도시 : 마을플랫폼 기획리빙랩 과정기록집
 
NS-CUK WS on AI Ethics 2022: Lecture 14 - What kinds of application domains r...
NS-CUK WS on AI Ethics 2022: Lecture 14 - What kinds of application domains r...NS-CUK WS on AI Ethics 2022: Lecture 14 - What kinds of application domains r...
NS-CUK WS on AI Ethics 2022: Lecture 14 - What kinds of application domains r...
 
Intertwingled : information changes everything
Intertwingled : information changes everythingIntertwingled : information changes everything
Intertwingled : information changes everything
 
객체지향의 사실과 오해 리뷰
객체지향의 사실과 오해 리뷰객체지향의 사실과 오해 리뷰
객체지향의 사실과 오해 리뷰
 

More from Jeong-gyu Kim

Intern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_missionIntern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_mission
Jeong-gyu Kim
 

More from Jeong-gyu Kim (18)

Id generator
Id generatorId generator
Id generator
 
근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기근육 기억으로 주도하는 테스트 주도 개발 입문하기
근육 기억으로 주도하는 테스트 주도 개발 입문하기
 
Api first design 개발의 선순환
Api first design 개발의 선순환Api first design 개발의 선순환
Api first design 개발의 선순환
 
Design by contract(계약에의한설계)
Design by contract(계약에의한설계)Design by contract(계약에의한설계)
Design by contract(계약에의한설계)
 
JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)JPA Study - 1주차(SLIPP)
JPA Study - 1주차(SLIPP)
 
얼굴인식 - 기초
얼굴인식 - 기초얼굴인식 - 기초
얼굴인식 - 기초
 
02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄02.cnn - CNN 파헤치기 3탄
02.cnn - CNN 파헤치기 3탄
 
01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기01.cnn - 본격CNN논문 파헤치기
01.cnn - 본격CNN논문 파헤치기
 
00.cnn basic
00.cnn basic00.cnn basic
00.cnn basic
 
코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기 코드 재사용에 대해서 생각해보기
코드 재사용에 대해서 생각해보기
 
Deep dive functional thinking
Deep dive functional thinkingDeep dive functional thinking
Deep dive functional thinking
 
Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리
 
Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄Functional thinking - 책 리뷰 1탄
Functional thinking - 책 리뷰 1탄
 
Intern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_missionIntern pt sw_r&amp;d_len_second_mission
Intern pt sw_r&amp;d_len_second_mission
 
Log Parser Story In Python3
Log Parser Story In Python3Log Parser Story In Python3
Log Parser Story In Python3
 
Stampfood 2.0
Stampfood 2.0Stampfood 2.0
Stampfood 2.0
 
You dont know_js
You dont know_jsYou dont know_js
You dont know_js
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)
 

'객체지향의 사실과 오해' 북 리뷰 세미나

  • 3. 우리는 객체지향에 대해서 어디까지 아는 걸까? SOLID? 캡슐화? 다형성? 추상화? OOP?
  • 4. 시너지를 생각하라. 전체는 부분의 합보다 크다. - 스티븐 코비(Stephen R. Covey) 그럼, 우리는 왜 객체지향을 해야되는가?
  • 5. 객체지향프로그래밍 (Object-Oriented Programming) : 객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임 : 객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임 소프트웨어 시스템이 해결하려고 하는 실재는 잘해봐야 먼 친척밖에는 되지 않는다. - 버트란드 마이어(Bertrand Meyer) : 새로운 세상을 창조하는 것.
  • 6. 객체를 스스로 생각하고/스스로 결정하는 현실 세계의 생명체에 비유하는 이유는 상태와 행위를 ‘캡슐화’하는 소프트웨어와 객체의 ‘자율성’ 그리고, 현실 세계의 사람들이 ‘암묵적인 약속과 명시적인 계약’을 기반으로 협력하여 목표를 달성해 나가는 과정은 ‘메시지’를 주고 받으며 공동의 목표를 달성하기 위해 ‘협력’하는 객체들의 관계를 설명하기에 적합하기 하며, 실세계의 사물을 기반으로 소프트웨어 객체를 식별하고 구현까지 이어간다는 개념은 객체지향 설계의 핵심 사상인 ‘연결완전성(seamlessness)’ 에 적합한 틀
  • 9. Customer Casher Barister 커피 주문 커피 제조 커피 완성커피 완성 @협력적 @상태와 행동을 함께 지닌 자율적인 객체 @협력과 메시지 @메서드와 자율성
  • 10. Customer Casher Barister 커피 주문 커피 제조 커피 완성커피 완성 여러사람이동일한역할을수행할수있다. : 손님입장에서 자신이 주문한 커피는 누가 만들든 상관 X
 역할은대체가능성을의미한다. : 손님입장에서 캐시어는 대체 가능(substitutable)
 책임을수행하는방법은자율적으로선택할수있다. : 요청을 받은 사람들은 요청을 처리하는 방법을 자유롭게 선택할 수 있다.
 한사람이동시에여러역할을수행할수있다. : 캐시어와 바리스타라는 개인적인 역할을 이용해 협력관계를 묘사했지만 한 사람이 캐시어와 바리스타의 역할을 동시에 수행하는 것이 가능
  • 11. 그래서 객체지향이란?🤪 🙌 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법. 🙌 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 개체를 의미 🙌 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력하며, 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합. 🙌 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택.
  • 12. 훌룡한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에 서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다. 중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협 력하는가다. 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과하다. 클래스는 객체 지향 세계의 도시전설이다.
  • 13. 손님 객체 바리스타 객체 카라멜 마키아또 객체 에스프레소 객체 카푸치노 객체 아메리카노 객체 아메리카노 객체 카푸치노 객체 카라멜 마키아또 객체 에스프레소 객체 손님은 메뉴판에서 커피를 선택할 수 있다. 손님은 바리스타에게 커피를 주문한다. 커피를 제조한다. Menu
  • 15. 커피를 주문하라. 메뉴 이름 손님 메뉴 항목을 찾아라 메뉴 이름 메뉴 항목 메뉴판 커피를 제조하라 커피 메뉴 항목 바리스타 커피 생성하라
  • 16. 커피를 주문하라. 메뉴 이름 손님 메뉴 항목을 찾아라 메뉴 이름 메뉴 항목 메뉴판 커피 생성하라 커피를 제조하라 커피 메뉴 항목 바리스타
  • 18. order(menuName, menu, barista) Customer choose(name):MenuItem Menu name price MenuItem cost() getName() makeCoffee(menuItem):Coffee Barista <<create>> name price Coffee Coffee(name, price)
  • 19. 코드는 세 가지 관점을 모두 제공해야 한다. 🐳 개념 관점 🐳 명세 관점 🐳 구현 관점 Customer, Menu, MenuItem, Barista, Coffee 클래스 = Customer, Menu, MenuItem, Barista, Coffee 클래스 = 클래스의 인터페이스(협력과 관계 되는) = 클래스의 내부 구현(ex, 클래스의 메서드와 속성)
  • 20. 인터페이스와 구현을 분리하라. = 명세 관점과 구현 관점이 뒤섞여 혼란스럽게 만들지 마라. 명세 관점은 클래스의 안정적인 측면 ⬆ 구현 관점은 클래스의 불안정한 측면 ⬇ 개념적인 관점과 명세 관점 사이는 그렇게 중요하지 않은 경우가 많지만 명세 관점과 구현 관점을 분리하는 것은 매우 중요하다 - 마틴파울러[fowler 1999b]
  • 21. Q&A && 감사합니다. 괜찮으면... 2탄? - 책임과 메세지 - 추상화