210216 TypeScript Book TIL

이 포스팅은 O’Reilly TypeScript책을 통해 공부한 내용과 실습한 내용을 기반으로 작성하였습니다.

오늘 공부한 내용

  • 타입(type)에 대한 이해

    이번에 독서를 통해서 타입(type)대해서 다시 정의해 볼 수 있었다. 기존에는 type에 대한 정의를 단순 data의 형식(string, number, list)에 국한된 개념으로만 알고 있었다.

    하지만 이 책에서는 타입을 값과 이 값으로 할 수 있는 일의 집합으로 정의하고 있다.
    예를들어, number 타입을 정의하자면 number라는 type으로써의 값과 숫자에 적용할 수 있는 모든 연산(+,-,*,/,%,||,&&,?등)과 숫자에 호출할 수 있는 모든 메서드(.concat, .toUpperCase 등)를 포괄적으로 포함하는 개념으로 정의할 수 있다.

    이렇게 정의된 타입(type)의 정의를 통해 타입검사기(typechecker)는 주어진 값으로 할 수 있는 유효한 동작과 유효하지 않은 동작을 구분해서 유효하지 않은 동작이 실행되는 일을 예방할 수 있다.


    Read More

210216 Self Development TIL

Thought of the day

고통은 잠깐이다. 포기는 영원히 남는다.
(Pain is temporary. Quitting lasts forever.)
랜스 암스트롱 / Lance Armstrong


TO DO LIST

  • 독서

    • OReilly TypeScript 독서 17 ~ 33P (완료)
    • OReilly TypeScript 예제 코드실습 (완료)
    • 오늘 배운내용 블로그에 포스팅하기 (완료)
    • 오늘 실습한 내용 GitHub에서 관리하기 (완료)

    Read More

210215 Python TIL 2/2 - Function, Closure, Decorator

Python

Function = First-class function

  • 파이썬에서는 함수를 일급 시민(first class citizen)으로 취급한다.
    아래의 예시코드를 보면, 함수에서 또 다른 함수를 반환할 수 있으며, 함수에서 반환하는 lambda 함수의 경우 본래 heap에 저장이 되지만, 함수에서 반환된 lambda함수를 변수에 넣음으로써 data 영역에 저장된다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def make_difference(operator):
    if operator == '+':
    return lambda x,y:x+y
    if operator == '-':
    return lambda x,y:x-y

    plus = make_difference('+')
    # lambda는 기본적으로 heap에 저장이 되지만, 변수로 다시 넣기 때문에 데이터의 영역으로 저장이 된다.
    print(plus(1,2)) #3

    Read More

210215 Python TIL 1/2 - Module & Package, Library & Framework, Poetry, Virtualenv

Python

Module, Package


  • Module?

    • Python 코드로 이루어진 파일로, 본체에 대한 하위 단위로 정의한다.
  • Package?

    • 관련 여러 모듈들을 하나의 폴더로 묶은 것을 말한다.

    (Module, Package관련 실습내용)
    (1) fibo.py와 main.py 파일을 만들어서 실습을 진행한다.
    fibo에 정의되어있는 text변수의 값을 main.py에서 출력한다.

    1
    2
    3
    from fibo import text

    print(text)

    Read More

210215 TypeScript Book TIL

이 포스팅은 O’Reilly TypeScript책을 통해 공부한 내용과 실습한 내용을 기반으로 작성하였습니다.

