Hong Shik Branden Kim
ํ๋ก ํธ์ค๋๋ ์๋ฒฝํด์!
ํ๋ก ํธ์ค๋๋ ์๋ฒฝํด์!
์๋ฒ๊ฐ ์ค๋ ์ํ์..
ํ๋ก ํธ์ค๋๋ ์๋ฒฝํด์!
์๋ฒ๊ฐ ์ค๋ ์ํ์..
TRUNCATE TABLE *;
์๋ฒ๊ฐ ์ค๋ ์ํ์..
TRUNCATE TABLE *;
์๋ฌ๊ฐ ๋ฐ์ํด๋,ย
๊ธฐ์กด UI๋ฅผ ํด์น์ง ์๊ณ / ์๋ฒ ์๋์ ๋ฉ์ถ์ง ์๊ณ
์ฝ๋๊ฐ ์ ์๋ํ๊ฒ ํด์ผ ํ๋ค !
ํ๋ก๊ทธ๋จ ์ค์น ์ฌ๋ถ๋ฅผ ํ์ธ
ย
ย
... ํ์ธ์ด ์๋๋ ๊ฒฝ์ฐ
๋ค์ ํ์ธ
ย
ย
1,000,000 $ LOSS
์๋ฌ ํธ๋ค๋ง์
์ ์์๊ฐ ์์ต๋๋ค.
์ค๋น ๋ฐฐ๊ณ ํ..
Type Checking : ํน์ ๋ชป๋จน๋ ๊ฑฐ ์์ด?
Conditional Check : ์ด์ ๋ญ ๋จน์์ด?
์ค๋น ๋ฐฐ๊ณ ํ..
Type Checking : ํน์ ๋ชป๋จน๋ ๊ฑฐ ์์ด?
Conditional Check : ์ด์ ๋ญ ๋จน์์ด?
์ค๋น ๋ฐฐ๊ณ ํ..
์ค! ๊ทธ๋ผ ์ฐ๋ฆฌ ์ฌ์น๋๊ฐ ์ข์ํ๋ ๋จ-๋ ํ ๊ตญ๋ฐฅ ๋จน์
๋ชฐ๋ผ.. ๋ฐฐ๊ณ ํ (Error)
Type Checking : ํน์ ๋ชป๋จน๋ ๊ฑฐ ์์ด?
Conditional Check : ์ด์ ๋ญ ๋จน์์ด?
์ค๋น ๋ฐฐ๊ณ ํ..
์ค! ๊ทธ๋ผ ์ฐ๋ฆฌ ์ฌ์น๋๊ฐ ์ข์ํ๋ ๋จ-๋ ํ ๊ตญ๋ฐฅ ๋จน์
๋ชฐ๋ผ.. ๋ฐฐ๊ณ ํ (Error)
๊ตญ๋ฐฅ ๋ง๊ณ ๋ ๋ผ๋ฉด ๋ฐ์ ์์ง๋ง, ์ด๊ฑฐ๋ผ๋ ๋จน์๋ ?
(Error Handling)
Type Checking : ํน์ ๋ชป๋จน๋ ๊ฑฐ ์์ด?
Conditional Check : ์ด์ ๋ญ ๋จน์์ด?
์ค๋น ๋ฐฐ๊ณ ํ..
์ฌ์์น๊ตฌ ๋ง๋๋๋ฐ ์คํจํ๋ค... (SyntaxError)
์ฌ์์น๊ตฌ ๋ง๋๋๋ฐ ์คํจํ๋ค... (SyntaxError)
์ฌ์์น๊ตฌ ๋ง๋๋ ๋ฒ์ ๋ฐฐ์ฐ๊ณ ์ค์ฒํ๋ค
Type Checking : ํน์ ๋ชป๋จน๋ ๊ฑฐ ์์ด?
Conditional Check : ์ด์ ๋ญ ๋จน์์ด?
if (์ด์ ๋จน์๊ฑฐ === ์ผ์)
{ ํ๋ณด๊ตฐ.filter((food) => (food !== ์ผ์))}
์ค๋น ๋ฉ์์ด! ์ญ์ ๊ณฑ์ฐฝ์ด์ผ!
์ค๋น ๋ฐฐ๊ณ ํ..
๋ชฐ๋ผ.. ๋ฐฐ๊ณ ํ (Error)
๊ตญ๋ฐฅ ๋ง๊ณ ๋ ๋ผ๋ฉด ๋ฐ์ ์์ง๋ง, ์ด๊ฑฐ๋ผ๋ ๋จน์๋ ?
(Error Handling)
Type Checking : ํน์ ๋ชป๋จน๋ ๊ฑฐ ์์ด?
Conditional Check : ์ด์ ๋ญ ๋จน์์ด?
์ค๋น ๋ฐฐ๊ณ ํ..
๋ด๊ฐ ์ํ๋ ๊ณฑ์ฐฝ์ ์๋์ง๋ง.. ๊ด์ฐฎ์...
Examples
let word = "apple";
let word = "banana";
// ์ด์ค ์ ์ธ ๋ถ๊ฐ
function printUsername(firstName, lastName){
// firstName๊ณผ lastName์ด ์๋ ๊ฒฝ์ฐ
// firstName๊ณผ lastName์ด ํ์
๋ถ๋ถ๋ช
,
// ๋ ์ค string์ด ์๋ ๊ฒฝ์ฐ ์ด์ํ ๊ฐ ๋ฆฌํด.
// ์ด๋ฅผ ์๊ฒฉํ๊ฒ ์๋ฌ๋ก ๊ฐ์ฃผ,
// ์ปค์คํ
ํ ์๋ฌ ์ ์ ๊ฐ๋ฅ.
return firstName + " " + lastName;
}
function printUsername(firstName, lastName){
if (!firstName) {/* do sth */}
else if (typeof firstName !== string)
{/* do sth */}
else {
return firstName + " " + lastName;
}
}
let firstName = get().parseJSON().firstName
// ์๋ชป๋ JSON์ด ๋์ด์จ๋ค๋ฉด?
function printUsername(firstName, lastName){
if (!firstName) {/* do sth */}
else if (typeof firstName !== string)
{/* do sth */}
else {
return firstName + " " + lastName;
}
}
let firstName;
try {
firstName = get().parseJSON().firstName
} catch (error) {
sendLogToServer(error)
showFallbackUI()
}
function printUsername(firstName, lastName){
if (!firstName) {/* do sth */}
else if (typeof firstName !== string)
{/* do sth */}
else {
return firstName + " " + lastName;
}
}
์ ์ผํ๊ฐ ์์ง?
class Summary extends React.Component {
render() {
const { totalRecovered } = this.props;
return (
<div>
<div className="divValue">
{totalRecovered.toLocaleString()}
</div>
</div>
);
}
}
Summary.propTypes = {
totalConfirmed: PropTypes.number,
totalDeaths: PropTypes.number,
totalRecovered: PropTypes.number
};
class Component extends React.Component {
/* ... */
render() {
if (data) {
result = <Hello />
} else {
result = <Error />
}
return result
}
}
class Component extends React.Component {
/* ... */
render() {
return data ? <Hello /> : <Error />
}
}
class Component extends React.Component {
/* ... */
render() {
return (
{isError && <ErrorAlert />}
<Hello />
)
}
}
์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด Error Boundary์ state๋ฅผ ๋ณ๊ฒฝ
ย
์์ธ ์ฒ๋ฆฌ ํ์ ๋์์ ์ํ
ย
error state๊ฐ true => fallback UI
error state๊ฐ false => this.props.children
(์์ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌ)
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// state๋ฅผ ๊ฐฑ์ ํ์ฌ ๋ค์ ๋ ๋๋ง์์ ๋์ฒด UI๋ฅผ ํ์ํฉ๋๋ค.
return { hasError: true };
}
componentDidCatch(error, info) {
// Example "componentStack":
// in ComponentThatThrows (created by App)
// in ErrorBoundary (created by App)
// in div (created by App)
// in App
logComponentStackToMyService(info.componentStack);
}
render() {
if (this.state.hasError) {
// ๋ณ๋๋ก ์์ฑํ ๋์ฒด UI๋ฅผ ๋ ๋๋งํ ์๋ ์์ต๋๋ค.
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
class App extends React.Component {
constructor(props) {
super(props);
}
/* ... */
render() {
return (
<ErrorBoundary>
<Header />
<Summary />
<Detail />
</ErrorBoundary>
)
}
}
class App extends React.Component {
constructor(props) {
super(props);
}
/* ... */
render() {
return (
<>
<Header />
<Summary />
<DetailErrorBounadary>
<Detail />
</DetailErrorBounadary>
</>
)
}
}