SlideShare a Scribd company logo
자바스크립트에서
객체지향 고민하기
김재원
# OOP, # 자바스크립트, # 고민
우리는 왜 객체지향 프로그래밍 을 사용하는 것일까?
자바스크립트에서 객체지향 고민하기
왜
무엇을,
어떻게
객체지향 프로그래밍은 무엇인지에 대해,
그리고 대표적인 특징 에 대해
자바스크립트 코드로 고민해보자.
마치며 객체지향에 대한 주관적인 결론
우리는 왜
객체지향 프로그래밍을
사용하는 것일까?
우리는 왜 객체지향 프로그래밍을 사용하는 것일까?
코드를 읽었을 때, 복잡성 이 줄어든다.
우리는 왜 객체지향 프로그래밍을 사용하는 것일까?
즉, 책임을 분류(Classification) 하자.
또 다른 행동의 주체 를 만들어서 책임지게 하자.
우리는 왜 객체지향 프로그래밍을 사용하는 것일까?
주문
사용자
주문을 받는다.
주문은 먼저 들어온 순서대로 처리한다.
주문에 맞는 음료를 제작한다.
음료는 동시에 세개씩 제작가능하다.
주문이 처리될때 마다 출력한다.
주문처리에 실패할 때도 출력한다.
주문이 다 끝나도 출력한다.
음료를 동시에 네개씩 만들려는데
음 여기서 이렇게 처리하고… 음
음료주문 앱
우리는 왜 객체지향 프로그래밍을 사용하는 것일까?
주문담당자
주문
매니저
바리스타
바리스타
바리스타현황판
사용자
바리스타 하나 더 추가
객체지향의 대표적인 특징들을
알아보자.
추상화
추상화
즉, 내가 생각한 책임의 모양을 정하는 것
한자 그대로(뺄 추, 모양 상) 모양을 뽑아내는 것
추상화
클래스 VS 리터럴 방식 + 프로토타입
3. 방법은 선택의 문제. 하지만 일관성 있게
1. 고정적인 개념을 사용하는 가?
캐러셀, 페이지네이션, …, 캐러셀워커(?)
2. 충분히 작은 하나의 책임을 갖고 있는가?
버튼연결형 캐러셀 UI ?, 애니메이션 ?
캡슐화
passport.js 가 어떤식으로 데이터를 관리하는지 몰라도
우리는 어떤 책임을 갖고 있는지만 알고, 사용하면 된다.
캡슐화
내부와 외부를 분리 하는 것
부가적으로, 은닉 의 역할도 한다.
객체지향의 대표적인 특징 자바스크립트로 살펴보기
캡슐화
1. Closure 를 이용한다.
은닉의 방법들
2. ES Module
3. Private Field (#) - candidate(3) 단계
함수 내부에 선언된 변수들이 외부에서 참조하고 있을 경우 함수가 종료 후에도 해제되지 않는 현상
import/export 방식 사용시
멤버변수 이름 앞에 #을 붙임으로써 private 하게 만듬
일반화 시킴으로 써 코드를 재사용하는 것
객체지향의 대표적인 특징 자바스크립트로 살펴보기
상속
언어의 특징상 행동위임(Behavior Delegation) 이라는 용어를 쓰기도 함.
상속
1. extends 키워드 사용
2. prototype chaining
3. Object.assign(mixin)
하나의 책임이 다양한 형태 로 동작할 수 있다.
객체지향의 대표적인 특징 자바스크립트로 살펴보기
다형성
다형성
리스트에서 오른쪽 카드를 확인한다.
리스트에서 왼쪽 카드를 확인한다.
캐러셀 UI에 사용되는 리스트가 갖는 책임
링크드 리스트
순환
링크드 리스트
캐러셀
이전 아이템
다음 아이템
마치며
Q&A

More Related Content

PDF
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
PDF
[부스트캠퍼세미나]조성동_야_너두_TDD_할_수_있어
PDF
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
PDF
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
PDF
Windows IOCP vs Linux EPOLL Performance Comparison
PDF
Performance Wins with BPF: Getting Started
PDF
임태현, 게임 서버 디자인 가이드, NDC2013
PDF
Yet another introduction to Linux RCU
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]조성동_야_너두_TDD_할_수_있어
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
Windows IOCP vs Linux EPOLL Performance Comparison
Performance Wins with BPF: Getting Started
임태현, 게임 서버 디자인 가이드, NDC2013
Yet another introduction to Linux RCU

