'웹 개발/Study'에 해당되는 글 24건

  1. 2022.03.02 babel 과 polyfill
  2. 2022.03.01 Closure, 클로저 함수
  3. 2022.03.01 let, var, const 차이점
  4. 2021.08.20 웹팩 dependencies 설정
  5. 2021.03.25 React 기초 연습
  6. 2021.03.21 객체 지향 설계의 다섯가지 원칙
  7. 2021.03.21 var let const
  8. 2021.03.19 Git 사용하기

babel 과 polyfill

웹 개발/Study 2022. 3. 2. 06:39

바벨(babel)이란?

바벨은 입력과 출력이 모두 자바스크립트 코드인 컴파일러다. 이는 보통의 컴파일러가 고수준의 언어를 저수준의 언어로 변환하는 것과 비교된다.

초기의 바벨은 ES6 코드를 ES5코드로 변환해주는 컴파일러였다. 현재는 바벨을 이용해서 리액트의 JSX문법, 타입스크립트와 같은 정적 타입 언어, 코드 압축, 제안(proposal)단계에 있는 문법 등을 사용할 수 있다.

폴리필(polyfill)이란?

폴리필이란 브라우저가 지원하지 않는 자바스크립트 코드를 지원 가능하도록 변환한 코드를 뜻한다. 하위 브라우저가 지원하는 자바스크립트 코드를 사용해 자바스크립트의 최신 기능을 똑같이 구현하는 방식이다.

바벨과 폴리필

자바스크립트의 최신 기능을 모두 사용하면서 오래된 브라우저를 지원하려면 바벨로 코드 문법을 변환하는 동시에 폴리필도 사용해야 한다. 폴리필은 런타임에 기능을 주입하는 것을 말한다. 런타임에 기능이 존재하는지 검사해서 기능이 없는 경우에만 주입한다. 바벨을 사용하면 최신 자바스크립트 표준에 추가된 모든 기능을 사용할 수 있다고 오해하기 쉽다. 바벨을 사용하더라도 폴리필에 대한 설정은 별도로 해야한다.

한가지 예로 ES8에 추가된 String.padStart 메서드는 폴리필을 이용해서 추가할 수 있다. 반면에 async await는 폴리필로 추가할 수 없으며, 컴파일 타임에 코드 변환을 해야한다.

core-js 모듈의 폴리필 사용하기

core-js는 바벨에서 폴리필을 위해 공식적으로 지원하는 패키지다. 가장 간단한 사용법은 core-js모듈을 자바스크립트 코드로 불러오는 것이다.

import 'core-js';
//core-js 모듈을 가져오면 해당 모듈의 모든 폴리필이 포함된다. 
//따라서 낮은 버전의 브라우저에서도 프로미스, Object.values, 배열의 includes메서드를 사용할 수 있다.
const p = Promise.resolve(10);
const obj = {
    a: 10,
    b: 20,
    c: 30,
}
const arr=  Object.values(obj);
const exist = arr.includes(20);
import 'core-js/features/promise';
import 'core-js/features/object/values';
import 'core-js/features/array/includes';
//core-js로 부터 직접 필요한 폴리필만 가져오면 번들 파일의 크기를 줄일 수 있다.
const p = Promise.resolve(10);
const obj = {
     a: 10,
     b: 20,
     c: 30,
};
const arr= Object.values(obj);
const exist = arr.includes(20);

@babel/preset-env 프리셋 이용하기

@babel/preset-env 프리셋은 실행환경에 대한 정보를 설정해 주면 자동으로 필요한 기능을 주입해준다. 예를 들어, babel, config.js 파일에 다음 내용을 입력하면 특정 버전의 브라우저를 위한 플러그인 만 포함된다.

const presets= [
   [
      '@babel/preset-env',
      {
         targets: '> 0.25%, not dead',
         //targets 속성으로 지원하는 브라우저 정보를 입력한다.
         //여기서는 시장 점유율이 0.25% 이상이고 업데이트가 종료되지 않은 브라우저를 입력했다.
         //브라우저는 browserlist라는 패키지의 문법을 사용한다.
      },
   ]
];

module.exports= {presets};

'웹 개발 > Study' 카테고리의 다른 글

Closure, 클로저 함수  (0) 2022.03.01
let, var, const 차이점  (0) 2022.03.01
웹팩 dependencies 설정  (0) 2021.08.20
React 기초 연습  (0) 2021.03.25
객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
:

Closure, 클로저 함수

