SlideShare une entreprise Scribd logo
1  sur  20
For non-developers!
Learn Javascript Programming!
!
Learning contents with!
Object & Instance!
OOP (Object-Oriented Programming)!
!
!
!
!
Kim min tae @ibare!
NCSOFT http://ibare.kr https://medium.com/@ibare
#5.1
4장 실습 #1 코드를 봅시다
1부터 10까지 숫자를 표시하는 셈플이죠?
객체지향 방식으로 변경한 4장 실습 #1 코드
왼쪽과 오른쪽의 차이는?
*참고: 두 프로그램은 동일한 동작을 수행합니다.
소스 코드가 길어졌다! 22줄 vs. 36줄
객체지향 방식으로 변경한 4장 실습 #1 코드
처음보는 코드 형태가 보인다.
객체지향 방식으로 변경한 4장 실습 #1 코드
왼쪽의 코드에서 보이던 요소들이 오른쪽은 분산되어있다!
객체지향 방식으로 변경한 4장 실습 #1 코드
사라진 태그가 있다
?
객체지향 방식으로 변경한 4장 실습 #1 코드
...
처음 보는 코드 “new”
List 는 함수를 값으로 저장한 변수이고!
List( ) 는 그 함수를 실행시키는 구문이다.
new 명령어는 함수에게!
‘복사본’을 만들어 반환하라고!
지시하는 지시자이다
하나씩 풀어봅시다
처음 보는 코드 “new”
Javascript 에서 함수는 객체다. (5장 참조)!
new로 호출되어 반환된 함수의 ‘복사본’을 객체의 ‘인스턴스’라 한다!
인스턴스는 new를 이용하여 1개 이상, 원하는 수 만큼 만들 수 있다!
만들어진 인스턴스들은 각 각 완전한 독립체이며 독립된 공간을 점유한다
...
하나씩 풀어봅시다
하나씩 풀어봅시다
처음 보는 코드 “this”
함수 안에서 var me 와 this.me 는 변수 ‘me’를 만든다는 점에서 같다!
var 로 생성된 변수는 함수가 실행되는 동안만 유지된다!
this에 추가하여 만든 변수는 함수의 인스턴스에서도 유지된다
하나씩 풀어봅시다
처음 보는 코드 “this”
함수 안에서 var me 와 this.me 는 변수 ‘me’를 만든다는 점에서 같다!
var 로 생성된 변수는 함수가 실행되는 동안만 유지된다!
this에 추가하여 만든 변수는 함수의 인스턴스에서도 유지된다
값은 10 값이 없다 (undefined)
하나씩 풀어봅시다
처음 보는 코드 “this”
this.parent 와 this.add 는 this에 추가된 함수다!
따라서 List 의 인스턴스 list 에서 호출할 수 있게된다!
this 안의 값들은 객체 안에서 공유(접근, 사용)된다.
List 객체의 변수 me가
add 함수 내에서도 사용되
고 있는 것 을 볼 수 있다
코드가 “분산” 되어있는 이유
동일한 동작을 수행하는 코드의 중복을 최대한 억제한다!
동일한 코드는 함수를 만들어 호출하여 재사용한다!
함수 또한 공통 요소가 있다면 객체로 묘사하여 결합한다!
객체에 포함된 함수를 객체의 멤버 함수(메소드)라 한다
List 객체는 !
parent, add 두 개의 !
멤버 함수(메소드)가 있다
하나씩 풀어봅시다
코드가 “분산” 되어있는 이유
어떤 객체가 있고, 객체가 제공하는 여러 기능들이 있다고 가정하면!
객체를 사용하기 위해 인스턴스를 만들어 객체를 사용할 수 있다!
객체가 제공하는 기능의(메소드, 또는 변수) 사용법을 안다면!
객체를 만드는 행위와 사용하는 행위는 완전히 독립될 수 있다
하나씩 풀어봅시다
내가 만든 칼로 전쟁을 하던
무를 썰던 난 상관하지 않고
칼을 만들겠소!
코드가 “분산” 되어있는 이유
객체를 만드는 행위!
만드는 과정은 사용을 전제로 하나, 사
용법은 다양해 질 수 있다. 예) 몇 개의
객체 인스턴스가 만들어 질지 예상할 수
없다.
객체를 사용하는 행위!
사용하는 행위는 필요에 따라, 원하는 방식으로(객체가
제공하는 자유도 범위에서) 사용되어질 수 있다. 사용자
입장에서 객체의 제공 기능을 아는것은 중요하나 어떻
게 만들어 졌는지 아는것은 불필요하다
하나씩 풀어봅시다
코드의 규모가 “진짜 길어” 졌을까?
하나씩 풀어봅시다
코드의 규모가 “진짜 길어” 졌을까?
실제 만들고자 하는 부분만 본다면 (1)