What's hot (20)

PDF
NDC12_Lockless게임서버설계와구현
PPTX
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
PDF
Gitの便利ワザ
PPTX
게임프로젝트에 적용하는 GPGPU
PDF
MMOG Server-Side 충돌 및 이동처리 설계와 구현
PPTX
신입 SW 개발자 취업 준비
PDF
svn 능력자를 위한 git 개념 가이드
PPTX
MongoDB
PDF
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
PDF
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
PDF
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
PDF
NDC2019 - 게임플레이 프로그래머의 역할
PDF
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
PDF
MongoDB for Coder Training (Coding Serbia 2013)
PDF
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
PPTX
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
PPTX
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
PPTX
NDC 11 자이언트 서버의 비밀
PDF
훌륭한 개발자로 성장하기
PPT
IPC mechanisms in windows
NDC12_Lockless게임서버설계와구현
AWS로 게임 기반 다지기 - 김병수, 박진성 :: AWS Game Master 온라인 세미나 #3
Gitの便利ワザ
게임프로젝트에 적용하는 GPGPU
MMOG Server-Side 충돌 및 이동처리 설계와 구현
신입 SW 개발자 취업 준비
svn 능력자를 위한 git 개념 가이드
MongoDB
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
NDC2019 - 게임플레이 프로그래머의 역할
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
MongoDB for Coder Training (Coding Serbia 2013)
제3회 오픈 로보틱스 세미나 (제12세션) : 로봇 암 모델링과 MoveIt! 사용법
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
NDC 11 자이언트 서버의 비밀
훌륭한 개발자로 성장하기
IPC mechanisms in windows
Ad

Similar to [부스트캠퍼세미나]김재원_presentation-oop (20)

PDF
웹 본격적으로 배우기 전 감 잡기 - 1
PDF
객체지향이란? - <객체지향의 사실과 오해>를 읽고
PPTX
[MASOCON 2019] Serverless - Kimminjun
PDF
이제 막 웹개발자 되고싶은 분들께
PDF
테크데이 발표자료.pptx.pdf
PDF
[NEXT] Nextgram Refactoring
PDF
ant로 안드로이드 앱을 자동으로 빌드하자
PDF
[ES6] 1. let과 const
PDF
쇼핑검색 React 전환 경험 공유
PPTX
Showroom 2019-react
PPTX
[H3 2012] 오픈소스로 개발 실력 쌓기
PPTX
토이 프로젝트를 하자.Pptx
PDF
React principle
PPTX
Java 그쪽 동네는
PDF
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
PPTX
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
PDF
Apex Trigger를 위한 OOP 기초
PDF
소프트웨어 개발자를 위한 하드웨어 상식
PDF
스타트업 인턴 개발자 3달간의 고군분투기 김은향
PDF
131 deview 2013 yobi-채수원
웹 본격적으로 배우기 전 감 잡기 - 1
객체지향이란? - <객체지향의 사실과 오해>를 읽고
[MASOCON 2019] Serverless - Kimminjun
이제 막 웹개발자 되고싶은 분들께
테크데이 발표자료.pptx.pdf
[NEXT] Nextgram Refactoring
ant로 안드로이드 앱을 자동으로 빌드하자
[ES6] 1. let과 const
쇼핑검색 React 전환 경험 공유
Showroom 2019-react
[H3 2012] 오픈소스로 개발 실력 쌓기
토이 프로젝트를 하자.Pptx
React principle
Java 그쪽 동네는
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
Apex Trigger를 위한 OOP 기초
소프트웨어 개발자를 위한 하드웨어 상식
스타트업 인턴 개발자 3달간의 고군분투기 김은향
131 deview 2013 yobi-채수원
Ad

More from CONNECT FOUNDATION (20)

