비동기처리는 JAVASCRIPT 에서 AJAX 에서 쓸 수 있다.
여기서 A 는 Asynchronous
개발자도구의 네트워크탭은 웹서버와 웹브라우저의 통신을 보여준다.
Ajax……..
Ajax를 제어할 때 우리가 비동기적으로 제어한다고 한다.
ajax를 통해서 서버와 웹브라우저가 내부적으로 통신을 할 수 있다.
내가 다른 작업을 하고 있을 때..!
callback함수
비동기처리: 시간순서대로 한꺼번에 어떤 일을 처리하는 것이 아니라, 시간이 오래걸리는 일이 있을 때 이 작업이 완료된 후에 처리해야 할 일을 콜백으로 지정하면 해당 작업이 끝났을 때 미리 등록한 작업을 실행할 수 있도록 한다.
내부함수 : 함수안에 존재하는 함수
외부함수 : 내부함수를 감싸고있는 함수
함수안에서만 사용하는 함수는 함수 안에 선언하면, 응집성이 높아짐
fucntion outer () {
var title = ‘coding everybody’;
function inner () {
alert (title) ;
}
inner () ;
outer ()
내부함수 inner 에서 title을 찾으면, 내부함수 inner는 외부함수 내에서 정의 된 지역변수 값을 가져올 수 있다.(외부함수가 더이상 작동되지않는 경우에도 , 외부함수에 내부함수는 접근할 수 있다 )
alert(title) ; -> 출력 값: coding everybody
원래는.... 변수의 scope는 함수내에서만인데, 현재 title 은 inner함수안에서 불렸으나
내부함수가 속한 외부함수에 해당 변수가 지정되었기때문에 그값을 잘 찾아왔음
매개변수는 함수 안에서 지역변수로 사용이 된다.
a+=1 ;
→ a = a+1;
_sum += arguement[i]
_sum = _sum + argument[i];
매개변수가 함수에 정의되어있지않아도, 인자로 여러개를 집어넣을 수 있다!
함수이름.length -> 그 함수가 매개변수로 지정한 인자의 개수
argument.length -> 해당 함수를 호출했을 때 몇개의 인자를 전달했는지를 알려줌
가끔 argument 와 인자 개수를 맞춰야할 때가 있는데 그때 .length가 유용하게 쓰일 수 있음
함수 하고 '.’을 치면, 함수가 가지고 있는 여러가지 method가 나온다
apply는 method중 하나
함수.apply(null, [1,2])
이렇게 하면 sum(1,2) 처럼
하나의 객체안에 기능과 연관된 변수, 로직들을 객체라는 단단한 곳에 넣어주는 것.
데이터가 많아지고 홈페이지가 커짐에 따라서 기능을 한꺼번에 관리하는 것이 아닌, 헤더/본문/aside/댓글 이런식으로 섹션을 나누어서 관리하기 시작.
연관되어있는 것들…
header. 이런식으로 해당하는 부분의 변수와 method를 그룹핑/카테고라이징 한 것이 객체.
그래서 다른 곳에도 사용할 수 있게 해주는 것이 객체 -> 재활용성에도 도움을 준다.
객체지향프로그래밍에 관련된 자료
객체지향프로그래밍을 위해서는 문법적인 부분, 설계적인 부분을 배워야 함
객체지향프로그래밍을 위해서는 문법이 중요 문법을 알아야지 코드 작성 가능
현실을 간단하게 만든 것을 추상화(abstract)라고 함
소프트웨어 설계는 복잡한 현실을 추상화하는 것
현실을 프로그래밍적으로 잘 추상화해야 함
Javascript 는 Prototype-based programming
자바스크립트는 되게 유연한..........언어이다
객체지향 프로그래밍을 통해 도달하고자하는 목표> 좋은 부품의 로직을 만드는 것이다 !
객체는 다들 독립적인 객체가 됨..
let person = {} 빈객체 만들기
let person = new Object();
혹은 객체를 정의할 때 값을 셋팅해보기
let person = {
‘name’ : ‘egoing’,
‘introduce’ : function () {
return ‘My =name is ‘+this.name’;
}
}
이렇게 !!!
똑같은 객체를 복사하면 method가 같아짐…
method가 중복되면 안됨 -> 이걸 해결하는 것이 생성자임 !!
return 이 없는 하나의 함수를 정의한 후에 해당 함수를 변수에 담아 호출하면 undefined 값이 뜸
다른 변수에 해당 함수 이름 앞에 'new' 를 적은 후 호출하면
해당 함수이름으로 하나의 객체가 생성됨'
→ 생성자 함수를 사용하면 class와 같이 만들 수 있음
new 함수이름() ;
함수이름을 가진 객체를 생성한다.
여기서는 함수이름을 -> 객체 생성자라고 한다 ! new 두ㅣ에있는 것..객체 생성자'
기존 함수의 new 라는 연산자를 붙여서 사용하게되면, 해당 함수는 생성자 함수로 동작!
생성자함수는 new Object 처럼 하나의 객체만을 생성하는 것이 아닌,
여러개의 객체를 생성할 수 있기때문에 재활용성이 높음. (생성자함수의 목적: 객체만들기)
일반 함수와 생성자함수 구분법?
대문자로 시작한다.
함수라는 것이 객체의 시중을 두는 것이 아니라… 객체 생성자가 됨 (함수 기준임 !!)
Ex. function person(){};
let makeObj = new Person() ;
console.log(makeObj);
출력값 : person {} // 함수에 new를 붙이면 리턴값은 객체가 된다 !
Ex. function Person(name) {
this.name = name;
this.introduce = function () {
return ‘My name is ‘+this.name;
}
}
var p1 = new Person(‘egoing’) ;
name에 egoing 이라는 값이들어감
person이라는 객체의 name 은 = egoing
person이라는 introduce 속성이 생김…
p1 = {
name : ‘egoing’,
introduce : function() {return ~ }
}
이렇게 되고 p1이라는 변수에 담김 :)
생성자가 하는 일 ! 객체에 대한 초기화
똑같은
let p2 = new Person(‘leezche’) ;
이렇게 해서 p2 에 다른 객체가 담길 수 있도록 하고..
Person이라는 생성자가 만들어놓은 빈 객체가 어떤 프로퍼티를 가져야 하고 어떤 메소드를 가져야하는 지 세팅을 해주는 것을 초기화라고 한다.
그래서 코드의 재사용성이 대폭 높아졌다.
leezche라는 다른 인자를 넣어서도 저렇게만 해서 새로운 객체만들 수 있게 했기때문에 !
생성자 내에서 객체의 프로퍼티를 정의하고 있고, 생성자의 함수는 대문자로 시작.
참고>Instance: 생성자로 생성된 객체를 인스턴스라고 부른다.
생성자함수를 통해 객체를 생성하면 같은 속성을 가진 여러개의 객체 생성가능,
Ex>
function Book(title, author, year) {
this.title = title;
this.author = autor;
this.year = year;
this.getSummary = function () {
return `${this.title} was written by ${this.author} in ${this.year}`;
};
}
const book1 = new Book(‘Book One’, ‘John Doe’, ‘2013’);
Book은 생성자함수이며, book1은 인스턴스임 !
book1 {title : Book One, author: John Doe, year: 2013, getSummary : f }
이렇게 객체가 생성되었다.
여기서 new Book은 먼저 빈객체 생성, 그다음 생성자 함수따라 this에 정해진 프로퍼티 추가해서 객체생성한 것.