코드는 실제 동작의 의미와 유사해졌고,!
따라서 구현 하고자 하는 의미가 선명해졌으며,!
UI 추가를 위한 반복적인 시스템 코드들이 제거되었다.
실제 만들고자 하는 부분만 본다면 (2)

추가로 새로운 리스트(UL)가 필요한 경우 List 객체를
재사용 함으로서 생성하는 객체의 코드 구조에 따른
의존성이 제거됨
하나씩 풀어봅시다
객체의 정보 “은닉과 약속” 으로 정리
하나씩 풀어봅시다
정보의 은닉

객체는 객체 사용자에게 내부 구조를 숨긴다!
내부 구조를 은닉한다는건 외부 구조와 독립됨을 의미한다
객체의 약속

객체는 객체가 제공하는 기능을 공개한다. !
이를 인터페이스라 하며 규정된 입력을 넣으
면 약속된 동작이 수행될 것을 보장한다. 이
약속을 기반으로 사용자는 객체가 제공하는
범위 안에서 자유롭게 객체를 사용하며, 제
작자는 약속의 테두리 안에서 외부와 독립된
내부를 자유롭게 변경할 수 있는 자유를 누
릴 수 있다.
이것을 프로그래머들은 “캡슐화(encapsulation)” 라 한다
하나씩 풀어봅시다
병이 걸려 약을 먹어야 한다면 우리는 약사의
지시대로 식후 30분 후, 하루 3번 두 알씩 먹
는다는 약속만을 알면 된다.
하지만 약속은 중요하다. 환자에게 통보
없이 약의 사용법이 바뀐다면 환자가 죽
을 수 도 있기 때문이다.
그렇게 많은 프로그래머들이 지옥을 경험한다.
1 “다음시간에”;!
2 “잘자요~~;
Unclosed string.

Contenu connexe

Tendances

More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
M1 2 1
M1 2 1M1 2 1
M1 2 1nexthw
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날명준 김
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 CHeesuk Kang
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summarySehyeon Nam
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스Lee Dong Wook
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive ReviewDataUs
 
가능한 C++ 스타일의 캐스트를 즐겨 쓰자
가능한 C++ 스타일의 캐스트를 즐겨 쓰자가능한 C++ 스타일의 캐스트를 즐겨 쓰자
가능한 C++ 스타일의 캐스트를 즐겨 쓰자민욱 이
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지Dong Chan Shin
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong Joon Moon
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체해강
 
entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1Hoyoung Jung
 

Tendances (20)

More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
5 6 1
5 6 15 6 1
5 6 1
 
M1 2 1
M1 2 1M1 2 1
M1 2 1
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
학교에서 배우지 않는 C
학교에서 배우지 않는 C학교에서 배우지 않는 C
학교에서 배우지 않는 C
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
Ec++ 3,4 summary
Ec++ 3,4 summaryEc++ 3,4 summary
Ec++ 3,4 summary
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
 
모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review모던 자바스크립트 Deep Dive Review
모던 자바스크립트 Deep Dive Review
 
가능한 C++ 스타일의 캐스트를 즐겨 쓰자
가능한 C++ 스타일의 캐스트를 즐겨 쓰자가능한 C++ 스타일의 캐스트를 즐겨 쓰자
가능한 C++ 스타일의 캐스트를 즐겨 쓰자
 
More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체The C++ Programming Language 5장 포인터, 배열, 구조체
The C++ Programming Language 5장 포인터, 배열, 구조체
 
entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1entry를 이용한 코딩 교육1
entry를 이용한 코딩 교육1
 

