01_Introduction

 

it('Matcher .equal 의 사용법을 학습.', function () {
    let expectedValue = 2;
    expect(1 + 1).to.equal(expectedValue);
  });

  it('Matcher .equal의 사용법을 학습.', function () {
    let actualValue = (1 + 1).toString();
    expect(actualValue).to.equal('2'); 
  });

 

02_Types-part1

 

it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측.', function () {
    expect(1 + '1').to.equal('11');
  });

  it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측.', function () {
    expect(123 - '1').to.equal(122);
  });

  it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측.', function () {
    expect(1 + true).to.equal(2);
  });

  it('expect의 전달인자로 들어간 표현식의 평가(evaluation) 결과를 예측.', function () {
    expect('1' + true).to.equal('1true');
  });

잘못된 값들이라는 것만 인지하고 다 외울 필요는 없다.

 

03_LetConst

it("'const'로 선언된 변수에는 재할당(reassignment)이 금지됨.", function () {
    const constNum = 0;
    expect(constNum).to.equal(0);

    const constString = 'I am a const';
    expect(constString).to.equal('I am a const');
  });

  it("'const'로 선언된 배열의 경우 새로운 요소를 추가하거나 삭제할 수 있다.", function () {
    const arr = [];
    const toBePushed = 42;
    arr.push(toBePushed);
    expect(arr[0]).to.equal(42);
  });

  it("'const'로 선언된 객체의 경우, 속성을 추가하거나 삭제할 수 있다.", function () {
    const obj = { x: 1 };
    expect(obj.x).to.equal(1);
    delete obj.x;
    expect(obj.x).to.equal(undefined);
    obj.occupation = 'SW Engineer';
    expect(obj['occupation']).to.equal('SW Engineer');
  });

 

04_Scope

it('lexical scope와 closure에 대해 다시 확인.', function () {
    let age = 27;
    let name = 'a';
    let height = 179;

    function outerFn() {
      let age = 24;
      name = 'b';
      let height = 178;

      function innerFn() {
        age = 26;
        let name = 'c';
        return height;
      }

      innerFn();

      expect(age).to.equal(26);
      expect(name).to.equal('b');

      return innerFn;
    }

    const innerFn = outerFn();

    expect(age).to.equal(27);
    expect(name).to.equal('b');
    expect(innerFn()).to.equal(178);
  });

 

05_ArrowFunction

  it('화살표 함수를 이용하여 클로저를 표현', function () {
    const adder = x => {
      return y => {
        return x + y
      }
    }

    expect(adder(50)(10)).to.eql(60)

    const subtractor = x => y => {
      return x - y
    }

    expect(subtractor(50)(10)).to.eql(40)

    const htmlMaker = tag => textContent => `<${tag}>${textContent}</${tag}>`
    expect(htmlMaker('div')('code states')).to.eql('<div>code states</div>');

    const liMaker = htmlMaker('li')
    expect(liMaker('1st item')).to.eql('<li>1st item</li>');
    expect(liMaker('2nd item')).to.eql('<li>2nd item</li>')
  })

 

06_Types-part2

