[부트캠프] JavaScript 2일차

RedPanda·2022년 7월 20일
0

이전 수업에서 추가적인 내용

  • 변수에 null을 할당하면 null이 메모리를 차지하나, 가비지 컬렉터가 작동할 때 우선적으로 메모리를 해제한다고 한다.

  • 단어 전체 수정 : Ctrl + Shift + L

필기 내용

<표기법>

  • JavaScript에서는 camelCase와 snake_case를 사용한다고 함. 케밥케이스?는 쓴적도, 본적도 거의 없던 것 같다.

<제어문>

  • switch 문에서는 break 구문을 꼭 추가해도록 하자 -> break가 없다면 다음 case로 넘어가 의도하지 않은 결과가 나올 수 있음!

  • switch 문에서의 case는 변수만 할당해야 함. (계산식을 사용할 수 있는 언어가 있으나 JS에서는 사용 불가)

  • switch 문의 논리곱은 연산식이 끝날 때까지 break를 걸지 않는 것.

switch (arg) {
    case "남성":
    case "남자":
    case "남":
      result = "당신의 성별은 남성입니다.";
      break;
    case "여성":
    case "여자":
    case "여":
      reuslt = "당신의 성별은 여성입니다.";
      break;
    default:
      result = "성별을 다시 확인해주세요.";
      break;
  }
  • html에 바로 출력시키는 func : document.write()

<타입 변환>

  • 명시적 타입 변환 VS 암묵적 타입 변환 : 전자는 개발자가 직접 타입을 명시해주는 것을 말하고, 후자는 가상머신이 자동적으로 타입을 지정해주는 것을 말한다.

  • ex) x.toString(); , parseInt(x), Number(x), parseFloat(x)...

  • Number()와 parseInt()의 차이점! : Number 함수는 argument로 받은 값을 그대로 리턴해주어 실수 (ex. 0.1235) 그대로 반환해주는 반면에, parseInt 함수는 argument에서 정수 값만 뽑아 반환해주는 차이가 있다!

  • .toString(arg)은 argument의 값에 따라 진법 계산이 가능하다.

  • 원시 타입은 값의 변환이 불가능하나, 객체 타입은 값의 변환이 가능하다. (알고 있으면 뭐가 좋은지 모르겠음)

<객체와 호이스팅>

  • 객체는 키와 값으로 구성된 Property의 집합이며, 내부의 함수는 메소드라고 한다.

  • 객체 리터럴 : 객체를 선언하여 중괄호 안에 키와 값을 만들어주는 것.

  • 객체의 Property 생성/삭제 방법 : Object.key = value; delete(연산자) Object.key;
    (객체의 키가 객체(참조)타입이 아니라면 Object[key]로 접근해야 한다.)

  • delete는 코드의 최상단에 적용됨. (호이스팅)

  • 기명 함수 표현식 : 함수 생성 시에 이름을 만들어주는 것.

  • function은 호이스팅이 가능하나, 변수에 function을 넣는 익명 함수 표현식을 사용한 경우에는 호이스팅이 불가능하다.

  • 호이스팅은 컴파일 과정에서 변수나 값을 선언하거나 초기화하는 것을 말함. var나 function 키워드는 실행 초기에 호이스팅으로 인해 실행 순서의 최상단에서 선언 또는 초기화됨. (let과 const도 선언되긴 하나, 초기화되지 않아 호이스팅이라 보기 어렵다는 의견이 있음. 참고자료 : 호이스팅에 대한 오해와 진실 링크텍스트)

  • 순수 함수와 비순수 함수 : 객체가 들어온다면 비순수 함수(파괴적), 원시타입의 값이 들어온다면 순수함수(비파괴적) -> 함수형 프로그래밍의 기초!!!

  • 생성자 함수 내의 일반 변수는 private하므로 함수 내에서 접근하는 것이 원칙.(Object.value)

  • 객체 리터럴 생성 방식은 여러 개의 객체를 생성하는 면에서 비효율적. 따라서!! 생성자 함수로 객체 생성을 하는 것이 다수의 객체를 생성하는 효율적인 방법이라 할 수 있다.

function Person(name, gender){
  this.name = name;
  this.gender = gender;
  this.sayHello = function(){
    return "hi my name is " + this.name; 
  };
}
let person1 = new Person("Lee", "male"); 
let person2 = new Person("Kim", "female");
// new 키워드가 없다면 this가 가리키는 것이 없으므로 undefined가 되는듯

여담

오늘은 제어, 반복, 객체, 형변환 등등을 배웠다.

우선, 호이스팅이라는 기능에 대해 궁금증이 생겼고 열심히 찾아보았다. 모든 변수가 전역변수처럼 미리 초기화되어 버리는 것에 대한 우려는 다양한 언어에서 겪어온 이슈이다.
간혹 초기화를 해주지 않아 오류가 발생하는 경우가 종종 있었다. 그래서 이것이 필요한가에 대해 찾아보았다.

내 주관적인 결론은 JavaScript의 일종의 시행착오라고 생각한다. 초기에 불완전한 언어로 출시되어 점점 개선이 되었으므로 var와 같은 불완전한 것들이 아직 남아있다. 호이스팅 역시 JS의 개발 역사에서 겪은 시행착오 중 하나라고 생각한다. 이를 간과하기보단 JS를 이해하는 도구로 사용되는 것이 중요하다고 생각한다.

profile
끄적끄적 코딩일기

0개의 댓글