웹 개발/Study 2022. 3. 1. 02:12

클로저는 자바스크립트의 고유한 개념이 아니라, 여러 함수형 프로그래밍 언어에서 공통적으로 발견되는 특성이다. 

한마디로 정리하자면 자신이 선언될 당시의 환경을 기억하는 함수이다.

// 클로저를 만드는 형태 1. - 중첩함수
function outerFn() {
  let x = 10;
  return function innerFn(y) { // innerFn 함수는 클로저다.
    return x = x + y;
  }
}
let a = outerFn(); // 외부함수 호출은 한번만. 이제 a 변수는 innerFn 함수를 참조한다.
a(5); // 15;
a(5); // 20;
a(5); // 25;
// 클로저를 만드는 형태 2. - 전역에 선언한 변수를 박스 안에서 함수로 정의하고 전역에서 호출
let globalFunc;
{
  let x = 10;
  globalFunc = function(y) { // globalFunc 함수는 클로저다.
    return x = x + y;
  }
}
globalFunc(5); // 15;
globalFunc(5); // 20;
globalFunc(5); // 25;

1. 클로저는 내부함수가 외부함수의 맥락(context)에 접근 할 수 있는 것을 가리킨다.

2. 외부로 전달이 항상  return을 의미하는 것은 아니다.

3. 클로저는 특정 상황에서 발생하는 "현상"이고 함수는 이 현상이 나타나기 위한 "조건"에 해당한다.

장점

1. 데이터를 보전할 수 있다.

클로저 함수는 외부 함수의 실행이 끝나더라도 외부 함수 내 변수를 사용 할 수 있다.

클로저는 이처럼 특정 데이터를 스코프 안에 가두어둔 채로 계속 사용할 수 있게 하는 폐쇄성을 갖는다.

2. 정보의 접근 제한 (캡슐화)

'클로저 모듈 패턴'을 사용해 객체에 담아 여러개의 함수를 리턴하도록 만든다.

이러한 정보의 접근을 제한하는 것을 캡슐화라고 한다.

3. 모듈화에 유리하다.

클로저 함수를 각각의 변수에 할당하면 각자 독립적으로 값을 사용하고 보존할 수 있다.

이와 같이 함수의 재사용성을 극대화, 함수 하나를 독립적인 부품의 형태로 분리하는 것을 모듈화라고 한다.

클로저를 통해 데이터와 메소드를 묶어다닐 수 있기에 클로저는 모듈화에 유리하다.

'웹 개발 > Study' 카테고리의 다른 글

babel 과 polyfill  (0) 2022.03.02
let, var, const 차이점  (0) 2022.03.01
웹팩 dependencies 설정  (0) 2021.08.20
React 기초 연습  (0) 2021.03.25
객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
:

let, var, const 차이점

웹 개발/Study 2022. 3. 1. 02:00

1. 변수 선언 방식

var는 한번 선언한 변수일지라도 중복해서 선언을 할 수 있는 특징이 있다.

var a = 1;
console.log(a)//1
var a = 2;
console.log(a)//2

위와 같이 한번 선언을 한 a 변수 일지라도 var태그를 사용하여 선언 하면 다시 선언을 할 수 있다. 이는 간단한 테스트에는 편리할 수 있으나 코드량이 많아진다면 어디에서 사용했었는지 파악하기가 어렵고 기존의 값이 바뀌어 버그가 발생할 수 있다.

이와 달리 let과 const는 재선언이 불가능하다. 하지만 이 둘에도 차이점이 있는데, 그것은 immutable여부이다.

let은 변수에 재할당이 가능하고, const는 불가능하다.

2. 호이스팅

호이스팅(Hoisting)이란, var 선언문이나 function 선언문 등을 해당 스코프의 선두로 옮긴 것처럼 동작하는 특성을 말한다.

자바스크립트는 ES6에서 도입된 let, const를 포함하여 모든 선언(var, let, const function function*, class)을 호이스팅한다.

하지만, var 로 선언된 변수와 달리 let로 선언된 변수를 선언문 이전에 참조하면 참조 에러(ReferenceError)가 발생한다.

console.log(foo);//undefined
var foo;

console.log(bar); //Error: Uncaught ReferenceError: bar is not defined
let bar;

이는 let 로 선언된 변수는 스코프의 시작에서 변수의 선언까지 일시적 사각지대(Temporal Dead Zone; TDZ)에 빠지기 때문이다.