En vedette

Sublime Text 3 for python and django
Sublime Text 3 for python and djangoSublime Text 3 for python and django
Sublime Text 3 for python and djangoraccoony
 
Waterfall과 agile의 불편한 동거 public
Waterfall과 agile의 불편한 동거 publicWaterfall과 agile의 불편한 동거 public
Waterfall과 agile의 불편한 동거 public민태 김
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview민태 김
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)민태 김
 
Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Ian Choi
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git민태 김
 

En vedette (7)

Sublime Text 3 for python and django
Sublime Text 3 for python and djangoSublime Text 3 for python and django
Sublime Text 3 for python and django
 
Waterfall과 agile의 불편한 동거 public
Waterfall과 agile의 불편한 동거 publicWaterfall과 agile의 불편한 동거 public
Waterfall과 agile의 불편한 동거 public
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
초보자를 위한 정규 표현식 가이드 (자바스크립트 기준)
 
Git - Level 2
Git - Level 2Git - Level 2
Git - Level 2
 
Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?Git는 머꼬? GitHub는 또 머지?
Git는 머꼬? GitHub는 또 머지?
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 

Similaire à 비개발자를 위한 Javascript 알아가기 #5.1

M5 1 1
M5 1 1M5 1 1
M5 1 1nexthw
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법YoungSu Son
 
개발자 기초영문법 코드로 감 잡다
개발자 기초영문법 코드로 감 잡다개발자 기초영문법 코드로 감 잡다
개발자 기초영문법 코드로 감 잡다Nasol Kim
 
Data oriented design
Data oriented designData oriented design
Data oriented designSangwook Kwon
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고HeechanLee6
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계Eb Styles
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)Jay Park
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 YoChun YoChun
 
Effective cpp
Effective cppEffective cpp
Effective cppTonyCms
 
(책 소개) 레거시 코드 활용 전략
(책 소개) 레거시 코드 활용 전략(책 소개) 레거시 코드 활용 전략
(책 소개) 레거시 코드 활용 전략Jay Park
 
Dodge the dodge_junsoolee
Dodge the dodge_junsooleeDodge the dodge_junsoolee
Dodge the dodge_junsooleeJunsoo Lee
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향QooJuice
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기KTH, 케이티하이텔
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)명석 고
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드Mijeong Park
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Taekyung Han
 

Similaire à 비개발자를 위한 Javascript 알아가기 #5.1 (20)

Light Tutorial Python
Light Tutorial PythonLight Tutorial Python
Light Tutorial Python
 
M5 1 1
M5 1 1M5 1 1
M5 1 1
 
Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법
 
개발자 기초영문법 코드로 감 잡다
개발자 기초영문법 코드로 감 잡다개발자 기초영문법 코드로 감 잡다
개발자 기초영문법 코드로 감 잡다
 
Data oriented design
Data oriented designData oriented design
Data oriented design
 
7 8 1
7 8 17 8 1
7 8 1
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)깨끗한 코드 (클린 코드, Clean Code)
깨끗한 코드 (클린 코드, Clean Code)
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료
 
Effective cpp
Effective cppEffective cpp
Effective cpp
 
(책 소개) 레거시 코드 활용 전략
(책 소개) 레거시 코드 활용 전략(책 소개) 레거시 코드 활용 전략
(책 소개) 레거시 코드 활용 전략
 
Dodge the dodge_junsoolee
Dodge the dodge_junsooleeDodge the dodge_junsoolee
Dodge the dodge_junsoolee
 
절차지향 vs 객체지향
절차지향 vs 객체지향절차지향 vs 객체지향
절차지향 vs 객체지향
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드엔지니어의 학습, 그리고 테스트 코드
엔지니어의 학습, 그리고 테스트 코드
 
1 2 1
1 2 11 2 1
1 2 1
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차
 

Plus de 민태 김

웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스민태 김
 
외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library민태 김
 
비개발자를 위한 Javascript 알아가기 #7.1
비개발자를 위한 Javascript 알아가기 #7.1비개발자를 위한 Javascript 알아가기 #7.1
비개발자를 위한 Javascript 알아가기 #7.1민태 김
 
