값 재할당 가능!
값 재할당 불가능!
숫자로 이루어진 데이터
문자로 이루어진 데이터 (''),("")안에 입력해야함!
(숫자를 문자처럼 다루고 싶을때도 방법이 같음)
참과 거짓을 나타내는 true/false 를 표현하는 데이터
비어있는 값을 의미
변수를 지정만하고 값을 할당하지 않음!
null과 undefined의 차이점!
let name1 = null
console.log(name) // null을 출력
let name2
console.log(name2) // undefined를 출력
+를 이용하여 (문자열 + 문자열) / (문자열 + 숫자)를 이어붙일 수 있음
사칙연산(+, -, *, /)를 포함하여 (// 나머지 연산), (** 거듭제곱) 활용가능
자기 자신의 값을 증가,감소 시키는 연산자(++,--) 변수앞인지 뒤인지 입력 위치도 중요!
let count = 1
const preIncrement = ++count
let count = 1
const postIncrement = count++
둘 다 count = count + 1 이지만,
위의 경우 먼저 자기 자신에게 1을 더해서 재 할당 한 후 이를 preIncrement에 할당 했다는 의미!
아래의 경우 preIncrement에 자기 자신의 값을 할당 한 후에 1을 더해서 재할당 했다는 의미!
값을 어떤 변수에 할당한다 라는 말과 동일한 의미
(= , +=, -=)도 사용할 수 있음
const A = 10 const B = 5 let C = 0 C += A // C = C + A 와 동일 C += B // C = C + B 와 동일 C -= A // C = C - A 와 동일 console.log(C) // 5가 입력됨 (0 + 10) > (10 + 5) > (15 - 10)
(< , <=, >, >=)와 같이 비교하여 boolean(true,false)값을 얻음
||(or), &&(and), !(not)과 같은 연산자 결과로 boolean(true,false)값을 얻음
|| 는 연산 대상 중 하나만 true 여도 true 리턴
&& 는 연산 대상이 모두 true 여야만 true 리턴
! 는 true를 false로, flase를 true로 바꿔서 리턴
두 값이 일치하는지 비교(==, ===) boolean(true,false)값을 얻음
대소문자나 띄워쓰기도 비교대상임!
(===)비교하는 두 값의 데이터타입과 값 자체가 정확히 일치해야만 true를 리턴
(==)교하는 두 값의 데이터타입이 일치하지 않을 때 해당 값의 데이터타입을 자동으로 변환해주는 자바스크립트만의 특성이 있음
console.log(1 === "1") // false를 출력
console.log(1 == "1" // true를 출력
조건을 만족했을 때만 코드 실행!
조건의 결과값은 boolean(true,false)값을 얻음
구문의 body부분은 들여쓰기를 이용해 가독성 높이기(필수는 아니지만 중요)
const A = 20 const B = 17 if (A < 25) { console.log("구매하기") // 조건에 만족하므로 실행됨 } if (B <= 15) { console.log("구매하기") // 조건에 만족하므로 실행됨 }
if문의 조건을 만족하지 않았을 때 실행
const A = 20 const B = 17 if (A < 15) { console.log("구매합니다") } else { console.log("구매하지 않겠습니다") // if 조건에 만족하지 않으므로 else 실행됨 }
if와 else 이외의 조건도 추가 가능!
'else if' 는 if처럼 조건을 작성하면 됨!
const A = 20 const B = 17 if (A < 15) { console.log("구매합니다") } else if (A <= 20){ console.log("고민해 보겠습니다") // if에 부합하지 않고 else if에 부합한 값이므로 else if 출력 } else { console.log("구매하지 않겠습니다") }
특정 코드를 반복해서 실행하며 조건을 설정해서 원하는 만큼 반복 가능
let temperature = 20 while (temperature < 25) { console.log(`${temperature}도 정도면 적당한 온도입니다.`) temperature++ // 증감연산자로 온도변화 }
true를 리턴하게 되면 반복해서 작동하고 false를 리턴하게 되면 빠져나옴
반복문의 조건이 계속해서 true 를 리턴한다면 무한루프에 빠져서 프로그램이 끝나지 않음
(ctrl + c) 를 눌러서 중단 시킬 수 있음
while 과 같은 반복문, 좀 더 명시적으로 반복문의 조건을 표현
for (let temperature = 20; temperature < 25; temperature++) { console.log(`${temperature}도 정도면 적당한 온도입니다.`) }
순서를 보면
1. begin -> temperature 변수를 선언하고 값을 할당
2. condition -> temperature가 25보다 작으면 true(계속 실행), 그렇지 않으면 false(종료)
3. 조건을 만족할 때 실행할 코드 -> 실행
4. step -> temperature에 1을 더한 값을 재할당하고 2번 과정부터 반복
반복문과 조건문은 코딩의 핵심!!
for (let number = 1; number <= 10; number++) { if (number % 3 === 0) { console.log(`${number}는 3으로 나눠서 떨어지는 숫자입니다.`) } }
for (let number = 1; number <= 20; number++) { if (number % 2 === 0) { console.log(`숫자 ${number}는 짝수입니다.`) } else { console.log(`숫자 ${number}는 홀수입니다.`) } }
여러 예시들을 통해서 학습, 복습해야 하는 부분!
반복되는 특정 작업을 수행해야 한다면 그 코드 자체를 어딘가에 만들어서 저장해놓고 사용
함수는 특정 작업을 수행하는 코드의 집합
function 함수명(매개변수들...) { '이 함수에서 실행할 코드들' return 반환값 }
function calculateAvg(price1, price2) { const sum = price1 + price2 // 매개변수인 price1, price2을 변수처럼 활용! console.log(`두 상품의 합계는 ${sum}입니다.`) const avg = sum / 2 return avg // 평균가격을 리턴! }
const 변수명 = 선언한 함수명(매개변수들 입력)
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}입니다.`)
물리적으로 존재하거나 추상적으로 생각할 수 있는 것중에서 자신의 속성을 갖고 있고 다른 것과 식별 가능한 것
한마디로 자신만의 속성을 갖고 다른 것과 식별이 가능 한 것 (구체적인 표현을 위해 좀 더 공부가 필요)
객체를 만들때 마치 설계도처럼 사용하는 것이 클래스
클래스는 템플릿이고 객체는 이를 구체화한 것
class Notebook { constructor(name, price, company) { this.name = name this.price = price this.company = company } }
const 변수명 = new 클래스명(생성자에서 정의한 매개변수들...)
const notebook1 = new Notebook('MacBook', 2000000, 'Apple')
-> 클래스를 활용해 객체를 만들 때는 new 라는 키워드를 먼저 써주고 클래스명을 마치 함수처럼 호출하면서 매개변수값을 전달
-> 해당 클래스의 생성자가 호출되면서 객체가 생성되고 객체의 속성들에 매개변수값들이 할당
-> 만들어진 객체는 변수에 할당
-> 변수에 할당하고 나면 해당 변수를 활용해 객체에 접근가능
(객체의 속성 각각에 접근해야 할 때는 '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
클래스에는 데이터(값)를 나타내는 속성 뿐만 아니라 함수와 같이 특정 코드를 실행할 수 있는 메소드도 정의할 수 있음. 객체를 생성한 후, 만들어진 객체의 메소드를 호출
// 클래스 선언 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원
js에서는 객체 리터럴을 활용해서 바로 객체를 만들 수 있음
객체 리터럴은 클래스와 같은 템플릿 없이 빠르게 객체를 만들 수 있는 방법
2개 이상의 속성과 메소드가 있을 때는 쉼표로 구별, 줄바꿈으로 가독성 개선하기
const 변수명 = {
속성명: 데이터,
메소드명: function () { 메소드 호출시 실행할 코드들 }
}
const computer = { name: 'Apple Macbook', price: 20000, printInfo: function () { console.log(`상품명: ${this.name}, 가격: ${this.price}원`) } } computer.printInfo()
name, price라는 속성과 printInfo 라는 메소드를 가지고 있는 객체를 만들어서 computer라는 변수에 할당하는 코드
객체의 printInfo 메소드를 바로 호출
결과적으로는 클래스를 활용해 객체를 만든 것과 동일
but 재사용성 때문에 활용 -> 한번 클래스를 만들어두면 같은 속성과 메소드를 갖고 있는 객체를 훨씬 더 간결한 코드로 작성 가능
ex)의류 쇼핑몰로 예시
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('navy', 'L', '200000' shrits.printInfo() coat.printInfo()
같은 형식의 많은 데이터를 순서대로 저장하고자 할 때 사용하는 것이 배열
같은 타입의 데이터들을 하나의 변수에 할당하여 관리하기 위해 사용하는 데이터 타입
숫자 1, 2, 3, 4, 5로 이루어진 배열을 선언하는 두 가지 방법
// 1번째 방법 const arr1 = new Array(1, 2, 3, 4, 5) // 2번째 방법 const arr2 = [1, 2, 3, 4, 5]
1번 방법
Array라는 클래스를 활용해서 객체를 만들었다고 생각하면 되며, Array라는 클래스를 선언한 적은 없지만 js 내부 기능이니 바로 사용가능
2번 방법
배열을 바로 만드는 방법. 대괄호 안에 배열로 저장할 데이터를 나열
배열을 만들때는 1번째보다는 2번째 방법을 많이 사용
배열에 있는 데이터 각각을 요소(element)라고 부름
배열에서는 인덱스(index)가 객체의 속성명과 같은 역할
인덱스는 배열 안의 데이터들이 자리잡은 순서 (인덱스는 0부터 시작함!!)
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
length의 속성을 이용하여 확인
const rainbowColors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'] console.log(rainbowColors.length) // 7을 출력 console.log(rainbowColors[rainbowColors.length - 1]) // length 를 응용하여 배열의 마지막 요소도 쉽게 찾아서 출력 가능! 0번째부터 시작하니 마지막은 6번째 ```
배열을 선언하고 난 이후 새로운 요소를 더하거나 빼는 방법
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) }
배열에서 요소들을 차례대로 하나씩 찾아 color라는 변수에 할당
자동으로 배열의 끝까지 반복문이 실행
객체를 활용하기 위해 구체적이고 확실한 개념 정립이 필요하고, 반복문과 배열을 많이 사용해보고 익숙해지는 것이 필요!!
틈틈이 알고리즘 공부하기