참고로 변수는 선언 단계 > 초기화 단계 > 할당 단계에 걸쳐 생성되는데,

var 으로 선언된 변수는 선언 단계와 초기화 단계가 한번에 이루어진다. 하지만 let으로 선언된 변수는 선언 단계와 초기화 단계가 분리되어 진행된다.

//스코프의 선두에서 선언 단계와 초기화 단계가 실행된다.
//따라서 변수 선언문 이전에 변수를 참조할 수 있다.

console.log(foo);

var foo;
console.log(foo);
foo = 1; //할당문에서 할당 단계가 실행된다.
console.log(foo); //1
//스코프의 선두에서 선언단계가 실행된다.
//아직 변수가 초기화(메모리 공간 확보와 undefined로 초기화)되지 않았다.
//따라서 변수 선언문 이전에 변수를 참조할 수 없다.

console.log(foo); //ReferenceError: foo is not defined

let foo; //변수 선언문에서 초기화 단계가 실행된다
console.log(foo); //undefined

foo = 1; //할당문에서 할당 단계가 실행된다.
console.log(foo); //1

3. 정리

변수 선언에는 기본적으로 const를 사용하고, 재할당이 필요한 경우에 한정해 let을 사용하는것이 좋다.

그리고 객체를 재할당하는 경우는 생각보다 흔하지 않다. const를 사용하면 의도치 않은 재할당을 방지해 주기 때문에 보다 안전하다.

 

'웹 개발 > Study' 카테고리의 다른 글

babel 과 polyfill  (0) 2022.03.02
Closure, 클로저 함수  (0) 2022.03.01
웹팩 dependencies 설정  (0) 2021.08.20
React 기초 연습  (0) 2021.03.25
객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
:

웹팩 dependencies 설정

웹 개발/Study 2021. 8. 20. 03:15

npm i 를 통해 기본적으로 깔아야 하는 것들을 깔아준다.

@babel/core: 바벨의 기본적인 것들

@babel/preset-env: 브라우저 환경에 맞게 예전 문법을 지원

@babel/preset-react: jsx 지원

babel-loader: 바벨과 웹팩을 연결

'웹 개발 > Study' 카테고리의 다른 글

Closure, 클로저 함수  (0) 2022.03.01
let, var, const 차이점  (0) 2022.03.01
React 기초 연습  (0) 2021.03.25
객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
var let const  (0) 2021.03.21
:

React 기초 연습

웹 개발/Study 2021. 3. 25. 17:02

App.js:

import './App.css';
import ReactDOM from 'react-dom';
let tweet = <div>{Tweet({ writer: '이호준' })}</div>;
let tweet2 = (
	<div>
		{(function () {
			return '리액트';
		})()}
	</div>
);
let nowLearning = false;

let tweet3 = (
	<Tweet writer="김코딩">
		{(function () {
			if (nowLearning) {
				return '리액트';
			} else {
				return '배틀그라운드';
			}
		})() + '는 늘 짜릿하네요'}
	</Tweet>
);
function Tweet4(){
	let langs = ["javascript", 'HTML', 'Python']
	// eslint-disable-next-line
	return (
		<div>
			{langs.map(it=><div>{it}</div>)}
		</div>
	)
}
function Tweet({ writer, children }) {
	return (
		<div>
			{writer}
			{children}
		</div>
	);
}
function clock() {
	ReactDOM.render(
		<div>{new Date().toLocaleTimeString()}</div>,
		document.getElementById('clock'),
	);
}
setInterval(clock, 1000);
function App() {
	return (
		<div className="App">
			<header className="App-header" id="App-header">
				<h1>Hello World!</h1>
				<h2>Start editing to see some magic happen!</h2>
				{tweet}
				{tweet2}
				{tweet3}
				<Tweet4 />
				<div id="clock">{new Date().toLocaleTimeString()}</div>
			</header>
		</div>
	);
}

export default App;

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App.js';
import reportWebVitals from './reportWebVitals';

ReactDOM.render(<App />, document.getElementById('root'));

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

 

'웹 개발 > Study' 카테고리의 다른 글

let, var, const 차이점  (0) 2022.03.01
웹팩 dependencies 설정  (0) 2021.08.20
객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
var let const  (0) 2021.03.21
Git 사용하기  (0) 2021.03.19
:

객체 지향 설계의 다섯가지 원칙

웹 개발/Study 2021. 3. 21. 17:08