비개발자를 위한 Javascript 알아가기 #7
비개발자를 위한 Javascript 알아가기 #7비개발자를 위한 Javascript 알아가기 #7
비개발자를 위한 Javascript 알아가기 #7민태 김
 
비개발자를 위한 Javascript 알아가기 #6.1
비개발자를 위한 Javascript 알아가기 #6.1비개발자를 위한 Javascript 알아가기 #6.1
비개발자를 위한 Javascript 알아가기 #6.1민태 김
 
비개발자를 위한 Javascript 알아가기 #4.1
비개발자를 위한 Javascript 알아가기 #4.1비개발자를 위한 Javascript 알아가기 #4.1
비개발자를 위한 Javascript 알아가기 #4.1민태 김
 
비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4민태 김
 
비개발자를 위한 Javascript 알아가기 #3
비개발자를 위한 Javascript 알아가기 #3비개발자를 위한 Javascript 알아가기 #3
비개발자를 위한 Javascript 알아가기 #3민태 김
 
비개발자를 위한 Javascript 알아가기 #2
비개발자를 위한 Javascript 알아가기 #2비개발자를 위한 Javascript 알아가기 #2
비개발자를 위한 Javascript 알아가기 #2민태 김
 
비개발자를 위한 Javascript 알아가기 #1
비개발자를 위한 Javascript 알아가기 #1비개발자를 위한 Javascript 알아가기 #1
비개발자를 위한 Javascript 알아가기 #1민태 김
 
AWS 구축 경험 공유
AWS 구축 경험 공유AWS 구축 경험 공유
AWS 구축 경험 공유민태 김
 
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍민태 김
 
Knockout.js Overview
Knockout.js OverviewKnockout.js Overview
Knockout.js Overview민태 김
 
스마트미디어 크로스플렛폼 개발 전략
스마트미디어 크로스플렛폼 개발 전략스마트미디어 크로스플렛폼 개발 전략
스마트미디어 크로스플렛폼 개발 전략민태 김
 
CANVAS, SVG, WebGL, CSS3, WebEvent
CANVAS, SVG, WebGL, CSS3, WebEventCANVAS, SVG, WebGL, CSS3, WebEvent
CANVAS, SVG, WebGL, CSS3, WebEvent민태 김
 
Html5 game programming overview
Html5 game programming overviewHtml5 game programming overview
Html5 game programming overview민태 김
 
What is Hybrid Apps
What is Hybrid AppsWhat is Hybrid Apps
What is Hybrid Apps민태 김
 
고품질웹앱개발전략
고품질웹앱개발전략고품질웹앱개발전략
고품질웹앱개발전략민태 김
 

Plus de 민태 김 (18)

웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
웹을 지탱하는 차세대 기술 @한국웹20주년 컨퍼런스
 
외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library외계어 스터디 4/5 Event & Library
외계어 스터디 4/5 Event & Library
 
비개발자를 위한 Javascript 알아가기 #7.1
비개발자를 위한 Javascript 알아가기 #7.1비개발자를 위한 Javascript 알아가기 #7.1
비개발자를 위한 Javascript 알아가기 #7.1
 
비개발자를 위한 Javascript 알아가기 #7
비개발자를 위한 Javascript 알아가기 #7비개발자를 위한 Javascript 알아가기 #7
비개발자를 위한 Javascript 알아가기 #7
 
비개발자를 위한 Javascript 알아가기 #6.1
비개발자를 위한 Javascript 알아가기 #6.1비개발자를 위한 Javascript 알아가기 #6.1
비개발자를 위한 Javascript 알아가기 #6.1
 
비개발자를 위한 Javascript 알아가기 #4.1
비개발자를 위한 Javascript 알아가기 #4.1비개발자를 위한 Javascript 알아가기 #4.1
비개발자를 위한 Javascript 알아가기 #4.1
 
비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4비개발자를 위한 Javascript 알아가기 #4
비개발자를 위한 Javascript 알아가기 #4
 
비개발자를 위한 Javascript 알아가기 #3
비개발자를 위한 Javascript 알아가기 #3비개발자를 위한 Javascript 알아가기 #3
비개발자를 위한 Javascript 알아가기 #3
 