it('참조 자료형을 변수에 할당할 경우, 데이터의 주소가 저장됨.', function () {
    const overTwenty = ['a', 'b', 'c']; 
    let allowedToDrink = overTwenty

    overTwenty.push('d');
    expect(allowedToDrink).to.deep.equal(['a', 'b', 'c', 'd']);
    overTwenty[1] = 'e';
    expect(allowedToDrink[1]).to.deep.equal('e');

    const ages = [22, 23, 27];
    allowedToDrink = ages;
    expect(allowedToDrink === ages).to.equal(true);
    expect(allowedToDrink === [22, 23, 27]).to.equal(false);

    const nums1 = [1, 2, 3];
    const nums2 = [1, 2, 3];
    expect(nums1 === nums2).to.equal(false);
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ//
    const person = {
      son: {
        age: 9,
      },
    };

    const boy = person.son;
    boy.age = 20;
    expect(person.son.age).to.equal(20);
    expect(person.son === boy).to.equal(true);
    expect(person.son === { age: 9 }).to.equal(false);
    expect(person.son === { age: 20 }).to.equal(false);

 

07_Array

it('Array를 함수의 전달인자로 전달할 경우, reference가 전달됨.', function () {
    const arr = ['zero', 'one', 'two', 'three', 'four', 'five'];

    function passedByReference(refArr) {
      refArr[1] = 'changed in function';
    passedByReference(arr);
 
    expect(arr[1]).to.equal('changed in function');

    const assignedArr = arr;
    assignedArr[5] = 'changed in assignedArr';
    expect(arr[5]).to.equal('changed in assignedArr');

    const copiedArr = arr.slice();
    copiedArr[3] = 'changed in copiedArr';
    expect(arr[3]).to.equal('three');
  });

  it('Array 메소드 shift와 unshift를 확인.', function () {
    const arr = [1, 2];

    arr.unshift(3);
    expect(arr).to.deep.equal([3, 1, 2]);

    const shiftedValue = arr.shift();
    expect(shiftedValue).to.deep.equal(3);
    expect(arr).to.deep.equal([1, 2]);
  });

 

08_Object

it('Object를 함수의 전달인자로 전달할 경우, reference가 전달됨.', function () {
    const obj = {
      mastermind: 'Joker',
      henchwoman: 'Harley',
      relations: ['Anarky', 'Duela Dent', 'Lucy'],
      twins: {
        'Jared Leto': 'Suicide Squad',
        'Joaquin Phoenix': 'Joker',
        'Heath Ledger': 'The Dark Knight',
        'Jack Nicholson': 'Tim Burton Batman',
      },
    };

    function passedByReference(refObj) {
      refObj.henchwoman = 'Adam West';
    }
    passedByReference(obj);
    expect(obj.henchwoman).to.equal('Adam West');

    const assignedObj = obj;
    assignedObj['relations'] = [1, 2, 3];
    expect(obj['relations']).to.deep.equal([1, 2, 3]);

    const copiedObj = Object.assign({}, obj);
    copiedObj.mastermind = 'James Wood';
    expect(obj.mastermind).to.equal('Joker');

    obj.henchwoman = 'Harley';
    expect(copiedObj.henchwoman).to.equal('Adam West');

    delete obj.twins['Jared Leto'];
    expect('Jared Leto' in copiedObj.twins).to.equal(false);

    /*
 
    이와 관련하여 얕은 복사(shallow copy)와 깊은 복사(deep copy)에 대해
 
    */
  });

 

09_SpreadSyntax

 

빈 배열에 전개 문법을 사용할 경우, 아무것도 전달되지 않음

여러 개의 배열을 이어 붙일 수 있음

여러 개의 개체를 병합할 수 있음

Rest Parameter는 함수의 전달인자를 배열로 다룰 수 있게 함

Rest Parameter 전달인자의 수가 정해져 있지 않은 경우에도 유용하게 사용 가능

it('Rest Parameter는 전달인자의 일부에만 적용할 수도 있습니다.', function () {
    // rest parameter는 항상 배열입니다.
    function getAllParams(required1, required2, ...args) {
      return [required1, required2, args];
    }
    expect(getAllParams(123)).to.deep.equal([123, undefined, []]);

    function makePizza(dough, name, ...toppings) {
      const order = `You ordered ${name} pizza with ${dough} dough and ${toppings.length} extra toppings!`;
      return order;
    }
    expect(makePizza('original')).to.equal(`You ordered undefined pizza with original dough and 0 extra toppings!`);
    expect(makePizza('thin', 'pepperoni')).to.equal(`You ordered pepperoni pizza with thin dough and 0 extra toppings!`);
    expect(makePizza('napoli', 'meat', 'extra cheese', 'onion', 'bacon')).to.equal(`You ordered meat pizza with napoli dough and 3 extra toppings!`);
  });
});

 

10_Destructuring

it('rest/spread 문법을 객체 분해에 적용할 수 있다', () => {
    const user = {
      name: '김코딩',
      company: {
        name: 'Code States',
        department: 'Development',
        role: {
          name: 'Software Engineer'
        }
      },
      age: 35
    }

    const changedUser = {
      ...user,
      name: '박해커',
      age: 20
    }

    const overwriteChanges = {
      name: '박해커',
      age: 20,
      ...user
    }

    const changedDepartment = {
      ...user,
      company: {
        ...user.company,
        department: 'Marketing'
      }
    }

    expect(changedUser).to.eql({
      name: '박해커',
      company: {
        name: 'Code States',
        department: 'Development',
        role: {
          name: 'Software Engineer'
        }
      },
      age: 20
    }
     
    )

    expect(overwriteChanges).to.eql(
      {
        name: '김코딩',
        company: {
          name: 'Code States',
          department: 'Development',
          role: {
            name: 'Software Engineer'
          }
        },
        age: 35
      }
    )

    expect(changedDepartment).to.eql(
      {
        name: '김코딩',
        company: {
          name: 'Code States',
          department: 'Marketing',
          role: {
            name: 'Software Engineer'
          }
        },
        age: 35
      }
    )
  })

현재 본인은 데스크탑과 랩탑이 모두 있으나 사용하기 편한 데스크탑을 주로 사용중이다.

 

앞으로 개발을 하는데 있어서 mac을 사용하면 유지보수나 개발에 편리하다고 들어서 고민을 하다

 

우선 학원의 lental service를 신청하고 기다리고 있었다.

 

오늘 한 것은  우분투 설치 및 CLI를 배우고 nvm과 npm에 대해 기초적으로 배웠다.

 

window와 mac은 각각 설치 방법이 달라 mac을 받게 된다면 다시 설치방법을 보고 공부해야 할 것이다.

 


CLI(Command-Line Interface) 명령어

 

 

pwd : 현재 위치 확인하기

 

mkdir : 새로운 폴더 생성하기

 

ls : 특정 폴더에 포함된 파일이나 폴더 확인하기

 

explorer.exe . : WSL에서 현재 위치를 GUI로 실행하기

 

cd: 폴더에 진입하기

 

touch: 파일 생성하기

 

rm: 폴더나 파일 삭제하기 (파일을 지우려면 뒤에 -rf를 추가적으로 붙인다.)

 

mv: 폴더나 파일의 이름을 변경, 또는 폴더나 파일의 위치 옮기기

 

cp: 폴더나 파일을 복사하기


Git 환경설정

 

사용자정보

$ git config --global user.name "나의 사용자 이름"
$ git config --global user.email "내 이메일 주소"

이 명령어들을 우분투나 VsCode같은 곳에 입력하면 된다.

 

SSH 키 생성

 

ssh-keygen

ssh-keygen 명령어는 경로 ~/.ssh./ 에 두 파일 id_rsa와 id_rsa.pub를 생성

이 두 파일은 ssh 키 페어라고 하며, 이 중 id_rsa.pub는 누구에게나 공개해도 되는 공개키(Public Key)라고 한다.

그리고 id_rsa는 공개되면 안 되고 나만 보관하고 있어야 하는 키라고 하여

개인키(Private Key) 또는 비밀키(Secret Key)라고 한다.

 

SSH 키 페어를 생성하였으므로, 생성된 키 페어 중 공개키를 복사하여 gitub에 등록

cat ~/.ssh/id_rsa.pub

1. Github로 이동하여 로그인

2. 우측 상단의 프로필 이미지 클릭 후 Settings에 진

3. 왼쪽의 내비게이션에서 SSH and GPG keys를 선택

4. 나타난 화면에서 SSH Keys 옆의 초록색 버튼 New SSH Key를 클릭

5. 등록한 SSH 공개키를 구분할 수 있도록 사용자 임의로 Title을 작성,

Key에는 복사해 둔 공개키를 붙여 넣고, Add SSH Key 버튼을 클릭

6. Confirm access에서 Github 로그인에 필요한 비밀번호를 입력해 SSH key 등록을 승인

 

 

오늘 공부를 하며 번아웃은 아니지만 멘붕이 왔다.

조건문이나 반복문은 여러가지로 테스트해보며 내 생각으로 해도 오류가 나면,

Reference를 통하여 해답을 찾지는 못하더라도 해답에 대한 이유를 유추해 나갈 수 있었다.

 

하지만 깃허브를 사용해본적도 없고, 단지 몇일 전에 회원가입을 해놓았고, 링크를 통해 초대받은 주소로 들어왔다.

그런데 오늘은 깃허브에 계산기 파일을 올려놓았으니 다운 받아서 

문자를 입력받을 수 있도록 설정하고 계산까지 포함해야 한다. (정답은 공개되지 않았다)

결과물은 깃허브에 파일을 첨부하여 제출해야 한다.

깃허브는 영어로 구성되어 있고, 같은 팀원인 Pair에게 도움을 받아 설정을 조금 해보았다.

 

Pair는 Mac을 쓰는 유저이고, 본인은 윈도우를 사용해서 나는 문제인지, 초기 셋팅에 오류가 있는건지 알 수 없었다.

본인뿐만이 아닌 다른 여러 학생들도 어려움을 겪고 있다.

이 점에 대해 한 분이 언급을 디스코드 수다방에서 해주셨고, 과제 제출법에 대해 올려주신다했지만

현재 코딩에 몰두하고 싶은 나에게 기초적인 개발설정에 대한 도움말이 없기에  혼란스러운 상태이다.

 

코플릿에 올라온 문제들은 당일에 복습을 진행하였고,

advanced라는 태그가 붙어져 있는 문제들은 당장은 못 풀 수있다고 하니,

우선 주말에 advanced문제들을 풀어봐야 할것이며 깃허브에 대한 공부를 해야할 것 같다.

+ Recent posts