2022.06.24 금요일 🌧
커피의 사전적 정의인 '끓여서 마실 수 있도록 볶아 놓은 커피나무 열매의 씨앗, 또는 그것을 빻은 불말 상태의 물질로 그 씨를 끓이거나 분말을 뜨거운 물에 타서 만든 짙은 갈색 음료' 라고 말하지 않고 커피라는 "이름"으로 부르기로 약속 되어 있는 것처럼 각각의 데이터를 편리하게 저장하고 꺼내 쓸 수 있도록 "이름"을 지어 주는 것
console.log(5 * 1)
console.log(5 * 2)
console.log(5 * 3)
console.log(5 * 4)
console.log(5 * 5)
console.log(5 * 6)
console.log(5 * 7)
console.log(5 * 8)
console.log(5 * 9)
// 다른 단 표현 하고 싶을때 단순히 숫자 변경 작업 필요
let num = 5
console.log(num * 1)
console.log(num * 2)
console.log(num * 3)
console.log(num * 4)
console.log(num * 5)
console.log(num * 6)
console.log(num * 7)
console.log(num * 8)
console.log(num * 9)
// 다른 단 표현 하고 싶을때 num 변수 데이터 변경으로 작업 가능
let age;
age = 29;
let nickname = 'hyeonwooga'
Evaluation of Expressions(표현식 평가)
표현식 평가 과정
let age = 29;
console.log(num + 2);
// 결과값은 31로 출력
// console.log(num * 2); -> console.log(29 + 2); -> console.log(31); 순으로 표현식 평가
let name = 'park';
console.log('hello' + name);
// 결과값은 'hello park' 출력
// console.log('hello' + name); -> console.log('hello' + 'park') -> console.log('hello park'); 순으로 표현식 평가
변수와 타입(Variable, Type)
변수는 상황에 따라 변할 수 있는 값
선언은
let myname;
할당은
myname = 'Phillip';
같이 쓰면
let myname = 'Phillip';
프로그래밍 세계에서의 변수는 이름(Label)이 붙은 값
myname 이라는 변수를 이용해 'Phillip'이라는 값을 다른 곳에서도 이용할 수 있다
대표적인 예
const pi = 3.141592;
const speedOfLight = 300000000;
// 자바스크립트에서 'CamelCase' 를 사용한다.
// 띄어쓰기가 불가능하여 다음 단어의 첫 글자를 대문자료 표기
표현식(Expression)에서 이러한 변수들을 사용할 수 있다.
const pi = 3.141592;
console.log(pi * 5 * 5); // 반지름이 5인 원의 넓이
console.log(pi * 7 * 7); // 반지름이 7인 원의 넓이
위 식에서 반지름도 변수로 둬서 처리 할 수 있다.
const pi = 3.141592;
let radius;
// 반지름이 5인 원의 넓이
radius = 5;
console.log(pi * radius * radius);
// 반지름이 7인 원의 넓이
radius = 7;
console.log(pi * radius * radius);
결과를 다시 변수로 담을 수 있다.
const pi = 3.141592;
let radius;
let areaOfCircle;
// 반지름이 5인 원의 넓이
radius = 5;
areaOfCircle = pi * radius * radius;
console.log(areaOfCircle);
// 반지름이 7인 원의 넓이
radius = 7;
areaOfCircle = pi * radius * radius;
console.log(areaOfCircle);
변수는 동일한 변수를 이용해 대입할 수 있습니다.
let sum = 1;
console.log(sum) // sum === 1
sum = sum + 2;
console.log(sum) // sum === 3
sum = sum + 3;
console.log(sum) // sum === 6
sum = sum + 4;
console.log(sum) // sum === 10
// 수학적으로 말이 안되지만, '='이 '같다'라는 의미가 아니므로
// 위 구문들은 이미 할당된 sum 의 값을 불러와 연산 후
// 다시 sum 에 값을 할당(저장) 해 주는 것
// 변수 선언은 한번만 필요
할당이 없는 변수는?
let myname; // undefined
변수에 담을 수 있는 데이터는 숫자나 문자처럼 특정한 형태를 가지고 있습니다. 이번 챕터에서는 숫자나 문자와 같이 변수에 할당할 수 있는 형태, 타입에 대해 학습합니다.
변수에는 다양한 타입이 있다!
pi(숫자) : 3.141592
myname(문자열) : Phillip
isAdult(불리언, 참/거짓 판단) : 성인입니까?
let age = 29;
let isAdult = age >= 20;
console.log(isAdult); // true
age = 19;
isAdult = age >= 20;
console.log(isAdult); // false
위 타입이 서로 섞인(compound) 타입도 있습니다 (자료형)
let frits = [
'banana',
'apple',
'pineapple',
];
let person = {
name: 'Phillip',
age: 29,
isAdult: true,
};
undefined 도 타입입니다
함수(function)도 타입입니다
JavaScript에는 'typeof' 연산자로 타입을 확인해볼 수 있습니다.
'typeof' 연산자 다음에 타입을 확인하고자 하는 값을 넣어주면 됩니다.
typeof 값;
직접 개발자도구를 활용하여 실습해보자
console.log(typeof 1) // number
console.log(typeof '1') // string
console.log(typeof (1 < 2)) // boolean
// 변수에 할당한 값도 'typeof' 연산자로 확인 할 수 있습니다.
let number = 1;
console.log(typeof number) // number
let string = '1';
console.log(typeof string) // string
복잡한 문제는 더 작고 간단한 문제로 나눌 수 있고 작고 간단한 문제를 하나씩 해결하며 마지막에는 크고 복잡한 문제를 해결합니다. 이러한 과정을 컴퓨터는 함수라는 것을 사용해 해결합니다.
함수는 입력에 따라 그에 걸맞은 작업을 하는 하나의 작업 단위입니다. 예를 들어 샌드위치를 만드는 과정도 함수로 나타낼 수 있습니다. 그 과정 중에 양상추를 어떻게 자를지, 토마토를 넣을지 말지 등을 결정합니다.
하지만 만약 에그 샌드위치를 기대하고 베이컨과 달걀을 입력 재료로 사용했는데, 토마토 샌드위치가 나오는 경우를 생각해봅시다. 이 경우에는 준비한 재료가 베이컨, 달걀이 아니라 토마토였거나, 과정이 입력 재료와 상관 없이 밖에서 토마토 샌드위치를 사온다는 황당한 애용이 적혀져 있을 수 있습니다. 이런 황당한 일이 일어나지 않도록, 논리적 일련의 작업을 하는 하나의 단위를 함수라고 합니다.
이전에 학습한 변수를 통해서 구구단을 만들때 원하는 단에 따라서 변수값 할당만 바꿔주면 됬었지만 여전히 console.log 를 9번 복사, 붙여넣기 해야하는 문제가 남아있었고 이 문제를 함수를 통해 해결하면서 함수의 'keyword', 'name', 'parameter', 'body' 등을 알아봅시다.
let num = 2;
function mulTablePrinter(num) {
console.log(num * 1);
console.log(num * 2);
console.log(num * 3);
console.log(num * 4);
console.log(num * 5);
console.log(num * 6);
console.log(num * 7);
console.log(num * 8);
console.log(num * 9);
}
// keyword : function
// name : mulTablePrinter
// parameter : (num)
// body : {
console.log(num * 1);
console.log(num * 2);
console.log(num * 3);
console.log(num * 4);
console.log(num * 5);
console.log(num * 6);
console.log(num * 7);
console.log(num * 8);
console.log(num * 9);
}
함수는 코드의 묶음 (즐겨찾기 버튼)
코드를 묶음으로 만들어 놓고 필요할때 찾아 사용
기능(function)의 단위
입력과 출력간의 매핑(mapping)
입력값에 따라 출력값이 정해진다
반드시 돌아온다 (return)
함수는 리턴값을 반환한다
함수 사용법
function cal(param1, param2) {
console.log(param1 + param2);
return * 10;
}
cal(10, 20);
Evaluation of expressions(표현식 평가)
let result = cal(10, 20); // 함수 호출
// 함수 선언
function cal(param1, param2) {
console.log(parma1 + param2)
return param1 * 10;
}
let result = cal(10, 20);
// 인자값(prameter) 함수에 전달 및
// 평가(body에 parameter 값 대입)
function cal(10, 20) { // 전달
console.log(10 + 20) // 평가
return 10 * 10; // 평가
}
let result = cal(10, 20);
function cal(10, 20) {
console.log(10 + 20) // 30
return 10 * 10;
}
let result = 100;
function cal(10, 20) {
console.log(10 + 20)
return 10 * 10; // return 100
}
// 함수 선언
function mulTablePrinter(num) {
console.log(num * 1);
console.log(num * 2);
console.log(num * 3);
console.log(num * 4);
console.log(num * 5);
console.log(num * 6);
console.log(num * 7);
console.log(num * 8);
console.log(num * 9);
}
// 함수 호출
mulTablePrinter(2); // 2단
mulTablePrinter(3); // 3단
mulTablePrinter(4);
// ...
mulTablePrinter(9); // 9단
const base = 3;
const height = 4;
const triangleArea = (base * height) /2;
console.log(triangleArea); // 6
function getTriangleArea(base, height) {
let triangleArea = (base * height) / 2;
return triangleArea
}
console.log(getTrianlgeArea(2, 4) // 4
// 함수 내에 return 값이 있는 경우
// 출력값이 return 문의 값
function getTriangleArea(base, height) {
let triangleArea = (base * height) / 2;
}
console.log(getTrianlgeArea(2, 4) // undefined
// 함수 내에 return 값이 없는 경우
// 출력값이 undefined
function getSomeCoffee () {
// 1. 물을 끓인다.
// 2. 원두를 갈아 온다.
// 3. 도리퍼에 필터를 설치한다.
// 4. 드립 커피를 추출한다.
// 5. 만들어진 커피를 제공한다.(return)
}
함수 선언식
function getTriangleArea(base, height) {
let triangleArea = (base * height) / 2;
return triangleArea;
}
// 기본형, 전통적인 방식
함수 표현식
const getTriangleArea = function (base, height) {
let triangleArea = (base * height) / 2;
return triangleArea;
}
// 변수 선언, 익명 함수 할당
화살표 함수
const getTriangleArea = (base, height) => {
let triangleArea = (base * height) / 2;
return triangleArea;
}
// ES6 문법, 함수 표현식 기반
화살표 함수
const getTriangleArea = (base, height) => base * height / 2; // 정상 작동
const getTriangleArea = (base, height) => { base * height / 2 }; // undefined 리턴
const getTriangleArea = (base, height) => (base * height / 2); // 정상 작동
// bad
const getStudentAvg = arr => arr.filter(person => person.job === 'student').reduce((sum, person) => (sum + person.grade), 0);
// good
const getStudentAvg = arr => {
return arr
.filter(person => person.job === 'student')
.reduce((sum, person) => (sum + person.grade), 0)
// 위의 두 코드 동일하게 정상작동 하지만 아래의 코드가 가독성이 더 좋아 오류확률이 줄어들게 됩니다.