오늘 공부한 내용

  • 컴파일과 실행에 대한 이해

    이번에 읽은 내용에서 가장 유익하다고 느꼈던 내용이다. 실제 코드를 작성하고 실행을 했을때 내부에서 구체적으로 어떤 과정에 의해서 처리가 되는지 잘 몰랐었는데 이번 기회에 제대로 알 수 있었던 것 같다.
    특히 타입스크립트는 자바스크리트나 자바와 같은 주요 언어와는 다른 방식으로 동작하기 때문에 이 부분에 대해서 정리를 해보려고 한다.

    • 일반적으로 프로그래머가 작성한 텍스트(코드)는 컴파일러(compiler)라는 프로그램이 파싱(Parsing)하여, AST(Abstract Syntax Tree, AST)라는 자료구조로 변환된다. 이 AST는 공백, 주석, 탭, 공백 등의 결과를 무시한다.

      컴파일러는 이 AST 자료구조를 바이트 코드(bytecode)라는 하위 수준의 표현으로 변환을 한다.
      이렇게 만들어진 바이트 코드는 런타임(runtime)이라는 다른 프로그램에 입력해서 평가하고 결과를 얻을 수 있는 것이다.
      1. 텍스트 코드 => 컴파일러(Compiler) => AST(Abstract Syntax Tree)
      2. AST(Abstract Syntax Tree) => 컴파일러(Compiler) => 바이트 코드(bytecode)
      3. 런타임(Runtime) => 바이트 코드(bytecode)

    즉 일반적으로 프로그램을 실행한다는 것은 컴파일러가 소스코드를 파싱해서 AST로 만들고 이 AST를 바이트코드로 변환한 것을 런타임이 평가하도록 지시하는 일련의 과정을 의미한다.

    Read More

210215 Self Development TIL

Thought of the day

끝까지 해보기 전까지는 늘 불가능해 보입니다.
(It always seems impossible until its done.)
넬슨 만델라 / Nelson Mandela


TO DO LIST

  • 독서

    • OReilly TypeScript 독서 1 ~ 17P (완료)
    • OReilly TypeScript 예제 및 연습문제 연습용 Repository 생성 (완료)
    • OReilly TypeScript 17P 연습문제 실습 (완료)
    • 오늘 배운내용 블로그에 포스팅하기 (완료)
  • Python 과제

    • (1) 교재에 있는 연습문제 (완료)
    • (2) 0216 월간테스트 준비하기 (완료)

    Read More

210214 Python HackerRank Assignment

HackerRank

설날 과제로 강사님이 내주신 HackerRank의 과제에 대해서 정리한다.

문제 1

Problem1 Link(HackerRank)

이 문제는 주어진 클래스의 상속관계를 완성하고, 주어진 조건으로 내부에 method를 완성시키면 되는 간단한 문제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Student(Person):

# Class Constructor
#
# Parameters:
# firstName - A string denoting the Person's first name.
# lastName - A string denoting the Person's last name.
# id - An integer denoting the Person's ID number.
# scores - An array of integers denoting the Person's test scores.
#
# Write your constructor here
def __init__(self, _firstName, _lastName, _id, _scores):
Person.__init__(self, _firstName, _lastName, _id)
self.scores = _scores
# Function Name: calculate
# Return: A character denoting the grade.
#
# Write your function here
def calculate(self):
average = sum(self.scores) / len(self.scores)
if 90 <= average <= 100:
grade = "O"
elif 80 <= average < 90:
grade = "E"
elif 70 <= average < 80:
grade = "A"
elif 55 <= average < 70:
grade = "P"
elif 40 <= average < 55:
grade = "D"
else:
grade = "T"
return grade

Read More

210214 Self Development TIL

Thought of the day

가장 큰 영광은 한 번도 실패하지 않음이 아니라 실패할 때마다 다시 일어서는 데에 있다.
(Our greatest glory is not in never falling. but in rising every time we fall.)
공자 / Confucius


TO DO LIST

210213 Bundle size와 Lazy loading


Bundle size와 Lazy loading

React routing test를 하면서 각 각의 Component를 lazy loading하여 테스트를 진행하였다.

lazy loading(지연로딩)에 대해서 좀 더 자세하게 알아두고자 포스팅으로 정리를 해둔다.

React app의 크기가 커짐에 따라 개발자는 bundle size에 대한 걱정을 시작해야 할 수 있다. 이 bundle size란 사용자가 React app을 load하기 위해 download해야만 하는 JavaScript의 양을 의미한다.
이 Bundle size가 클수록 사용자가 app으르 보는데 시간이 오래걸린다.

따라서 이 Lazy를 사용해서 component가 rendering 될때에 사용되지 않는 구성요소에 대한 로드를 지연시킬 수 있다.

Read More