3주차 회고록
7. 객체리터럴
객체란?
자바스크립트를 구성하는 거의 "모든 것"이 객체다. 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체다.
자바스크립트는 프로토타입 기반 객체지향 언어로서 클래스 기반 객체지향 언어와는 달리 다양한 객체 생성 방법을 지원한다. (객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스(ES6))
프로퍼티
객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성된다.
var person ={
// 프로퍼티 키는 name, 프로퍼티 값은 'Lee'
name: 'Lee',
// 프로퍼티 키는 age, 프로퍼티 값은 20
age: 20
};
메서드
메서드는 객체에 묶여 있는 함수를 의미한다.
var circle = {
radius: 5,
getDiameter: function() { // <- 메서드
return 2 * this.radius;
}
};
console.log(circle.getDiameter()); // 10
8. 원시 값과 객체의 비교
자바스크립트가 제공하는 7가지 데이터 타입 (숫자, 문자열, 불리언, null, undefined, 심벌, 객체 타입)은 크게 원시 타입과 객체 타입으로 구분할 수 있다.
- 원시 타입의 값. 즉 원시 값은 변경 불가능한 값이다.
- 객체 타입의 값. 즉 객체는 변경 가능한 값이다.
1. 원시 값
변경 불가능한 값
원시 값은 변경 불가능한 값이다.
// const로 선언된 값은 재할당이 금지되어 원시값으로 볼 수 있다.
const o = {};
// 하지만 const 키워드를 사용해 선언한 변수에 할당된 객체는 변경할 수 있다.
o.a = 1;
console.log(o); // {a: 1}
불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없다.
2. 객체
객체는 프로퍼티의 개수가 정해져 있지 않으며, 동적으로 추가되고 삭제할 수 있다. 또한 프로퍼티의 값에도 제약이 없다.
var person = {
name: 'Lee'
};
// 프로퍼티 값 갱신
person.name = 'Kim';
// 프로퍼티 동적 생성
person.address = 'Seoul';
console.log(person); // { name: 'Kim', address: 'Seoul' }
9. 함수
프로그래밍 언어의 함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다.
함수를 사용하는 이유
함수는 필요할 때 여러 번 호출할 수 있다. 몇 번이든 재사용이 가능하다. 동일한 작업을 수행할 때 같은 코드를 여러번 중복하여 사용하는 것이 아닌 미리 정의된 함수를 재사용하는 것이 효율적이다.
재사용성을 높이는 함수는 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높이는 효과가 있다.
함수 정의
// 함수 선언문
function add1(x,y) {
return x + y;
}
// 함수 표현식
var add2 = function(x,y){
return x + y;
};
// Function 생성자 함수
var add3 = new Function('x','y','return x+y');
// 화살표 함수
var add4 = (x,y) => x + y;
반환문
function multiply(x,y){
return x * y; // 반환문
console.log('실행되지 않는다');
// 반환문 이후에 다른 문이 존재하면 그 문은 실행되지 않고 무시된다.
}
console.log(multiply(3,5)); // 15
재귀함수
재귀함수는 반복되는 처리를 위해 사용한다.
// 반복문을 사용함
function countdown1(n){
for (var i=n; i>=0; i--){
console.log(i);
}
}
countdown1(10); // 10 9 8 7 6 5 4 3 2 1 0
// 재귀함수를 사용
function countdown2(n){
if (n < 0) {
return;
}
console.log(n);
countdown2(n-1); // 재귀호출
}
countdown2(10); // 10 9 8 7 6 5 4 3 2 1 0
중첩 함수
함수 내부에 정의된 함수를 중첩 함수 또는 내부 함수라 한다. 그리고 중첩 함수를 포함하는 함수는 외부 함수라 부른다.
function outer() {
var x = 1;
// 중첩 함수
function inner() {
var y = 2;
// 외부 함수의 변수를 참조할 수 있다.
console.log(x + y); // 3
}
inner();
}
outer(); // 3
콜백 함수
함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백 함수라고 한다.
매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수를 고차 함수라고 한다.
function repeat(n,f) {
for(var i=0; i<n; i++){
f(i);
}
}
repeat(5, function(i) {
if (i % 2) console.log(i);
}); // 1 3
var logOdds = function(i) {
if (i % 2) console.log(i);
};
repeat(5, logOdds); // 1 3
순수 함수와 비순수 함수
함수형 프로그래밍에서는 어떤 외부 상태에 의존하지도 않고 변경하지도 않는, 즉 부수 효과가 없는 함수를 순수 함수라 하고, 외부 상태에 의존하거나 외부 상태를 변경하는, 즉 부수 효과가 있는 함수를 비순수 함수라고 한다.
// 순수 함수 (외부 상태를 변경하지 않는다.)
var count = 0;
function increase(n) {
return n++;
}
count = increase(count);
console.log(count); // 1
count = increase(count);
console.log(count); // 2
// 비순수 함수 (함수 내부에서 외부의 값을 변경한다.)
var count = 0;
function increase() {
return ++count;
}
increase();
console.log(count); // 1
increase();
console.log(count); // 2
기술 블로그