언어적인 차원에서 사용하지 못하게끔 처리 할 수 있다 ⇒ Strict method ⇒ user strict
Strict methode는 일반적으로 전역에 잡지 않는다
다른 일반 라이브러리들이 동작을 안할 수 있다
일반적으로 즉시실행함수 IIFE를 만들어서 사용하는게 일반적이다
사용하는 플랫폼에 따라 달라진다
개발자가 의도적으로 생성할 수 없다
clouser는 JS 고유의 개념이 아니다
함수형 프로그래밍 언어에서 사용되는 내용
First-class citizen의 이해가 먼저 선행되어야 한다
JS함수는 위의 일급객체조건에 해당된다. ⇒ 일급함수라고 하기도 한다
MSN → clouoser는 함수와 그 함수가 선언된 lecial 환경의 조합
excution context 실행 콘텍스트
var obj = {}
function myFunc(){
console.log('Hello');
}
myFunc();
var obj = {}
function myFunc(){
console.log('Hello');
//nested function, inner function, 중첩함수
function sayHello(){
console.log('하이');
}
}
myFunc();
const x =1;
function outer(){
const x= 10;
const inner = function(){
console.log(x);
}
return inner;
}
const innerFunc = outer();
innerFunc();
Infomation Hiding 구현에 사용한다
//클로저 X
const increase = function(){
let num = 0;
return ++num;
}
console.log(increase()); //1
console.log(increase()); //2
console.log(increase()); //3
//클로저함수
const increase = (function(){
let num =0;
return function(){
return ++num;
}
}());
console.log( increase());
console.log( increase());
console.log( increase());
//클로저 함수2
const counter = (function(){
let num =0;
return {
//메소드
increase(){
return ++num;
},
decrease(){
return --num;
}
}
}());
console.log(counter.increase());
console.log(counter.increase());
console.log(counter.increase());
console.log(counter.decrease());
console.log(counter.decrease());
JavaScript class → 문법적 설탕
Programming 패러다임 → 프로그래밍 방법론
- 객체지향
- 함수형 → 구조적, 절차적 프로그래밍
- 선언적 프로그래밍
- 기타
구조적 프로그램(절차적)
- 프로그램을 기능적으로 세분화 시킴
- 각각의 기능을 모듈화 시킴 → function 함수
- 장점 : 설계가 쉽다, 구현이 빠르다
- 단점 : 비슷한 기능의 모듈들을 가져다 써서 복잡하게 얽히게 됨 , 유지보수가 힘들다
객체지향 개념들이 생기고 그방식으로 프로그램을 할 수 있는 프로그래밍 언어들이 등장
→ 객체지향 개념을 가장 잘 대변하고 있는 프로그래밍 언어 : Java
객체지향 프로그램
- 프로그램을 기능으로 세분화하지 않는다
- 모델링: 현실세계에서 일어나는 문제를 프로그램적으로 해결하는 방법
- 문제를 구성하는 구성요소를 파악 → 그 구성요소간의 어떤 정보들이 오고가는지 파악해서 프로그램으로 묘사
- 추상화(단순화): 현실세계의 문제들을 필요한 부분만 단순화 시킨다
- 변수: 객체의 상태 - (java: 필드)
- 함수: 객체의 행위 - (java: 메소드)
- 클래스
- 객체를 모델링하는 수단
- 실제 데이터를 뽑아낼 수 있는 인스턴스를 만들 수 있는 도구
- 기존의 데이터타입을 여러개 이용해서 새로운 데이터타입을 만드는 개념으로 사용 ADT : Abstarct Data Type (추상데이터 타입을 만든다)
- 장점: 유지보수성이 높다
prototype 기반의 객체지향 언어
클래스는 0개 이상의 메소드로 구성되어 있다
ES6 축약 표현으로 된 method : non-constructor
class Person{
//constructor
constructor(name){
//instance의 초기화
//instance의 property를 설정
this.name = name;
}
//prototpye 메소드
sayHello(){
console.log('안녕하세요');
}
//static 메소드
//생성자 자체에 붙음
static sayHi(){
console.log('요건 static');
}
}
클래스 역시 호이스팅이 발생한다
객체 literal에서 접근자 property를 써본다
class Person{
constructor(firstName, lastName){
rhis.firstName = firsName;
this.lastName = lastName;
}
//get을 이용하면 반드시 return구문이 존재해야 한다
get fullName(){
return `${this.lastName}${this.firstName}`
}
set fullName(name){
[this.lastName, this.firstName] = name.split(' ')
}
}
//지양한다
const me = new Person('길동', '홍');
me.fullName = '김연아'
코드를 효율적으로 재활용하기 위해서 하나의 클래스가 갖고 있는 클래스를 더 확장된 클래스로 만들때 위쪽에 있는 클래스를 Superclass라고 한다
(supperclass, parent class, upper class, base class)
⇒ subclass, child class, drived class(파생) 등
is - a relation ship - 다형성
상속 관계가 있을때 이를 지칭하는 것
- subclass is a super class : subclass는 superclass 이다
ex) 사람(subclass)은 포유류(supperclass)이다 (0) , 포유류는 사람이다(X)- 다형성 : 하나의 객체를 여러개의 형태로 사용할 수 있다
- 하위클래스는 상위클래스와 같기 때문에 하위클래스의 데이터타입을 상위클래스의 데이터타입으로도 사용할 수 있다
인터페이스:
클래스끼리의 결합도가 높아서 이부분을 끊어내고 구현기반으로 제작하기 위한 수단
extends 키워드 뒤에 값으로 평가
가장 대표적으로 많이 사용하는 자료구조 → 활용빈도가 아주 높다
array Literal → [ ]
const arr = [1,2,3]
arrayLiteral
const arr = new Array() ;
생성자함수
배열의 각각의 요소를 element → 숫자 index로 배열을 참조한다
객체 → property key; 순서가 없다 ; length x
배열 → index 요소 ; 순서가 있다 ; lenght o