비개발자를 위한 Javascript 알아가기 #2
비개발자를 위한 Javascript 알아가기 #2비개발자를 위한 Javascript 알아가기 #2
비개발자를 위한 Javascript 알아가기 #2
 
비개발자를 위한 Javascript 알아가기 #1
비개발자를 위한 Javascript 알아가기 #1비개발자를 위한 Javascript 알아가기 #1
비개발자를 위한 Javascript 알아가기 #1
 
AWS 구축 경험 공유
AWS 구축 경험 공유AWS 구축 경험 공유
AWS 구축 경험 공유
 
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍
H3 경쟁력있는 웹앱 개발을 위한 모바일 js 프레임웍
 
Knockout.js Overview
Knockout.js OverviewKnockout.js Overview
Knockout.js Overview
 
스마트미디어 크로스플렛폼 개발 전략
스마트미디어 크로스플렛폼 개발 전략스마트미디어 크로스플렛폼 개발 전략
스마트미디어 크로스플렛폼 개발 전략
 
CANVAS, SVG, WebGL, CSS3, WebEvent
CANVAS, SVG, WebGL, CSS3, WebEventCANVAS, SVG, WebGL, CSS3, WebEvent
CANVAS, SVG, WebGL, CSS3, WebEvent
 
Html5 game programming overview
Html5 game programming overviewHtml5 game programming overview
Html5 game programming overview
 
What is Hybrid Apps
What is Hybrid AppsWhat is Hybrid Apps
What is Hybrid Apps
 
고품질웹앱개발전략
고품질웹앱개발전략고품질웹앱개발전략
고품질웹앱개발전략
 

