20.08.06 ~ 07 [Debugging , TDD]

박종찬·2020년 8월 7일
0

TIL

목록 보기
11/89
post-thumbnail

경우의 수를 테스트하는 Testbuilder를 배웠다. 마지막 과제는 정말.. 잠을 못자게 하는 과제다..

Debugging

  • '버그를 잡는다'는 의미로, 코드에서 버그를 찾아 제거 및 수정하는 것을 의미

  • 결과가 이상하다면?

    1. 무엇이 문제인지 알아야 한다.
    2. Error Message의 의미와 어느 파일의 몇 번째 줄에서 발생하였는지 찾아본다.
  • 내가 예상한 결과가 아닐 경우

    1. 문제가 발생했을 것이라고 생각되는 부분을 선정
    2. 실험(검증)
  • 테스트 방법

    1. 경우의 수를 정리

    2. 경우의 수에 하나씩 기대값과 실제값을 비교

      → 유닛 테스트

→ 이러한 개발 방법론을 테스트 주도 개발이라고 부른다.

테스트 주도 개발(TDD)

  • 코드를 작성하기 전에 테스트를 하는 방법론, 개발자가 생각하는 코드의 결과를 미리 정의하고, 이를 바탕으로 코드를 작성하는 방법

  • 장점

    • 테스트를 먼저 작성하는 개발은 코드를 어떻게 구성할지 고민하고, 그 과정에서 버그가 더 적은 코드를 짜게 된다.
    • 또한 테스트가 쉽도록 코드의 구조를 기획하는 것도 같은 효과를 지닌다.
  • 단점

    • 속도
  • 속도때문에 TDD를 하는 사람들이 적지만, TDD 작성은 기본

객체지향

  • 하나의 모델이 되는 청사진(Class)을 만들고, 그 청사진을 바탕으로 한 객체(Instance)를 만드는 패턴
  • new 키워드를 통해 클래스의 인스턴스를 만들어낼 수 있다.
  • class에 속성과 메소드를 정의하고, 인스턴스에서 이용한다.
  • ES5의 클래스는 함수로 정의할 수 있다.
function Car(brand, name, color) {
	this.brand = brand;
	this.name = name;
	this.color = color;

	Car.prototype.engineStart = function() {
		...
	}
	
	Car.prototype.drive = function() {
		...
	}
}

//instance 생성
let covec = new Car('Volvo', 'XC90', 'Grey');
  • ES6에서는 class라는 키워드를 이용해 정의할 수도 있다.
class Car {
	constructor(brand, name, color) {
		this.brand = brand;
		this.name = name;
		this.color = color;
		}

		engineStart() {
			...
		}
		
		drive() {
			...
		}
}

//instance 생성
let covec = new Car('Volvo', 'XC90', 'Grey');

prototype

  • 클래스를 만들 때 쓰는 원형 객체

  • 쓰는 이유

    function volvoCar(name) {
    	this.brand = 'Volvo';
    	this.name = name;
    	this.wheel = 4;
    
    	Car.prototype.engineStart = function() {
    		console.log(`${this.name}의 시동이 켜졌습니다.`);
    	}
    	
    	Car.prototype.drive = function() {
    		...
    	}
    }
    
    let covec = new Car('Volvo', 'XC90', 'Grey');
    let poliac = new Car('Volvo', 'XC60', 'Black');
    
    console.log(covec.brand);  // 'Volvo'
    console.log(poliac.brand); // 'Volvo'
    • brand나 wheel은 똑같은데 메모리에는 brand, wheel이 두 개씩 총 네 개가 할당된다. 만약 1000 개의 인스턴스라면?.. 그렇기에 prototype을 이용한다.

      function volvoCar(name) {
      	volvoCar.prototype.brand = 'Volvo';
      	this.name = name;
      	volvoCar.prototype.wheel = 4;
      
      	Car.prototype.engineStart = function() {
      		console.log(`${this.name}의 시동이 켜졌습니다.`);
      	}
      	
      	Car.prototype.drive = function() {
      		...
      	}
      }
    • prototype을 설정해준다면 인스턴스는 객체에 어딘가 메모리 상에 존재하는 volvoCar.prototype이라는 객체에 넣어놓은 brand와 wheel을 공유하는 것이다.

constructor

  • 인스턴스가 초기화될 때 실행하는 생성자 함수

this

  • 함수가 실행될 때, 해당 scope마다 생성되는 고유한 실행 context (execution context)
  • new 키워드로 인스턴스를 생성했을 때, 해당 인스턴스가 this의 값이 된다.

Arguments, Parameter

  1. arguments와 함께 함수를 호출
  2. parameter를 통해 argument를 사용할 수 있다.
  • 만약 argument의 길이가 유동적?

    • rest parameter!
  • parameter에 default parameter를 넣어주고 싶은 경우

    function multi(a, b == 5) {
    	return a * b;
    }
    
    multi(5); // 25

Reference Value

  • 배열과 객체, 함수는 값이 저장되는게 아닌 주소값을 저장한다.

    • 즉 같은 객체를 할당받고 다른 객체가 그 객체의 값을 수정하면 다른 객체도 값이 변경된다.

      	console.log([1,2,3] === [1,2,3]); //false, 서로 주소값이 다르기때문에..
      	console.log({name = 'chan'} === {name = 'chan'}); //false

Closure

  • 내부 함수가 외부 함수의 변수를 받을 수 있다.
var multi = function() {
  let str = 599;
  return function(y) {
	  return 5 * str; //str의 값을 가져올 수 있기에 closure
  }
}
var multi2 = function(x) {
  return function(y) {
		return x * y; //x 값을 가져올 수 있어서 closure
  }
}
profile
반가워요! 사람을 도우는 웹 개발자로 성장하기! :)

0개의 댓글