PDF
부스트캠프 웹・모바일 8기 설명회 (2023년)
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
PDF
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
PDF
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
PDF
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
PDF
부스트캠프 웹∙모바일 7기 설명회
PDF
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
PDF
[부스트캠프 Tech Talk] 신원지_Wandb Visualization
PDF
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
PDF
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
PDF
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
PDF
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기
부스트캠프 웹・모바일 8기 설명회 (2023년)
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
부스트캠프 웹∙모바일 7기 설명회
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
[부스트캠프 Tech Talk] 신원지_Wandb Visualization
[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기

[부스트캠퍼세미나]김재원_presentation-oop

  • 2. 우리는 왜 객체지향 프로그래밍 을 사용하는 것일까? 자바스크립트에서 객체지향 고민하기 왜 무엇을, 어떻게 객체지향 프로그래밍은 무엇인지에 대해, 그리고 대표적인 특징 에 대해 자바스크립트 코드로 고민해보자. 마치며 객체지향에 대한 주관적인 결론
  • 4. 우리는 왜 객체지향 프로그래밍을 사용하는 것일까? 코드를 읽었을 때, 복잡성 이 줄어든다.
  • 5. 우리는 왜 객체지향 프로그래밍을 사용하는 것일까? 즉, 책임을 분류(Classification) 하자. 또 다른 행동의 주체 를 만들어서 책임지게 하자.
  • 6. 우리는 왜 객체지향 프로그래밍을 사용하는 것일까? 주문 사용자 주문을 받는다. 주문은 먼저 들어온 순서대로 처리한다. 주문에 맞는 음료를 제작한다. 음료는 동시에 세개씩 제작가능하다. 주문이 처리될때 마다 출력한다. 주문처리에 실패할 때도 출력한다. 주문이 다 끝나도 출력한다. 음료를 동시에 네개씩 만들려는데 음 여기서 이렇게 처리하고… 음 음료주문 앱
  • 7. 우리는 왜 객체지향 프로그래밍을 사용하는 것일까? 주문담당자 주문 매니저 바리스타 바리스타 바리스타현황판 사용자 바리스타 하나 더 추가
  • 9. 추상화 추상화 즉, 내가 생각한 책임의 모양을 정하는 것 한자 그대로(뺄 추, 모양 상) 모양을 뽑아내는 것
  • 10. 추상화 클래스 VS 리터럴 방식 + 프로토타입 3. 방법은 선택의 문제. 하지만 일관성 있게 1. 고정적인 개념을 사용하는 가? 캐러셀, 페이지네이션, …, 캐러셀워커(?) 2. 충분히 작은 하나의 책임을 갖고 있는가? 버튼연결형 캐러셀 UI ?, 애니메이션 ?
  • 11. 캡슐화 passport.js 가 어떤식으로 데이터를 관리하는지 몰라도 우리는 어떤 책임을 갖고 있는지만 알고, 사용하면 된다. 캡슐화
  • 12. 내부와 외부를 분리 하는 것 부가적으로, 은닉 의 역할도 한다. 객체지향의 대표적인 특징 자바스크립트로 살펴보기
  • 13. 캡슐화 1. Closure 를 이용한다. 은닉의 방법들 2. ES Module 3. Private Field (#) - candidate(3) 단계 함수 내부에 선언된 변수들이 외부에서 참조하고 있을 경우 함수가 종료 후에도 해제되지 않는 현상 import/export 방식 사용시 멤버변수 이름 앞에 #을 붙임으로써 private 하게 만듬
  • 14. 일반화 시킴으로 써 코드를 재사용하는 것 객체지향의 대표적인 특징 자바스크립트로 살펴보기 상속 언어의 특징상 행동위임(Behavior Delegation) 이라는 용어를 쓰기도 함.
  • 15. 상속 1. extends 키워드 사용 2. prototype chaining 3. Object.assign(mixin)
  • 16. 하나의 책임이 다양한 형태 로 동작할 수 있다. 객체지향의 대표적인 특징 자바스크립트로 살펴보기 다형성
  • 17. 다형성 리스트에서 오른쪽 카드를 확인한다. 리스트에서 왼쪽 카드를 확인한다. 캐러셀 UI에 사용되는 리스트가 갖는 책임 링크드 리스트 순환 링크드 리스트 캐러셀 이전 아이템 다음 아이템
  • 19. Q&A