전체 글

초보 개발자의 지식 공유의 장
왜 제네릭을 사용해야 하는가? 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다. 제네릭은 클래스와 인터페이스, 메소드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 한다. 장점1. 컴파일 시 강한 타입 체크를 할 수 있다. 실행시 타입 에러가 나는 것보다 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지 장점2. 타입 변환(castring)을 제거한다. 비제네릭 코드는 불필요하게 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다. List list = new ArrayList(); list.add("hello"); String str = (String) list.get(0); // 타입 변환이 필요 List..
매치된 부분을 캡처하기 정규 표현식의 유용함은 검색한 결과를 저장(capture)해 놓고, 이를 이용해서 다른 일을 하고자 할때 빛을 발한다. 매치된 부분 캡처하기(지역, 전역) 정규 표현식의 match()메서드는 일치하는 부분을 찾아내면 캡처된 값들의 배열을 반환하고, 일치하는 부분이 없으면 null을 반환한다. match()로부터 반환된 배열에는 항상 첫 번째 인덱스에 일치하는 내용 전체가 저장되어 있고, 그 뒤에 캡처된 내용이 순서대로 저장되어 있다. g 플래그가 설정된 전역 정규 표현식을 이용하면 match()메서드는 조금 다른 값을 반환한다. 전역 정규 표현식은 지역(local)정규 표현식과 달리 첫 번째 매치되는 문자열만 찾지 않고 모두 매치되는 문자열을 찾는다. 이 때 각 매치 결과 내에 포..
정규 표현식 컴파일하기 정규 표현식은 여러 단계의 처리과정을 거친다.두 가지 주요한 단계로 컴파일(compilation) 과 실행(execution)이 있다. 정규 표현식이 처음 만들어지면 컴파일이 일어나고, 컴파일된 정규 표현식으로 문자열 내의 패턴을 찾으려고 하는 것이 바로 실행(execution)이다.일부 브라우저는 정규 표현식들의 컴파일 결과를 캐시해 두는 경우가 대부분이다. 그렇기 때문에, 복잡한 정규 표현식을 다루는 경우 나중에 사용할 표현식을 미리 정의해 두면 좋은 속도 향상을 얻을 수 있다. 컴파일된 정규 표현식을 만드는 두 가지 방법 var regex1 = /test/i; var regex2 = new RegExp("test", "i"); console.log(regex1.toString..
정규 표현식 살펴보기 1. 정규 표현식에 대한 설명정규 표현식 => 텍스트내에서 일치하는 문자열을 찾기 위해 문자열의 패턴을 표현하는 방식정규 표현식은 이런 패턴을 정의할 수 있도록 용어(terms) 와 연산(operators)로 구성된다. 정규 표현식을 생성하는 방법 정규 표현식 리터럴을 이용하는 방법 RegExp 객체의 인스턴스를 생성하는 방법 var pattern = /test/; var pattern = new RegExp("test"); 보통 개발시점에 어떤 정규식을 이용할지 알고 있는 경우에는 정규 표현식 리터럴을 사용하고, 실행 중에 문자열을 이용해서 동적 으로 정규 표현식을 생성해야 할 때는 생성자(RegExp)를 이용한다. 정규 표현식과 함께 사용할 수 있는 플래그 i - 대소문자를 구별..
정규 표현식이 멋진 이유 만약, 우리가 특정 데이터가, 미국의 우편번호 형식이 맞는지 boolean 값으로 반환하는 함수를 만든다고 생각해보자. => 99999-9999 (다섯자리 - 네자리)정규표현식을 사용하지 않고, 우편번호 형식을 검사한다면 아래와 같이 짤 수 있다. function isThisAZipCode(candidate){ if(typeof candidate !== "string" || candidate.length != 10) return false; for(var n=0; n
선형회귀 단순 선형 회귀를 위한 일반화된 예측함수ex) wave 데이터 셋x[0]은 특성(feature), 은 예측 값, b는 편향(bias), w[0]은 가중치(weight) 또는 계수(coefficient) 라고 부름 목표 데이터셋들의 특성들 (x[0], x[1], x[2], .... , x[p])과 라벨값(y) 사이의 관계를 잘 설명해낼 수 있는 적합한 특성 가중치(w[0], w[1], w[2], ..., w[p])와 b(편향)을 찾는 것 HOW? 어떻게 적절한 가중치와 편향을 찾을 까?선형 회귀는 라벨 값(y)과 예측값() 사이의 평균제곱오차(mean squared error, MSE) 를 최소화하는 파라미터 w와 b를 찾는다.(실제 라벨값과 예측값이 작으면 작을수록 예측성능이 좋은 것이기 때문에..
2 실수하기 쉬운 것들 2-1. 객체 확장하기최악의 실수는 Object.prototype을 확장하는 것이다.이 것은 모든 객체가 추가된 프로퍼티를 받는 다는 것을 의미하고, 어떤 객체의 프로퍼티를 순회할 때 새로 추가한 프로퍼티가 같이 순회되어 문제가 될 수 있다.예제 코드(객체에 있는 모든 프로퍼티 이름(key)의 배열을 반환하는 메서드) Object.prototype.keys = function(){ var keys = []; for(var p in this) keys.push(p); return keys; }; var obj = { a : 1, b : 2, c : 3}; console.log(obj.keys().length == 3); // false 코드만 보면 테스트에 성공할 것 같지만, 실패한..
객체 지향과 프로토타입 프로토타입은 객체의 타입을 정의하는데 편한게 사용하는 수단이지만 실제로는 함수의 기능이다.자바스크립트에서 프로토타입은 객체의 프로퍼티를 정의하고, 객체의 인스턴스에 자동으로 적용되는 기능을 정의하는 편리한 수단이다. (청사진 역할, java 클래스와 비슷한 역할을 함) 1. 인스턴스 생성과 프로토타입 모든 함수에는 prototype 프로퍼티가 존재(생성자로 사용하지 않으면 필요 없음)1-1. 객체 인스턴스 생성객체 청사진으로서의 프로토타입 function Corn(){}; Corn.prototype.swingSword = function(){ return true; }; var corn1 = Corn(); console.log(corn1 === undefined); var corn..
4.4 가변인자목록 가변인자 목록 자바스크립트가 지닌 유연하고 강력한 기능 중 하나는 함수가 임의 개수의 인자를 받을 수 있다는 것이다. 몇 가지 예제를 통하여 유연한 인자 목록이 제공하는 장점을 알아보자. 임의 개수의 인자를 받는 함수에 여러 개의 인자를 제공하는 방법 함수 오버로딩을 구현하기 위해서 가변인자 목록을 활용하는 방법 인자 목록이 지닌 length 프로퍼티에 대해 이해하고 활용하는 방법 자바스크립트는 함수 오버로딩을 제공하지 않는다. 그렇기 때문에 오버로딩이 제공하는 장점과 유사한 장점을 얻으려면 인자 목록의 유연함이 필요하다. apply() 메서드를 이용해서 가변 길이의 인자를 전달하기 자바스크립트에서는 배열에서 최솟값이나 최댓값을 검색하는 기능이 없다. 유사한 기능으로..
지도학습 지도학습 모델 복잡도와 데이터셋 크기의 관계 모델의 복잡도는 훈련 데이터셋에 담긴 입력 데이터의 다양성과 관련이 깊음 데이터셋에 다양한 데이터 포인트가 많을수록(데이터가 많을 수록) 과대적합 없이 더 복잡한 모델을 만들 수 있음 다양성을 키워주므로 큰 데이터셋은 더 복잡한 모델을 만들 수 있게 해줌 선형모델 => 입력 특성에 대한 선형 함수를 만들어 예측 회귀의 선형 모델 선형모델을 위한 일반화된 예측 함수 y = w[0] * x[0] + w[1] * x[1] ... w[p] * x[p] + b; x[0] ~ x[p] 까지는 데이터 포인트에 대한 특성 w와 b는 모델이 학습할 파라미터 그리고 y은 모델이 만들어낸 예측값 하나라면 y = w[0] * x[0] + b 곧, 예측값은 입력 ..
깡냉쓰
평범한 개발자 노트