Javascript
upgrade!
1. 구조 분해 할당 (Destructuring Assignment)
벌써 한국어 부터 어렵다.
- 배열이나 객체의 값을 개별 변수로 쉽게 추출할 수 있게 해준다. (코드가 더 간결해짐)
배열의 구조분해 문법
const arr1 = ['tomato', 'kiwi', 'orange']
console.log(arr1[0])
const tomato = arr1[0]
const [a,b,c] = arr1 // arr1에 있는 애들을 분해해서 여기에 넣음
console.log(tomato)
console.log(a)
const arr2 = ['red', 'orange', 'pink', 'yellow']
const [red, orange, , yellow] = arr2 // pink만 사용하고 싶지 않을 때
console.log(red, orange, yellow)
const [v1, v2, v3, v4, v5] = arr2
console.log(v1, v2, v3, v4, v5)
// const [a1, b1] = arr2 // 맨 끝에 있는 요소들은 생략 가능
// 객체 구조 분해
const person = {
name: "John",
age: 30,
city: "New York"
};
const { name, age } = person;
console.log(name); // "John"
console.log(age); // 30
// 변수의 이름을 객체의 속성 이름과 다르게 지정할 수도 있다.
const { name: personName, age: personAge } = person;
console.log(personName); // "John"
console.log(personAge); // 30
// 함수 매개변수에서의 사용
function printPerson({ name, age }) {
console.log(`${name}은(는) ${age}살입니다.`);
}
printPerson({ name: "Alice", age: 25 }); // "Alice은(는) 25살입니다."
2. 변수 교환
// 변수 교환
let value1 = 'second'
let value2 = 'first'
let temp; // 값을 저장하기 위한 임시 변수
temp = value1 // temp = second가 저장이 된다
value1 = value2 // value1 = first (덮어씌워졌기 때문에), value2 = first
value2=temp // value1 = first, value2 = second
console.log(value1, value2)
value1 = "second";
value2 = "first";
[value2, value1] = [value1, value2];
console.log(value1, value2);
3. 객체의 구조분해 할당 문법
const obj = {
title: '제목',
content: '내용',
num: 10
}
// 값에 접근할 때는 점, 대괄호 접근법 이용
console.log(obj.title)
console.log(obj['title'])
// console.log(title)
const{num, title, content} = obj
console.log(title)
const{n1, t1, c1} = obj
console.log(n1)
const {content: c2, title: t2} =obj
console.log(t2, c2)
let obj1 = {
name: 'june',
height: 162,
friend: null,
married:false
}
let obj2 = {
name: '준',
like:['sleeping, programming'],
greeting:function(){
console.log(`안녕하세요, 저는 ${this.name}이고요...
키는 ${this.height}입니다..`)
}
}
obj2.greeting()
let me = {...obj1, ...obj2}
me.greeting()
console.log(me)
me={
...obj1,
...obj2,
gender:'Female'
}
console.log(me)
const 사람 = {
이름: "김덕구",
나이: 30,
직업: "개발자"
};
const { 이름, 나이 } = 사람;
console.log(이름); // "김덕구"
console.log(나이); // 30
변수 이름 변경
const { 이름: 성명, 나이: 연령 } = 사람;
console.log(성명); // "김덕구"
console.log(연령); // 30
중첩 객체 구조 분해
const 회사 = {
이름: "땡땡 주식회사",
주소: {
시: "서울",
구: "도봉구"
}
};
const { 주소: { 시, 구 } } = 회사;
console.log(시); // "서울"
console.log(구); // "도봉구"
👻 string
const str = 'alliehigh'
let strToArr = [...str]
let strToArr2 = str.split('')
// string to array의 method: split()
// array 새 string의 method: join()
console.log(strToArr)
/* [
'a', 'l', 'l',
'i', 'e', 'h',
'i', 'g', 'h'
] */
4. spread와 rest ...
const arr3 = [1,2,3,4,5]
const arr4 = ['a','b','c']
console.log(arr3)
for(let el of arr3){
console.log(el)
}
console.log(... arr3)
console.log(... arr4)
// arr3, arr4 합치기 -> 1차원 배열로
const arr5 = arr3.concat(arr4)
console.log(arr5)
const arr6 = [...arr3, ...arr4] // [arr3, arr4]2차원 배열
console.log(arr6)
/* [
1, 2, 3, 4,
5, 'a', 'b', 'c'
]
[
1, 2, 3, 4,
5, 'a', 'b', 'c'
]
*/
// 실습 spread연산자 사용하기
console.log('실습 spread연산자 사용하기')
const word1= "abc";
const word2= "xyz";
const spread = [...word1, ...word2];
console.log(spread); // [ 'a', 'b', 'c', 'x', 'y', 'z' ]
5. ...rest
function test(a,b){
console.log(a)
console.log(b)
}
test(1, 2)
test('안녕')
function test2(...val){
console.log(val) // rest로 받아준 결과는 배열임
const [a,b,c, ...rest] = val // [2,3,4,5,6,7,8]
console.log(a)
console.log(b)
console.log(c)
console.log('rest', rest)
}
test2(2,3,4,5,6,7,8)
👻 매개변수 앞에 ... 을 붙여 사용한다.
👻 이를 통해 함수에 전달된 여러 개의 인수를 "배열"로 받을 수 있다.
🎈 rest 와 spread의 차이
- rest는 여러 개의 요소를 "모으는" 역할을 한다.
- spread는 배열이나 객체를 "펼치는" 역할을 한다.
📒 실습
// 매개변수가 몇 개가 들어오든 합해서 반환하는 함수
function addNumber(...rest){
// console.log(rest) // 배열의 합 구하기
let sum=0;
rest.forEach(function(number){
sum+=number;
})
return sum;
}
let sumResult = addNumber(1,2,3,4,5)
console.log('합한 결과 값: ',sumResult) // 15
6. class
- object (객체)를 만드는 방법
- object를 만들 수 있는 "틀"
- 정해진 틀로 같은 규격의 object를 여러 개 만들 수 있음 (재사용에 유리)
- new 키워드를 이용해서 미리 만들어둔 클래스 형태의 오브젝트를 만들 수 있음 (instance화)
- 클래스를 사용하면 비슷한 객체를 쉽게 여러 개 만들 수 있고, 코드를 더 체계적으로 관리 할 수 있다.
- 구성 요소
- 생성자 (constructor):객체를 초기화할 때 사용되는 특별한 메서드
- 속성 (properties): 객체의 특성을 나타내는 변수
- 메서드 (methods): 객체가 수행할 수 있는 동작을 정의하는 함수
class House{
constructor(name, year, window){
this.name = name;
this.year = year;
this.window = window;
}
getAge(){
console.log(`${this.name}은 건축한지 ${2024 - this.year}년 되었어요.`)
}
getWindow(){
console.log(`${this.name}의 창문은 ${this.window}개 입니다.`)
}
}
const house1 = new House('old', 1789, 1)
house1.getAge()
house1.getWindow()
console.log(house1.name)
const house2 = new House('자이', 2015, 10)
house2.getAge()
house2.getWindow()
💫 클래스 상속
- super 키워드: 자식 클래스에서 부모 클래스의 생성자나 매서드를 호출할 때 사용.
// Apartment가 House에 포함되는 관계일 때 상속을 사용한다
class Apartment extends House{
constructor(name, year, window, floor, windowMaker){
super(name, year, window);
this.floor = floor;
this.windowMaker = windowMaker;
}
// 메소드 추가
getAptInfo(){
return `${this.year}년에 지어진 ${this.name}. 총 층수는 ${this.floor}층이고, 창문의 갯수는 ${this.window}개 입니다.`
}
// overriding (메소드 재정의)
// 부모 클래스의 메소드 이름을 똑같이 쓰고 싶지만 내용은 다르게 만들고 싶을 때
getWindow(){
console.log(`${this.name}의 창문은 ${this.window}개 입니다. ${this.windowMaker}에서 만들었습니다.`)
}
}
const apt1 = new Apartment('raemian', 2023, 6, 19, 'KCC')
apt1.getAge()
apt1.getWindow()
console.log(apt1.getAptInfo()) // return이므로 console.log에 넣어야 한다.
console.log(apt1)
📒 실습: Shape class 만들기
console.log('실습 Shape class 만들기')
class Shape{
constructor(width, height){
this.width = width
this.height = height
}
getArea(){
return this.width *this.height;
}
}
let rec1=new Shape(3,4);
console.log(rec1.getArea());
class Rectangel extends Shape{
constructor(width, height){
super (width, height)
}
getArea(){
return this.width * this.height
}
getSqrt(){
return Math.sqrt(this.width**2)+(this.height**2)
}
}
let sq=new Rectangel(3,4);
console.log(sq.getArea());
console.log(sq.getSqrt());
class Triangle extends Shape{
constructor(width, height){
super(width, height)
}
getArea(){
return this.width * this.height /2
}
}
let tri = new Triangle(4,4);
console.log(tri.getArea());
class Circle extends Shape{
constructor(width, height, radius){
super(width, height)
this.radius = radius
}
getArea(){
return Math.floor(Math.PI*(this.radius**2))
}
}
let cir = new Circle(5,5,3);
console.log(cir.getArea());
7. 모듈
- 프로그램의 기능을 독립적인 단위로 분리한 것. 코드를 여러 파일로 나누어 관리 할 수 있게 해주며, 코드의 재사용성과 유지보수성을 높여준다.
💫 ES6 모듈
- 항상 최상위 레벨에서 import/export 된다.
- 비동기 로딩 지원.
// 내보내기 (export)
// math.js
export function add(a, b) {
return a + b;
}
// 가져오기 (import)
// app.js
import { add } from './math.js';
console.log(add(2, 3)); // 5
// 브라우저에서 사용
<script type="module" src="app.js"></script>
// export default
export default function sayHi(){
console.log('하나만 있는 함수 입니다.')
}
// 해당 파일에는 export 할 개체가 하나만 있다고 알려주는 키워드
// Export default 로 내보내진 모듈을 Import 할 때에는 {} 를 사용하지 않고 불러온다.
💫 Common JS
// commonJS 방식 데이터 "따로 따로" 내보내기
exports.sayHi=function(){
console.log('hi')
}
exports.name = "harry"
// 함수 선언문이나 const 변수 등은 내보내기를 따로 할 수 없음
const colors = ['#fff', '#ddd', 'red']
const sayHi = function(){
console.log('hi module1')
}
function sayName(name){
console.log('내 이름은 '+ name)
}
class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
getBornYear(){
return new Date().getFullYear() - this.age
}
}
// commonJS 방식 데이터 한 번에 내보내기
module.exports={
colors, sayHi, sayName
}
더보기
updated JS도 쉽지않다. 특히 export / import 부분에서 node.js가 연결이 잘 안되어서 버벅였더니 블로그로 복기하면서 도움이 많이 되었다.
'웹 취업 부트캠프 일지' 카테고리의 다른 글
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 4주차 (2): EJS, Form (0) | 2024.12.02 |
---|---|
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 4주차 (1): 비동기처리 (0) | 2024.11.24 |
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 3주차 (1): jQuery, 반응형웹 (0) | 2024.11.17 |
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 2주차 (2): Javascript (3) | 2024.11.10 |
[새싹/코딩온] 풀스택 웹 개발자 취업 부트캠프 2주차 (1): Javascript (0) | 2024.11.04 |