컴퓨터 프로그래밍에서 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것이다. 프로그래머가 시간이 지나도 유지보수와 확장이 쉬운 시스템을 만드록자 할 때 이 원칙들을 함께 적용 할 수 있다. SOLID원칙들은 소프트웨어 작업에서 프로그래머가 소스코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스코드를 리팩터링하여 코드냄새를 제거하기 위해 적용할 수 있는 지침이다. 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다. 

두문자약어개념SOLID

두문자 약어 개념
S SRP 단일 책임 원칙 (Single responsibility principle) 클래스는 하나의 책임만 가져야 한다.
O OCP 개방-폐쇄 원칙 (Open/closed principle)“소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.”
L LSP 리스코프 치환 원칙 (Liskov substitution principle)“프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고하라.
I ISP 인터페이스 분리 원칙 (Interface segregation principle)“특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.”[4]
D DIP 의존관계 역전 원칙 (Dependency inversion principle)프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.”[4] 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

 

'웹 개발 > Study' 카테고리의 다른 글

웹팩 dependencies 설정  (0) 2021.08.20
React 기초 연습  (0) 2021.03.25
var let const  (0) 2021.03.21
Git 사용하기  (0) 2021.03.19
Node 명령어  (0) 2021.03.19
:

var let const

웹 개발/Study 2021. 3. 21. 17:03

var, let, const의 차이점

1. var는 함수 레벨 스코프이고 let, const는 블럭 레벨 스코프입니다.

2. var로 선언한 변수는 선언 전에 사용해도 에러가 나지 않지만 let, const는 에러가 발생합니다.

3. var는 이미 선언되어있는 이름과 같은 이름으로 변수를 또 선언해도 에러가 나지 않지만 let, const는 이미 존재하는 변수와 같은 이름의 변수를 또 선언하면 에러가 납니다.

4. var, let은 변수 선언시 초기 값을 주지 않아도 되지만 const는 반드시 초기값을 할당해야 합니다.

5. var, let은 값을 다시 할당할 수 있지만 const는 한번 할당한 값은 변경할 수 없습니다(단, 객체 안에 프로퍼티가 변경되는 것까지 막지는 못합니다).

함수레벨 스코프란?

// var는 function-scope이기 때문에 for문이 끝난다음에 i를 호출하면 값이 출력이 잘 된다.
// 이건 var가 hoisting이 되었기 때문이다.
for(var j=0; j<10; j++) {
  console.log('j', j)
}
console.log('after loop j is ', j) // after loop j is 10


// 아래의 경우에는 에러가 발생한다.
function counter () {
  for(var i=0; i<10; i++) {
    console.log('i', i)
  }
}
counter()
console.log('after loop i is', i) // ReferenceError: i is not defined

 

'웹 개발 > Study' 카테고리의 다른 글

React 기초 연습  (0) 2021.03.25
객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
Git 사용하기  (0) 2021.03.19
Node 명령어  (0) 2021.03.19
HTTP 상태 코드/ 요청 메서드  (0) 2021.03.19
:

Git 사용하기

웹 개발/Study 2021. 3. 19. 18:45

git remote add pair <Repo URL for pairs fork>

git remote -v

페어의 레버지토리 연결

 

git add<change file>

git commit -m “memo”

git push origin master ( or other branch name)

push는 자신의 레포지토리에다가 해야함

 

git pull pair master ( or other branch name)

pull은 항상 페어의 레포지토리에서 해야함

페어의 레포지토리에서 변경사항 가져오기

 

git add <change file>

git commit -m “change”

 

git pull pair master

 

 

git config credential.helper store

인증을 캐시에 저장하여 일정시간동안 입력하지 않는다.

 

git config –global credential.hgelper ‘cache –timeout 7200’

timeout뒤의 숫자는 초(second)이다. 여기서는 7200만큼(2시간)의 만료시간을 추가했다.

1day – 86400

7days – 604800

30days – 2592000

 

git checkout

branch 이동

 

git checkout -b 기능1

현재 작업공간을 베이스로 브랜치 생성

기능1 branch 생성 + 기능1 branch로 작업공간 이동

 

git branch

branch확인, q로 나가기

 

'웹 개발 > Study' 카테고리의 다른 글

객체 지향 설계의 다섯가지 원칙  (0) 2021.03.21
var let const  (0) 2021.03.21
Node 명령어  (0) 2021.03.19
HTTP 상태 코드/ 요청 메서드  (0) 2021.03.19
Promise 정리  (0) 2021.03.19
: