.
.
.
1995년 넷스케이프의 브랜든 아이크는 웹의 다양한 콘텐츠를 표현하기 위해 이미지, 플러그인 요소를 쉽게 조합할 수 있는 새로운 언의 필요성을 느끼고 개발.
크로스 브라우징 이슈 발생 -> 브라우저가 자바스크립트의 변화를 따라가지 못함.
새로운 버전 브라우저 - 자바스크립의 새로운 기능 개발
...but 예전 버전의 브라우저를 써버리면 무용지물
이를 해결하기 위해
폴리필 & 트랜스 파일 등장,
모든 브라우저에서 동일하게 동작하는 표준화된 자바스크립트 필요성 제기 -> ECMASxript의 등장
Cross Browsing : 인터넷 익스플로러와 내비게이터의 DOM구조는 완전히 다르기 때문에 브라우저마다 웹 페이지가 다르게 동작하거나 제대로 동작하지 않음.
polyfill : 지원하지 않는 코드를 브라우저에서 사용할 수 있도록 변환한 코드 조각이나 플러그인
transpile : 최신 버전의 코드를 예전 버전의 코드로 변화하는 과정
웹사이트
: 수집된 데이터 및 저보를 특정 페이지에 표시하기 위한 정적인 웹
: 단방향 정보 제공 ( 사용자와 상호작용 x )
: HTML에 링크가 연결된 웹 페잊 모음 -> 콘텐츠가 동적으로 업데이트 x
웹 애플리케이션
: 방향 정보 제공 ( 사용자와 상호작용 o )
: 현재 대부분의 웹 사이트 ( 대표 : 구글 지도 Google Map )
기존의 웹 개발 환경 : 대규모 웹 애플리케이션을 만드는데 적합 x -> 변화 필요
하나의 웹페이지 통으로 개발 x -> 컴포넌트 단위로 개발하는 방식 o
: 사용자마다 부분적으로 다른 화면을 렌더링 o
과거의 웹
: 주로 PC와 연결
: 디스플레이 종류 제한적
요즘의 웹
: 수많은 디바이스와 연결
: 디스플레이 종류(모아일, 패드, 랩톱pc...) 매우 다양
-> 이런 상황과 맞물려 컴포넌트 베이스 개발( CBD )등장
컴포넌트 베이스 개발( Compoment Based Development, CBD )
: 재사용할 수 있는 컴포넌트를 개발 또는 조합해서 하나의 애플리케이션을 만드는 개발 방법론, 서비스에서 다루는 데이터를 구분하고 그에 맞는 Ui를 표현할 수 있게 컴포넌트 단위로 개발
컴포넌트 : 모듈과 유사하게 하나의 독립된 기능을 재사용하기 위한 묶음
( 모듈과는 달리 런타임 환경에서 독립적으로 배포.실행할 수 있는 단위 )
따라서 개발자는 컴포넌트 간의 의존성을 파악해야 하고, 제대로 컴포넌트를 사용하고 변화에 대응해야 한다.
의존성 : 대상의 변경에 영향받을 수 있는 가능성
개발에 투입된 인원이 많아질수록 코드를 파악하기 어려워지는 것은 당연 -> 협업 필요
.
.
.
자바스크립트 = 동적 타입 언어
: 변수에 타입을 명시적을 지정 x -> 런타임에 변숫값이 할당될 때 해당 값의 타입에 따라 변수 타입이 결정
ex) 변수 a의 타입이 number인지 string인지 결정되는 때 = 코드가 동작할 때 a에 할당되는 순간, 그 값이 1인지 '1'인지 결정
const sumNumber = (a,b) => {
return a+b;
};
sumNumber(1,2)//3
정상작동 o
const sumNumber = (a,b) => {
return a+b;
};
sumNumber(100)//NaN
sumNumber("a","b")//ab
정상작동 o ... but 개발자 의도와는 다르게 동작
-> 자바스크립트는 동적 타입 언어이자 상당히 관대한 언어...
sumNumber 함수를 호출할 때 사용되는 인수 값에 따라 a와 b의 타입이 결정.
b가 undefined이기 때문에 +연산자의 피연산자가 될 수 없지만 오류 발생 x, b를 적절한 타입인 NaN으로 형변환 다음 실행
협업의 필요성 o -> 자바스크립트 인터페이스의 필요성 o
< 해결방안 >
JSDoc : API 문서 생성 도구
propTypes : 리액트에서 컴포넌트 props의 타입 검사
다트Dart : 자바스크립트 대체 구글에서 나온 새로운 언어
마이크로소프트는 자바스크립트의 슈퍼셋언어인 타입스크립트 공개
슈퍼셋 : 기존언어에 새로운 기능&문법 추가 , 기능 보완
기존 언어와 호환, 일반적으로 컴파일러 등으로 기존 언어 코드로 변환되어 실행
타입스크립트 인터페이스 (interface)
: 객체 구조를 정의하는 역할 , 특정 객체가 가져야 하는 속성과 메서드의 집합을 인터페이스로 정의 -> 객체가 그 구조를 따르게
_ 도서 참조 : 우아한 타입스크립트 with 리액트