const name = "Sinok Kim" // name이라는 변수에 "Sinrok Kim"이라는 값을 할당
console.log(name) // 변수 name이 가리키고 있는 값 "Sinrok Kim"을 출력
name = "William" //
값을 다시 재할당하려는 것이지만 실패. 에러 발생!
*var 함수는 요즘은 사용하지 않음!!!
:number, string, boolean, null, undefined
*구글링을 잘 하려면 영어 명칭을 잘 알아놓아야 한다!
: True/False
const isMan = true
const isWoman = false
console.log(isMan)
console.log(isWoman)
isMan을 true로 선언했으므로 console.log(isMan)에는 true가 나타난다!
: null은 텅텅 비어 있는 값을 의미합니다.
undefined은 변수를 선언만 하고 값이 할당되어 있지 않은 것입니다.
*본 타입 이외에 객체형 타입이라는 데이터도 존재한다! 나중에 다시 알아보자.
console.log('My' + ' car') // My car를 출력
console.log('1' + 2) // 12를 출력
'1'은 문자열이기 때문에 12가 된것.
*문자열과 숫자를 이어붙이면 숫자가 문자로 인식된다!
: 백틱을 이용해 문자열 데이터를 표현. 백틱을 이용하면 따옴표를 이용할 때보다 문자열 붙이기가 더 간단하다.
const shoesPrice = 200000
console.log(`이 신발의 가격은 ${shoesPrice}원입니다`)
// console.log('이 신발의 가격은 ' + shoesPrice + '원입니다') 와 동일
// + 를 활용한 문자열 붙이기보다 간결하게 표현이 가능하다!
: 일상생활에서 많이 쓰는 사칙연산(+, -, *, /) 뿐만 아니라 // (나머지 연산), ** (거듭제곱) 도 있다.
console.log(10 % 3) // 나머지(remainder) 연산자. 1을 출력
console.log(10 ** 2) // exponentiation. 10의 2승인 100을 출력
: 자기 자신의 값을 증가시키거나 감소시키는 연산자(++, —) 변수앞에 놓는냐, 변수뒤에 놓느냐에 따라 차이가 있음!
let count = 1
const preIncrement = ++count
// 증감연산자를 앞에 놓게 되면 아래 주석으로 처리한 두 줄의 코드와 같은 내용입니다.
// 먼저 자기 자신에게 1을 더해서 재할당 한 후, 이를 preIncrement 에 할당했다는 의미입니다.
// count = count + 1
// const preIncrement = count
console.log(`count: ${count}, preIncrement: ${preIncrement}`)
// count: 2, preIncrement: 2
let count = 1
const postIncrement = count++
// 증감연산자를 뒤에 놓게 되면 아래 주석으로 처리한 두 줄의 코드와 같은 내용입니다.
// postIncrement에 자기 자신의 값을 먼저 할당하고, 이후에 1을 더해서 재할당합니다.
// const postIncrement = count
// count = count + 1
console.log(`count: ${count}, postIncrement: ${postIncrement}`) // count: 2, postIncrement: 1
: +=, -= 같은 것들을 통해서 연산과 대입
const shirtsPrice = 100000
const pantsPrice = 80000
let totalPrice = 0
totalPrice += shirtsPrice // totalPrice = totalPrice + shirtsPrice 와 동일
console.log(totalPrice)
totalPrice += pantsPrice // totalPrice = totalPrice + pantsPrice 와 동일
console.log(totalPrice)
totalPrice -= shirtsPrice // totalPrice = totalPrice - shirtsPrice 와 동일
console.log(totalPrice)
: 비교연산자를 통해서 얻는 값이 바로 boolean!
console.log(1 > 2) // 1이 2보다 큰가? false
console.log(1 >= 2) // 1이 2보다 크거나 같은가? false
: || (or), && (and), ! (not) 과 같은 연산자
|| 는 연산 대상 중 하나만 true 여도 true 리턴
&& 는 연산 대상이 모두 true 여야만 true 리턴
! 는 true를 false로, flase를 true로 바꿔서 리턴 > 대상 앞에 붙임
let isOnSale = true
let isDiscountItem = true
isOnSale = false
console.log(isOnSale && isDiscountItem) // false && true 이므로 false
console.log(isOnSale || isDiscountItem) // false || true 이므로 true
isDiscountItem = false
console.log(isOnSale && isDiscountItem) // false && false 이므로 false
console.log(isOnSale || isDiscountItem) // false || false 이므로 false
console.log(!isOnSale) // !false 이므로 true
: 두 값이 일치하는지!
console.log(1 === 1) // true
console.log(1 === 2) // false
console.log('Javascript' === 'Javascript') // true
console.log('Javascript' === 'javascript') // 대소문자나 띄워쓰기도 다 정확히 일치해야 해요. 따라서 false
console.log(1 === "1") // false를 출력
console.log(1 == "1" // true를 출력
: if (조건) { 조건을 만족할 때 실행할 코드 }
: if 구문의 조건을 만족하지 않았을 때 실행하고 싶은 코드를 else 구문과 함께 작성. else if 를 사용하면 조건을 추가로 더 넣어줄 수 있음!
const shoesPrice = 50000
if (shoesPrice < 40000) {
console.log('신발을 사겠습니다.')
} else if (shoesPrice <= 50000) {
console.log('고민을 해볼게요...') // 신발 가격이 50000원보다 작거나 같으므로 않으므로 해당 코드가 실행됨
} else {
console.log('너무 비싸요. 신발을 사지 않겠습니다.')
}
distance >= 2 && distance < 5
// distance가 2 이상이고 5 미만일 때
:while (조건) { 조건을 만족할 때 실행할 코드 } while을 쓸때는 끝날 수 있도록 해줘야 한다.
let temperature = 20
while (temperature < 25) {
console.log(`${temperature}도 정도면 적당한 온도입니다.`)
temperature++ // 증감연산자를 활용해서 온도를 변화시킵니다.
}
*실수로 무한루프에 빠져서 프로그램의 실행이 끝나지 않는다면 ctrl + c 를 눌러서 중단시킵니다.
: 제일 많이 쓰인다. 명시적으로 반복문의 조건을 표현
for (begin; condition; step) { 조건을 만족할 때 실행할 코드 }
for (let temperature = 20; temperature < 25; temperature++) {
console.log(`${temperature}도 정도면 적당한 온도입니다.`)
}
//결과값: 20도면 적당한 온도입니다. 21도면 적당한 온도입니다. >>> 24도까지
예1) 반복문과 조건문을 같이 활용하여 1 ~ 10까지의 숫자중 3으로 나누었을 때 나머지가 0인 숫자를 구해서 출력해봐요.
for (let number = 1; number <= 10; number++) {
if (number % 3 === 0) {
console.log(`${number}는 3으로 나눠서 떨어지는 숫자입니다.`)
}
}
예2) 1부터 20까지의 숫자중 홀수인 경우는 '숫자 ...은 홀수입니다.'를 짝수인 경우는 '숫자 ...은 짝수입니다'
for (let number = 1; number <= 20; number++) {
if (number % 2 === 0) {
console.log(`숫자 ${number}는 짝수입니다.`)
} else {
console.log(`숫자 ${number}는 홀수입니다.`)
}
}
:변수를 선언하고 해당 변수에 값을 할당했던 것처럼, 함수도 선언하고 그것이 실행할 코드의 집합을 만들어서 저장한다. 이때 함수의 이름은 함수가 하는 일을 따온다.
구조:
function 함수명(매개변수들...) {
이 함수에서 실행할 코드들
return 반환값
}
매개변수 (parameter)는 해당 함수의 바디에 있는 코드에서 사용할 수 있는 일종의 변수인데, 함수 호출시 전달하게 된다. (함수를 실행하기 위해 필요한 input)
사전적인 의미의 매개: 둘 사이에 관계를 맺어줌.
매개변수: 함수의 특정한 성질을 나타내는 함수
// 함수의 선언
function calculateAvg(price1, price2) {
const sum = price1 + price2 // 매개변수인 price1, price2을 변수처럼 활용!
console.log(`두 상품의 합계는 ${sum}입니다.`)
const avg = sum / 2
return avg // 평균가격을 리턴!
}
const 변수명 = 선언한 함수명 (매개변수들...)
앞에서 선언해본 calculateAvg를 호출해서 써보자!
const priceA = 1000
const priceB = 2000
// 함수의 호출
const avg1 = calculateAvg(priceA, priceB)
console.log(`두 상품의 평균은 ${avg1}입니다.`)
const priceC = 3000
const priceD = 4000
// 함수의 호출
const avg2 = calculateAvg(priceC, priceD)
console.log(`두 상품의 평균은 ${avg2}입니다.`)
: 함수 calculateAvg를 호출하면서 변수 priceA와 priceB를 매개변수로 전달
function calculateAvg(price1, price2, price3) {
const avg = (price1 + price2 + price3) / 3
return avg
}
const priceA = 1000
const priceB = 2000
const priceC = 3000
const avg = calculateAvg(priceA, priceB, priceC)
console.log(`평균가격: ${avg}`)
:관련있는 데이터 타입을 한번에 묶어서 한번에 나타낼 수 있는 데이터 타입을 만드는 것
// 노트북1을 것을 표현하기 위한 데이터들
// 변수명을 명시적으로 하는 것 이외에는 이 데이터들의 관계를 표현해줄 수 있는 방법이 없음
const notebook1Name = 'Macbook'
const notebook1Price = 2000000
const notebook1Company = 'Apple'
// 이름, 가격, 제조사와 같은 정보를 다 담을 수 있는 좀 더 큰 범위의 데이터 타입이 있으면 좋지 않을까?
=template = 함수를 정의하고 해당 함수를 필요할 때 사용하는 것처럼 클래스를 미리 정의해놓으면 필요할 때마다 클래스를 사용해서 동일한 형태를 가진 객체를 생성할 수 있음
class Notebook {
constructor(name, price, company) {
this.name = name
this.price = price
this.company = company
}
}
"constructor"(생성자) = 함수와 같은 역할 (객체가 생성될 때 자바스크립트 내부에서 호출되는 함수) constructor는 constructor 그대로 써줘야함. 함수이름처럼 선언하는 건 "Notebook"임
매개변수: name, price, company
this: 자기 자신을 의미하며, 뒤에 붙는 name, price, company는 객체의 property(속성)이 된다.
const 변수명 = new 클래스명(생성자에서 정의한 매개변수들...)
const notebook1 = new Notebook('MacBook', 2000000, 'Apple')
클래스를 활용해 객체를 만들 때는 new 라는 키워드를 먼저 써주고 클래스명을 마치 함수처럼 호출하면서 매개변수값을 전달해주면 된다.
여기서 Notebook은 객체, 'MacBook', 2000000, 'Apple'는 객체의 속성들에 할당된 매개변수값들
객체의 속성 하나하나에 접근해 데이터를 갖고와야 할 때는 this.속성명 을 사용한다!
배열과 생긴게 조금 비슷해보이는데 실제로 배열도 클래스를 활용해 객체를 선언해주는 개념이다.
console.log(notebook) // Notebook { name: 'Macbook', price: 2000000, company: 'Apple' }
console.log(notebook.name) // MacBook
consoel.log(notebook.price) // 2000000
console.log(notebokk.company) // Apple
: 클래스를 통해 속성뿐만 아니라 특정 코드를 실행할 수 있는 함수같은 메소드도 정의할 수 있다. 객체를 생성한 후, 만들어진 객체의 메소드를 호출한다.
```jsx
// 클래스 선언
class Product {
constructor(name, price) {
this.name = name
this.price = price
}
printInfo() {
console.log(`상품명: ${this.name}, 가격: ${this.price}원`)
}
}
// 객체 생성 및 메소드 호출
const notebook = new Product('Apple Macbook', 2000000)
notebook.printInfo() // 상품명: Apple Macbook, 가격: 2000000원
:객체 리터럴을 활용해서 바로 객체를 만들 수도 있다.
구조:
const 변수명 = {
속성명: 데이터,
메소드명: function () { 메소드 호출시 실행할 코드들 }
}
const computer = {
name: 'Apple Macbook',
price: 20000,
printInfo: function () {
console.log(`상품명: ${this.name}, 가격: ${this.price}원`)
}
}
computer.printInfo()
name, price라는 속성과 printInfo 라는 메소드를 가지고 있는 객체를 만들어서 computer라는 변수에 할당하는 코드이다!
class를 만들어두는 것의 핵심은 재사용성!
코드 연습해보기
class Cloth {
constructor(color, size, price) {
this.color = color
this.size = size
this.price = price
}
printinfo() {
console.log(`${this.color}, 사이즈: ${this.size}, 가격: ${this.price}원`)
}
}
const shirts = new Cloth('white','m','50000')
const coat = new Cloth('white','l','300000')
shirts.printinfo()
coat.printinfo()
: 같은 타입의 데이터들을 하나의 변수에 할당하여 관리하기 위해 사용하는 데이터 타입
// 1번째 방법
const arr1 = new Array(1, 2, 3, 4, 5)
// 2번째 방법
const arr2 = [1, 2, 3, 4, 5]
1번 방법: 앞서 클래스 활용하여 객체 만든것과 똑같다. Array라는 클래스를 활용해 객체를 만들어 준 것 (Array는 자바스크립트 내부적으로 갖고있는 고유 클래스이다!)
2번 방법: 배열을 바로 만드는 법. 2번 방법을 많이 사용한다.
const rainbowColors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
console.log(rainbowColors[0]) // o번 인덱스를 통해서 데이터에 접근. red
console.log(rainbowColors[1]) // 1번 인덱스를 통해서 데이터에 접근. orage
console.log(rainbowColors[2]) // 2번 인덱스를 통해서 데이터에 접근. yellow
console.log(rainbowColors[3]) // 3번 인덱스를 통해서 데이터에 접근. green
console.log(rainbowColors[4]) // 4번 인덱스를 통해서 데이터에 접근. blue
console.log(rainbowColors[5]) // 5번 인덱스를 통해서 데이터에 접근. indigo
console.log(rainbowColors[6]) // 6번 인덱스를 통해서 데이터에 접근. violet
const rainbowColors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
console.log(rainbowColors.length) // 7을 출력
console.log(rainbowColors[rainbowColors.length - 1]) // length 를 응용하여 배열의 마지막 요소도 쉽게 찾아서 출력 가능!
: 새로운 요소를 추가하거나 (push) 제거 (pop)하는 기능
배열.push('새로운 요소이름')
배열.pop('제거할 요소이름')
const rainbowColors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
rainbowColors.push('ultraviolet') // 배열의 마지막에 ultarviolet 추가
console.log(rainbowColors) // ultraviolet이 추가된 rainbowColors 출력
rainbowColors.pop() // 배열의 마지막 요소 ultraviolet을 제거
console.log(rainbowColors) // ultraviolet이 제거된 rainbowColors 출력
: 배열의 요소들을 하나씩 꺼내 출력해야 하는 코드를 작성할때 반복문을 활용
정말 많이 쓰이는 반복문!
const rainbowColors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
for (let i = 0; i < rainbowColors.length; i++) {
console.log(rainbowColors[i])
}
자주 쓰이는 간단한 형식의 for문
const rainbowColors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
for (const color of rainbowColors) {
console.log(color)
}
코드 연습해보기!
const pricelist = [1000,2000,3000,4000,5000,6000,7000,8000]
let sum = 0
for (const price in pricelist) {
sum += price
}
const avg = sum / pricelist.length
console.log(`합계: ${sum}, 평균: ${avg}`)
sum이라는 변수가 0으로 시작해서 계속 누적시키고 있는 코드