비개발자를 위한 Javascript 알아가기 #5.1

  • 1. For non-developers! Learn Javascript Programming! ! Learning contents with! Object & Instance! OOP (Object-Oriented Programming)! ! ! ! ! Kim min tae @ibare! NCSOFT http://ibare.kr https://medium.com/@ibare #5.1
  • 2. 4장 실습 #1 코드를 봅시다 1부터 10까지 숫자를 표시하는 셈플이죠?
  • 3. 객체지향 방식으로 변경한 4장 실습 #1 코드 왼쪽과 오른쪽의 차이는? *참고: 두 프로그램은 동일한 동작을 수행합니다.
  • 4. 소스 코드가 길어졌다! 22줄 vs. 36줄 객체지향 방식으로 변경한 4장 실습 #1 코드
  • 5. 처음보는 코드 형태가 보인다. 객체지향 방식으로 변경한 4장 실습 #1 코드
  • 6. 왼쪽의 코드에서 보이던 요소들이 오른쪽은 분산되어있다! 객체지향 방식으로 변경한 4장 실습 #1 코드
  • 7. 사라진 태그가 있다 ? 객체지향 방식으로 변경한 4장 실습 #1 코드
  • 8. ... 처음 보는 코드 “new” List 는 함수를 값으로 저장한 변수이고! List( ) 는 그 함수를 실행시키는 구문이다. new 명령어는 함수에게! ‘복사본’을 만들어 반환하라고! 지시하는 지시자이다 하나씩 풀어봅시다
  • 9. 처음 보는 코드 “new” Javascript 에서 함수는 객체다. (5장 참조)! new로 호출되어 반환된 함수의 ‘복사본’을 객체의 ‘인스턴스’라 한다! 인스턴스는 new를 이용하여 1개 이상, 원하는 수 만큼 만들 수 있다! 만들어진 인스턴스들은 각 각 완전한 독립체이며 독립된 공간을 점유한다 ... 하나씩 풀어봅시다
  • 10. 하나씩 풀어봅시다 처음 보는 코드 “this” 함수 안에서 var me 와 this.me 는 변수 ‘me’를 만든다는 점에서 같다! var 로 생성된 변수는 함수가 실행되는 동안만 유지된다! this에 추가하여 만든 변수는 함수의 인스턴스에서도 유지된다
  • 11. 하나씩 풀어봅시다 처음 보는 코드 “this” 함수 안에서 var me 와 this.me 는 변수 ‘me’를 만든다는 점에서 같다! var 로 생성된 변수는 함수가 실행되는 동안만 유지된다! this에 추가하여 만든 변수는 함수의 인스턴스에서도 유지된다 값은 10 값이 없다 (undefined)
  • 12. 하나씩 풀어봅시다 처음 보는 코드 “this” this.parent 와 this.add 는 this에 추가된 함수다! 따라서 List 의 인스턴스 list 에서 호출할 수 있게된다! this 안의 값들은 객체 안에서 공유(접근, 사용)된다. List 객체의 변수 me가 add 함수 내에서도 사용되 고 있는 것 을 볼 수 있다
  • 13. 코드가 “분산” 되어있는 이유 동일한 동작을 수행하는 코드의 중복을 최대한 억제한다! 동일한 코드는 함수를 만들어 호출하여 재사용한다! 함수 또한 공통 요소가 있다면 객체로 묘사하여 결합한다! 객체에 포함된 함수를 객체의 멤버 함수(메소드)라 한다 List 객체는 ! parent, add 두 개의 ! 멤버 함수(메소드)가 있다 하나씩 풀어봅시다
  • 14. 코드가 “분산” 되어있는 이유 어떤 객체가 있고, 객체가 제공하는 여러 기능들이 있다고 가정하면! 객체를 사용하기 위해 인스턴스를 만들어 객체를 사용할 수 있다! 객체가 제공하는 기능의(메소드, 또는 변수) 사용법을 안다면! 객체를 만드는 행위와 사용하는 행위는 완전히 독립될 수 있다 하나씩 풀어봅시다 내가 만든 칼로 전쟁을 하던 무를 썰던 난 상관하지 않고 칼을 만들겠소!
  • 15. 코드가 “분산” 되어있는 이유 객체를 만드는 행위! 만드는 과정은 사용을 전제로 하나, 사 용법은 다양해 질 수 있다. 예) 몇 개의 객체 인스턴스가 만들어 질지 예상할 수 없다. 객체를 사용하는 행위! 사용하는 행위는 필요에 따라, 원하는 방식으로(객체가 제공하는 자유도 범위에서) 사용되어질 수 있다. 사용자 입장에서 객체의 제공 기능을 아는것은 중요하나 어떻 게 만들어 졌는지 아는것은 불필요하다 하나씩 풀어봅시다
  • 16. 코드의 규모가 “진짜 길어” 졌을까? 하나씩 풀어봅시다
  • 17. 코드의 규모가 “진짜 길어” 졌을까? 실제 만들고자 하는 부분만 본다면 (1)
 코드는 실제 동작의 의미와 유사해졌고,! 따라서 구현 하고자 하는 의미가 선명해졌으며,! UI 추가를 위한 반복적인 시스템 코드들이 제거되었다. 실제 만들고자 하는 부분만 본다면 (2)
 추가로 새로운 리스트(UL)가 필요한 경우 List 객체를 재사용 함으로서 생성하는 객체의 코드 구조에 따른 의존성이 제거됨 하나씩 풀어봅시다
  • 18. 객체의 정보 “은닉과 약속” 으로 정리 하나씩 풀어봅시다 정보의 은닉
 객체는 객체 사용자에게 내부 구조를 숨긴다! 내부 구조를 은닉한다는건 외부 구조와 독립됨을 의미한다 객체의 약속
 객체는 객체가 제공하는 기능을 공개한다. ! 이를 인터페이스라 하며 규정된 입력을 넣으 면 약속된 동작이 수행될 것을 보장한다. 이 약속을 기반으로 사용자는 객체가 제공하는 범위 안에서 자유롭게 객체를 사용하며, 제 작자는 약속의 테두리 안에서 외부와 독립된 내부를 자유롭게 변경할 수 있는 자유를 누 릴 수 있다.
  • 19. 이것을 프로그래머들은 “캡슐화(encapsulation)” 라 한다 하나씩 풀어봅시다 병이 걸려 약을 먹어야 한다면 우리는 약사의 지시대로 식후 30분 후, 하루 3번 두 알씩 먹 는다는 약속만을 알면 된다. 하지만 약속은 중요하다. 환자에게 통보 없이 약의 사용법이 바뀐다면 환자가 죽 을 수 도 있기 때문이다. 그렇게 많은 프로그래머들이 지옥을 경험한다.