서문

코드스테이츠 PRE과정을 시작한 지도 벌써 10주가 흘렀다. 시간이 참 빠르기도 하다.
PRE과정 전 6개월을 배웠으니 수월하게 시작할 수 있을 거라 생각했는데,
예상과 다르게 진도는 빨랐고 내 공부량은 간신히 따라갈 정도여서 좀 벅찼었다.

배운 것을 정리하는 블로깅은 원래부터 코드스테이츠 PRE과정의 수료조건 중 하나였다.
그러나 나는 글재주가 없고 부족한 글을 남들에게 공개할 용기도 없어서 '시간날 때 하자'며 미루고 미뤄 왔다.

하지만 결국 수료 신청 마감일이 가까워졌고, 난 이제 다급함을 무기로 써서라도 내 뇌를 채찍질해서 블로깅을 해야 할 필요성을 느꼈다.

블로깅의 취지에 맞게 코드스테이츠에서 내가 배운 것들을 간단하게 총정리하고, 그러면서 느낀 점들을 쓸 생각이다.

마인드맵

mindmap_codestates_1.svg

내가 코드스테이츠에서 배운 것들을 정리한 마인드맵이다. 객체를 제외하곤 다 내가 자바스크립트에게 시킬 수 있는 행동을 기준으로 정리하였다.

객체

객체는 MDN에 따르면 관련된 데이터와 함수의 집합이다.
이 정의는 자바스크립트에서의 정의를 말하는 것이다. 나는 예전에 '객체지향의 사실과 오해'라는 책을 읽은 적이 있어서, 객체는 다른 대상과 식별 가능한 속성을 지닌 대상을 말하는 것이 아닌가? 라고 생각했는데, 구글링을 좀 하고 나서 컴퓨터 과학에서 말하는 객체객체지향 프로그래밍에서 말하는 객체, 자바스크립트 등 일반적 언어에서 다루는 데이터 타입으로써의 객체가 모두 다르다는 것을 알게 되었다.

위의 마인드맵에는 객체와 객체(Object)가 있는데, 전자는 커다란 의미에서의 대상을 말하는 것이고 후자는 데이터 타입을 말하는 것이다.

변수

변수는 이름이 지정된, 상황에 따라 변할 수 있는 값이다.
변수는 선언할당을 통해 이름과 값을 지정할 수 있다.
let name = "value"에서
let name선언, 즉 이름을 지정해 주는 행위이다.
그리고 name = "value할당, 즉 값을 지정해 주는 행위이다.
할당은 여러 번 할 수 있는데, 이는 변수의 값은 여러 번 지정할 수 있는, 즉 변경할 수 있는 것이기 때문이다.

객체(Object)

객체는 으로 이루어져 있다.

배열

배열은 순서로 분류해 놓은 값이다.
이 순서를 인덱스라고 부른다.
인덱스는 특이하게 1이 아닌 0부터 번호를 매기는데, 이를 Zero-based numbering이라고 부른다.

위에서 객체와 배열을 설명했는데, 이 둘엔 주목할 만한 차이점이 있다.
객체는 길이와 순서가 없지만, 배열은 길이와 순서가 있다.
이 차이점 때문에, 객체에서 값을 삭제하면 키도 같이 삭제되지만
배열에서 값을 삭제하면 삭제된 자리는 빈 자리로 남는다.
배열의 길이와 순서를 유지하기 위함인 듯하다.

함수

함수는 컴퓨터에게 일을 시키기 위한 지시사항의 묶음이다.
함수는 입력->함수->출력의 과정을 거쳐 지시를 수행한다.
함수는 두 가지 방식으로 선언할 수 있다.

  1. 함수 선언식 function name(parameter) {}
  2. 함수 표현식 let name = function(parameter) {}

이 두 선언 방식은 실제 기능에도 차이가 있는데,
함수 표현식은 선언식과 달리 호이스팅의 영향을 받지 않는다.
즉, 선언(let name)하고서 할당(name=f())을 코드상으로 나중에 하면,
선언한 name은 선언시에는 변수로 취급되고 할당할 때 비로소 함수로 취급된다.

선언식과 표현식을 잘 구분해서 사용하면 스코프 오류를 해결할 수 있다.

화살표 함수

function name(parameter) {
return parameter+"단위"
}
=
let name = (parameter) => parameter+"단위"

이 기능도 간단한 function의 선언을 한 줄로 줄일 수 있기 때문에 코드를 짧게 만드는 데 도움을 준다.

연산

비교 연산자

비교 연산자는 ===, !==뿐만 아니라 ==, !=도 있는데,
python이나 java와 달리 javascript에선 이 두 가지를 잘 쓰지 않는다.
javascript의 ==, !=는 타입을 엄격하게 비교하지 않아 가끔씩 원하던 결과에 반하는 결과가 생기고, 이러한 불일치는 코드에 오류를 불러올 수 있기 때문에 거의 쓰지 않는다고 한다.

삼항 연산자

if (조건) {
조건문1
} else {
조건문2
{
=
조건 : 조건문1 ? 조건문2

간단한 if문의 크기를 5줄에서 1줄로 줄일 수 있어서 코드가 짧아지는 데에 지대한 공헌을 한다.
짧은 코드가 꼭 좋은 코드는 아니지만, 간단한 코드의 경우 짧을수록 좋다고 생각한다.