✨ 변수란?
값을 저장할 수 있는 공간
메모리 공간을 식별하기 위해 붙인 이름
✨ 예시
let age = 10
여기서 10이라는 값이 변수에 할당된다.
✨ 변수와 메모리
메모리는 데이터를 저장할 수 있는 메모리 셀을 가지고 있다.
각 셀은 주소를 가지는데 이를 통해 메모리 공간의 위치를 알 수 있다.
위의 예시처럼 let age = 10을 작성한다면,
하나의 메모리 셀 안에 값인 10이 저장된다.
만약 우리가 저 값을 꺼내쓰고 싶다면 해당 메모리 주소를 통해 불러내면 된다.
그런데 이 방법은 치명적인 오류를 발생시킬 수도 있고,
매번 긴 주소를 외우고 쳐야하는 번거로움도 있다.
따라서 변수를 통해 해당 주소를 가리키게 해 보다 쉽고 안전하게 값에 접근할 수 있는 것이다.
값 10이 저장된 0x00000F2이란 주소를 age라는 변수를 통해 접근할 수 있다.
✨ 원시 타입과 객체 타입의 메모리 차이
원시 타입의 경우 변수는 각 주소를 가리키고 값이 메모리 셀에 저장된다.
let a = 10;
let b = a;
b = 20;
console.log(a); // 10
console.log(b); // 20
따라서 a라는 변수에 10을 넣고, b라는 변수를 a로 지정하면
변수 a의 값인 10이 b에 할당된다.
여기서 b의 값을 20으로 바꾼다면 b의 메모리셀 안에 저장된 값만 바뀌므로
a는 여전히 10이고, b는 20으로 변경됨을 알 수 있다.
반면, 객체 타입의 경우 이야기가 달라진다.
객체 타입의 경우 각 메모리 셀에 값이 아닌 참조 값 즉, 메모리 주소가 들어간다.
let person = {
name: '홍길동',
age: 10,
};
let person2 = person;
person2.name = '제우스';
console.log(person.name); // 제우스
console.log(person2.name); // 제우스
위 코드를 예시로 보면 person2는 person의 값이 아닌 참조 값 (메모리 주소)이 복사되어 할당된다.
따라서 person2를 수정하면 person의 내용도 동일하게 변경된다.
✨ 변수 이름짓기
변수 이름 짓기는 중요하다.
이름을 통해 각 변수가 어떠한 값을 담고 있는지 명확해야 좋다.
1. 예약어는 사용할 수 없다.
예약어는 프로그래밍 언어에서 사용되거나 사용할 예정인 단어를 말한다.
ex) if, new, true, try...
2. 라틴 문자 위주로 사용하는 것이 좋다.
ex) a-z, A-Z, 0-9
3. 숫자로 시작할 수 없다.
4. 대소문자를 구별한다.
ex) PERSONNAME / personname / personName -> 모두 개별의 변수이다.
5. 특수문자를 사용할 수 없다.
다만 _ 와 $는 예외로 사용할 수 있다.
6. 너무 광범위하거나 애매한 표현은 지양한다. 의미 있고 구체적으로 작성하자.
ex) let data = 1 -> let age = 1
ex) person1, person2, person3
✨ 데이터 타입
데이터 타입은 크게 원시(primitive) 타입과 객체(object) 타입으로 나눠볼 수 있다.
단일 데이터인 원시 타입에는 number, string, boolean, null, undefined, symbol 이 있고,
복합 데이터인 객체 타입에는 object, function 이 있다.
✨ 숫자 타입
다양한 숫자 타입을 제공하는 다른 언어와 달리 JavaScript는 하나의 숫자 타입만 존재한다.
let integer = 1; // 정수
let negative = -1;
let double = 1.1; // 실수
let binary = 0b1111011; // 2진수
let octal = 0o173; // 8진수
let hex = 0x7b; // 16진수
숫자 타입은 특별한 값도 표현할 수 있다.
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(10 / 'hello'); // NaN (Not a number)
✨ 문자열 타입
문자열은 텍스트 데이터를 입력할 때 사용한다.
작은따옴표(' '), 큰 따옴표(" "), 백틱(``)으로 텍스트를 감싸면서 입력한다.
let string = '안녕하세요';
string = `안녕하세요`;
string = "안녕하세요";
보통 작은따옴표('') 안에 쓰는 것이 일반적이다.
만약 작은따옴표도 같이 출력하고 싶다면 어떻게 작성해야 할까?
let greeting = "'안녕!'";
console.log(greeting); // '안녕!'
큰 따옴표 안에 넣어주면 작은 따옴표도 같이 출력된다.
일반적인 문자열 안에서 개행을 하려면 어떻게 작성해야 할까?
이스케이프 시퀀스를 사용하면 손쉽게 할 수 있다.
let greeting ='안녕~~\n반가워';
console.log(greeting);
// 안녕~~
// 반가워
이스케이프 시퀀스에는 여러 종류가 있는데 가장 많이 쓰이는 건 개행 '\n'과 탭 '\t'이다.
문자열은 '+'를 통해 연결할 수 있다.
let id = '홍길동';
let greeting = '안녕, ' + id + ' 즐거운 하루 보내요';
console.log(greeting); //안녕, 홍길동 즐거운 하루 보내요
템플릿 리터럴(`${}`)을 사용하면 +를 사용하지 않고도 더 간단하게 삽입할 수 있다.
let id = '홍길동';
greeting = `안녕, ${id} 즐거운 하루 보내요!`;
console.log(greeting); // 안녕, 홍길동 즐거운 하루 보내요!
✨ 불리언 타입
논리적 참과 거짓을 나타내는 true와 false를 의미한다.
is- / should-/ can- 으로 시작하는 네이밍은 boolean 값을 반환하기를 기대하게 된다.
isValidate = true;
isChecked = false;
✨ undefined와 null 타입
undefined와 null은 비슷한 듯 다른 개념이다.
undefined는 '값이 정의되지 않은' 상태를 말하고, null은 '없다'로 이해하면 된다.
보통 변수를 선언했지만 값을 입력하지 않은 경우, 그 변수는 undefined로 출력된다.
let hello;
console.log(hello); // undefined
✨ object 타입
객체는 중괄호({})안에 묶어서 사용한다.
보통 key와 name의 형태로 작성한다.
{ key: value }
let lemon = {
name: 'lemon',
color: 'yellow',
display: '🍋',
};
객체 안에 있는 값에 접근하기 위해서는 '객체 이름. key'를 사용하면 된다.
let lemon = {
name: 'lemon',
color: 'yellow',
display: '🍋',
};
console.log(lemon.display) // 🍋
댓글