OOP 란? 객체 지향 프로그래밍 (Object Oriented Programming)을 뜻한다. OOP의 모든 것은 '객체'로 그룹화된다. 특히, OPP는 4가지 개념을 가지고 있어 재사용성이 좋다. OOP 4가지 개념 캡슐화(Encapsulation) 속성과 메소드를 따로 정의하지 않고, 하나의 객체 안에서 느슨하게 묶는다 은닉(구현은 숨기고, 동작은 노출시킴) 과 느슨한 결합(언제든 수정가능)에 유리하다 추상화(Abstraction) 전화기의 회로도가 눈에 보이지 않지만, 누구나 전화기를 쉽게 사용할 수 있다 너무 많은 기능이 노출되지 않게 하여 사용 상의 혼란을 없앤다 상속(Inheritance) 자식은 부모가 가진 유전자를 동일하게 갖고 있다. 그 동일한 부분을 일일히 쓰지 않고, 부모를 끌어와..
코딩
객체지향 프로그래밍 하나의 모델이 되는 청사진(blueprint)를 만들고 , → 클래스(class) 그 청사진을 바탕으로 한 객체를 찍어내는 프로그래밍 패턴 → 인스턴스(instance) 클래스를 만드는 최근에 ES6에 도입되었습니다. 클래스는 constructor를 품고 있습니다 class Car { constructor(brand, name, color){ //인스턴스가 만들어질 때 실행되는 코드 } } 속성과 메소드 클래스에 속성과 메소드를 정의하고, 인스턴스에서 그것을 사용합니다 ▶ 클래스: 속성의 정의 - ES5 에서는 class 와 constructor 대신 그냥 function 을 사용했다 - ES6 에서는 class 와 constructor 를 사용한다 //ES5 function Car(..
고차함수란? 1. 전달인자로 함수를 받는 함수 2. 함수를 리턴하는 함수 둘 중에 하나 이상 해당되면 고차함수이다. 고차함수에서 자주 쓰이는 내장고차함수 3가지 메소드가 있다. 특히, 배열 반복문에서 자주쓰이는 3인방이다. 그래서 배열 반복문 3인방이라고 이름 짓겠다. arr.filter() 특정 기준을 가지고 분류할때 (필터링) - 여러 음료중에서 티 종류만 꺼내고 싶을때 (티 종류만으로 배열만들기) 리턴값이 '참'인것만 걸러진다.문제 : 문자열을 요소로 갖는 배열을 입력받아 그 길이가 홀수인 요소만을 갖는 배열을 리턴해야 합니다.function filterOddLengthWords(words) { // TODO: 여기에 코드를 작성합니다. return words.filter(function(el){ ..
bind() bind()는 this 값을 고정시키는 명령! bind() 안의 첫번째 인자는 this 를 고정시키고, 두번째 인자부터는 함수가 호출될때마다 사용된다. sum이라는 함수에 this를 kim 으로 고정하는 새로운 함수(KimSum)가 만들어짐 // object 와 function 사이의 관계를 규명해보기 2 let kim = {name:'kim', first:10, second:20} let lee = {name:'lee', first:10, second:10} function sum(prefix){ return prefix +(this.first + this.second); } console.log('sum.call(kim)', sum.call(kim, '=>')); console.log('..
call()은 실행할때마다 어떤 객체의 this 값을 바꾸는 명령! call()은 첫번째 인자로는 그 함수에 내부적으로 this를 뭘로 할지 오고, 두번째 인자부터는 호출하려는 함수에 인자값(parameter)이 들어오게 된다 // object 와 function 사이의 관계를 규명해보기 1 //서로 아무런 관련이 없는 두 객체를 만들었어요. let kim = {name:'kim', first:10, second:20} let lee = {name:'lee', first:10, second:10} function sum(prefix){ return prefix +(this.first + this.second); // 어떤 객체에도 속해있지 않은 함수 } //sum 이라는 객체를 실행시키겠다! consol..
자바스크립트의 굉장히 유연한 특징! 마음대로 누군가의 자식이 될 수 있다~~ 단, 자식은 부모를 못바꾼다 let superObj = {superVal:'super'} let subObj = {subVal:'sub'} // 자바스크립트의 굉장히 유연한 특징! // 마음대로 누군가의 자식이 될 수 있다 subObj.__proto__ = superObj; // '__proto__'라는 링크를 걸어줌: subObj는 선조는 superObj이다 console.log('subObj.subVal =>',subObj.subVal); console.log('subObj.superVal =>',subObj.superVal);// 객체 subObj가 superVal이라는 속성을 가지는 지 찾아봄. 없다, 그러면 '__pro..
Object.create() __proto__ 대신에 'Object.create()' 를 사용해서 prototype link(명확한 상속관계)를 지정해줄 수 있다. let lee = Object.create(kim); kim을 부모로 하는 자식객체 lee를 만들어줘 let superObj = {superVal:'super'} //let subObj = {subVal:'sub'} //subObj.__proto__ = superObj; let subObj = Object.create(superObj);// superObj를 부모로 하는 새로운 객체,보다 prototype link(명확한 상속관계)를 확립! subObj.subVal = 'sub'; //주석처리를 한 위의 코드와 똑같이 동작 console.lo..
'__proto__' lee.__proto__ = kim; lee는 kim의 자식이다 // class 문법이 아니라 아주 관습적(prototype)으로 상속하는 방법 let superObj = {superVal:'super'} let subObj = {subVal:'sub'} // 자바스크립트의 굉장히 유연한 특징! // 마음대로 누군가의 자식이 될 수 있다 subObj.__proto__ = superObj; // '__proto__'라는 링크를 걸어줌: subObj는 선조는 superObj이다 console.log('subObj.subVal =>',subObj.subVal); console.log('subObj.superVal =>',subObj.superVal);// 객체 subObj가 superVa..