πŸ₯•
TIL
  • [TIL] Studying tech / computer science knowledge
  • KeyMap
  • μ•Œκ³ λ¦¬μ¦˜
    • λ³΅μž‘λ„ 계산 ( Computational Complexity )
    • DisjointSet-unionFind
    • Bellman-ford Algorithm
    • Dijkstra's Algorithm
    • DP ( Dynamic Programming , 동적 κ³„νšλ²• )
    • ν”Œλ‘œμ΄λ“œ-μ›Œμ…œ μ•Œκ³ λ¦¬μ¦˜ (Floyd-Warshall algorithm)
    • Kruskal's Algorithm
    • 졜μž₯ 증가 μˆ˜μ—΄ (Longes Increasing Subsequence)
    • Prim's Algorithm
    • μ •λ ¬
    • μ‹œκ°„λ³΅μž‘λ„ 와 κ³΅κ°„λ³΅μž‘λ„ ( Time Complexity & Space Complexity )
    • Topological Sort (μœ„μƒ μ •λ ¬)
  • μ±… μ½κ³ λ‚œ ν›„ μš”μ•½
    • ν”„λ‘œκ·Έλž˜λ° λŒ€νšŒμ—μ„œ λ°°μš°λŠ” μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œν•΄κ²° μ „λž΅
    • cleancode
    • 도메인 주도 μ„€κ³„λ‘œ μ‹œμž‘ν•˜λŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 개발
    • 였브젝트
  • CDC
    • debzium
    • kafka
  • 개발 상식
    • asciidoctor
    • 컴파일러
    • ELK μŠ€νƒ
    • μ—”λ””μ•ˆ
    • git
    • Gitmoji
    • ν…ŒμŠ€νŠΈ μ’…λ₯˜
    • λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬
    • μ •κ·œ ν‘œν˜„μ‹
    • REST API
    • 동기와 비동기 / Blockingκ³Ό NonBlocking
    • Transaction Script와 Domain Model
    • λ””μžμΈ νŒ¨ν„΄
      • 행동 νŒ¨ν„΄
      • 객체 생성 νŒ¨ν„΄
        • 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄
        • λΉŒλ” νŒ¨ν„΄
        • νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄
        • [생성 νŒ¨ν„΄] ν”„λ‘œν†  νƒ€μž… (Prototype Parttern)
        • 싱글톀
      • ꡬ쑰 νŒ¨ν„΄
        • μ–΄λŒ‘ν„° νŒ¨ν„΄
        • λΈŒλ¦Ώμ§€ νŒ¨ν„΄
        • 컴포짓(Composite) νŒ¨ν„΄
        • λ°μ½”λ ˆμ΄ν„°
        • ν”„λ‘μ‹œ
    • refactoring
      • 쀑볡 μ½”λ“œ
      • μ „μ—­ 데이터
      • κΈ΄ ν•¨μˆ˜
      • κΈ΄ λ§€κ°œλ³€μˆ˜ λͺ©λ‘
      • κ°€λ³€ 데이터
      • μ΄ν•΄ν•˜κΈ° νž˜λ“  이름
  • 자료ꡬ쑰
    • AVL Tree
    • Splay Tree
    • aaTree
    • array-list
    • 자료ꡬ쑰 μ‹œκ°„/곡간 λ³΅μž‘λ„
    • κ·Έλž˜ν”„
    • νž™
    • Red Black Tree
    • stack-queue
    • 트리 ( Tree )
  • DevOps
    • MSA
    • Kubernetes
      • AccessingAPI
      • controller
      • dashboard
      • kubernetes
      • object
      • pod
      • service
      • volume
  • Java
    • μ–΄λ…Έν…Œμ΄μ…˜
    • μ œμ–΄λ¬Έ
    • 데이터 νƒ€μž…
    • Enum
    • jvm
    • μ—°μ‚°μž
    • thread
    • Java8
      • CompletableFuture
      • Date/Time
      • μ–΄λ…Έν…Œμ΄μ…˜κ³Ό λ©”νƒ€μŠ€νŽ˜μ΄μŠ€
      • μΈν„°νŽ˜μ΄μŠ€
      • λžŒλ‹€μ‹
      • Optional
      • 슀트림
  • JavaScript
    • moduleProject
    • webpack-babel
    • μ½”μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ
      • array
      • ν•¨μˆ˜ 바인딩
      • λ°μ½”λ ˆμ΄ν„°μ™€ ν¬μ›Œλ”©
      • Class
      • 비ꡐ μ—°μ‚°μž
      • Date λ‚΄μž₯ 객체
      • destructuring-assignment
      • function
      • ν•¨μˆ˜μ˜ prototype ν”„λ‘œνΌν‹°
      • κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ ( Garbage Collection )
      • JSON (JavaScript Object Notation)
      • map-set
      • λ‚΄μž₯ ν”„λ‘œν† νƒ€μž…
      • newμ—°μ‚°μžμ™€ μƒμ„±μž ν•¨μˆ˜
      • 객체
      • Object.keys, values, entries
      • μ˜΅μ…”λ„ 체이닝 '?.'
      • ν”„λ‘œνΌν‹° ν”Œλž˜κ·Έ
      • ν”„λ‘œνΌν‹° μ’…λ₯˜
      • ν”„λ‘œν†  νƒ€μž…
      • 호좜 μŠ€μΌ€μ€„λ§ ( scheduling a call )
      • scope
      • this
      • type-conversions
      • type
      • ν•¨μˆ˜μ˜ μžλ£Œν˜•
      • var_let_const
  • Linux
    • κΈ°λ³Έ λͺ…λ Ήμ–΄
    • 파일 μ’…λ₯˜
    • λ¦¬λˆ…μŠ€
  • λ„€νŠΈμ›Œν¬
    • μ‘μš© 계측 ( Application Layer )
    • 였λ₯˜ κ²€μΆœκ³Ό 였λ₯˜ μ •μ •
    • Http
    • Http Header
    • 컴퓨터 λ„€νŠΈμ›Œν¬λž€
    • λ„€νŠΈμ›Œν¬ 계측
    • λ„€νŠΈμ›Œν¬ μ œμ–΄ μ˜μ—­
    • 전솑 계측 ( Transport Layer )
  • PHP
    • Facade
    • composer
    • scopeResolutionOperator
    • Laravel
      • SocialProvider
      • architecture
      • blade
      • controller
      • db
      • dbArchitecture
      • debug
      • eloquent
      • email
      • event
      • exceptionHandling
      • middleware
      • model
      • modelFactory
      • pagingLoading
      • queryBuilder
      • route
      • scout
      • seeding
      • tntsearch
      • validate
      • view
  • React
    • Next.js
    • React λž€?
  • Spring
    • Controller
    • μš”μ²­μ΄ λ“€μ–΄μ™”μ„λ•Œ μŠ€ν”„λ§μ΄ μ²˜λ¦¬ν•˜λŠ” 방법 ( 내뢀ꡬ쑰 )
    • ConfigurationProperties
    • Entity / DTO / VO
    • Maven
    • Repository와 DAO
    • μŠ€ν”„λ§ 빈
    • Spring Framework
    • MVC νŒ¨ν„΄
    • 도메인 μž…λ ₯κ°’ 검증
    • Spring Cloud
      • Spring Cloud
      • Eureka
    • Spring Data
      • JPA
      • JPA μ–΄λ…Έν…Œμ΄μ…˜
      • μ—”ν‹°ν‹° 비ꡐ
      • 볡합 킀와 식별 관계 λ§€ν•‘
      • JPA μ˜ˆμ™Έμ²˜λ¦¬
      • 객체지ν–₯ 쿼리
      • EntityManagerFactory와 EntityManager
      • JPA μ΅œμ ν™”
      • ν”„λ‘μ‹œμ™€ 연관관계 λ§΅ν•‘
      • 연관관계
      • 상속관계 λ§΅ν•‘
      • νŠΈλžœμž­μ…˜ λ²”μœ„μ™€ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ
      • 데이터 νƒ€μž…
      • MySQL μ—°κ²°
      • Pageable
    • Spring Projectλ“€κ³Ό library
      • Custom Serialize
      • Elasticsearch Index API
      • Spring HATEOAS
      • lombok (둬볡)
      • Model Mapper
      • Object Mapper
      • Representation Model
      • Spring REST Docs
      • Spring Boot
    • Spring Security
      • Spring Security
      • Authentication
      • Authentication Filter
      • Authorization Filter
      • Filter Chain
      • SecurityContext
      • Spring OAuth2.0
    • Spring Test
      • AssertJ
      • Junit5
      • JunitParams
      • Mock Object
  • DataBase
    • ALIAS
    • CONCAT
    • CTE
    • Group By
    • HAVING
    • IFNULL
    • 인덱슀
    • JOIN
    • ORDER BY
    • ROLLUP
    • SELECT
    • SELECT DISTINCT
    • SQL
    • WHERE
  • Web 상식
    • OAuth
    • WAS
    • HTTP톡신 기반 인증
    • λΈŒλΌμš°μ €
    • CSR κ³Ό SSR
    • HTTPS
    • Web
Powered by GitBook
On this page
  • ν•¨μˆ˜ 선언식
  • ν•¨μˆ˜ ν‘œν˜„μ‹
  • 콜백 ν•¨μˆ˜
  • ν•¨μˆ˜ ν‘œν˜„μ‹κ³Ό ν•¨μˆ˜ μ„ μ–Έλ¬Έ 차이
  • 1. js엔진이 ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” μ‹œκΈ°
  • μŠ€μ½”ν”„
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜
  • νŠΉμ§•
  • λ§€κ°œλ³€μˆ˜
  1. JavaScript
  2. μ½”μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ

function

ν•¨μˆ˜ 선언식

function sayHello() {
  alert('hello');
}
sayHello();

let func = sayHello(); //이처럼
fucn(); //λ³€μˆ˜μ— λŒ€μž…λ„ κ°€λŠ₯

ν•¨μˆ˜ ν‘œν˜„μ‹

jsλŠ” ν•¨μˆ˜λ₯Ό νŠΉλ³„ν•œ λ™μž‘μ„ ν•˜λŠ” ꡬ쑰가 μ•„λ‹Œ νŠΉλ³„ν•œ μ’…λ₯˜μ˜ κ°’μœΌλ‘œ μ·¨κΈ‰

λ”°λΌμ„œ, ν•¨μˆ˜λ₯Ό 볡사해 λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•  μˆ˜λ„ μžˆλ‹€.

μ•„λž˜μ½”λ“œλ₯Ό 보면 ν•¨μˆ˜μ˜ 이름없이 λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

let sayHello = fucntion(){
    alert( "hello");
}

sayHello();

콜백 ν•¨μˆ˜

ν•¨μˆ˜λ₯Ό ν•¨μˆ˜μ˜ 인자둜 μ „λ‹¬ν•˜κ³ , ν•„μš”ν• λ•Œ 인수둜 μ „λ‹¬ν•œ κ·Έ ν•¨μˆ˜λ₯Ό λ‚˜μ€‘μ— ν˜ΈμΆœν•˜λŠ” 것

μ•„λž˜μ˜ μ½”λ“œλ₯Ό 보면 yes의 인자둜 alert('λ™μ˜')κ°€, no의 인자둜 alert('μ·¨μ†Œ')κ°€ ν• λ‹Ήλ˜λŠ” 것을 볼수 μžˆλ‹€.

function ask(question, yes, no) {
  if (confirm(question)) yes();
  else no();
}

ask(
  'λ™μ˜ν•˜μ‹­λ‹ˆκΉŒ?',
  function () {
    alert('λ™μ˜ν•˜μ…¨μŠ΅λ‹ˆλ‹€.');
  }, //ν•¨μˆ˜ ν‘œν˜„μ‹
  function () {
    alert('μ·¨μ†Œ λ²„νŠΌμ„ λˆ„λ₯΄μ…¨μŠ΅λ‹ˆλ‹€.');
  } //ν•¨μˆ˜ 이름 없이 μ‚¬μš©
);

ν•¨μˆ˜ ν‘œν˜„μ‹κ³Ό ν•¨μˆ˜ μ„ μ–Έλ¬Έ 차이

1. js엔진이 ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” μ‹œκΈ°

ν•¨μˆ˜ ν‘œν˜„μ‹μ€ μ‹€μ œ μ‹€ν–‰ 흐름이 λ„λ‹¬ν–ˆμ„λ•Œ μƒμ„±ν•˜κ³ , ν•¨μˆ˜ 선언문은 μ •μ˜λ˜κΈ°μ „μ—λ„ ν˜ΈμΆœν•  수 μžˆλ‹€. -> ν•¨μˆ˜ 선언은 μ „μ—­ν•¨μˆ˜λ‘œ 선언이 되며, jsλŠ” 슀크립트 μ‹€ν–‰μ „ λͺ¨λ“  선언문을 μ°Ύκ³  생성후에 μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

κ·Έλž˜μ„œ, μ•„λž˜μ™€ 같이 μ„ μ–Έλ¬Έ 전에 ν˜ΈμΆœμ„ 해도 싀행을 ν•˜λ©΄ λ™μž‘μ΄ κ°€λŠ₯ν•˜λ‹€.

sayHi('John');

function sayHi(name) {
  alert(`Hello, ${name}`);
}

ν•˜μ§€λ§Œ ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λΆˆκ°€λŠ₯ν•˜λ‹€.

μŠ€μ½”ν”„

ν•¨μˆ˜ 선언문은 ν•¨μˆ˜κ°€ μ„ μ–Έλœ μ½”λ“œ λΈ”λŸ­ μ•ˆμ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.

λ§Œμ•½ λ°˜λ³΅λ¬Έμ΄λ‚˜ if와같이 {}μ•ˆμ— ν•¨μˆ˜λ₯Ό μ„ μ–Έν•™κ³  λ°–μ—μ„œ ν˜ΈμΆœν•  μ‹œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

if (true) {
  function welcome() {
    alert('μ•ˆλ…•!');
  }
}

welcome(); // Error: welcome is not defined

μœ„μ™€ 같이 μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ ν•¨μˆ˜ ν‘œν˜„μ‹μ„ μ‚¬μš©.

let welcome;
if(true){
    welcome = fuction(){
        alert("μ•ˆλ…•!");
    }
}

welcome(); //μ•ˆλ…•!

ν™”μ‚΄ν‘œ ν•¨μˆ˜

ν•¨μˆ˜ ν‘œν˜„μ‹λ³΄λ‹€ λ‹¨μˆœν•˜κ³  κ°„κ²°ν•œ λ¬Έλ²•μœΌλ‘œ ν•¨μˆ˜λ₯Ό 생성.

μ»¨νƒμŠ€νŠΈκ°€ μžˆλŠ” κΈ΄μ½”λ“œλ³΄λ‹€ 자체 μ»¨ν…μŠ€νŠΈκ°€ μ—†λŠ” 짧은 μ½”λ“œλ₯Ό 담을 μš©λ„

let sum = function (a, b) {
  return a + b;
};
let sum = (a, b) => a + b;

μΈμˆ˜κ°€ ν•˜λ‚˜λ°–μ— μ—†λ‹€λ©΄ κ΄„ν˜Έλ₯Ό μƒλž΅ κ°€λŠ₯ν•˜κ³ , μΈμˆ˜κ°€ 없을땐 κ΄„ν˜Έ μƒλž΅ λΆˆκ°€λŠ₯ν•˜λ‹€.

let sum = (a) => a;

let sum2 = () => 1;

ν•¨μˆ˜ λ‚΄μš©μ΄ μ—¬λŸ¬μ€„μΌλ•ŒλŠ” μ€‘κ΄„ν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ λ¬Άμ–΄μ€€λ‹€.

let sum = (a, b) => {
  let sum = a + b;
  return a + b;
};

νŠΉμ§•

  • thisκ°€ μ—†κΈ°λ•Œλ¬Έμ— μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•˜λ‹€. thisλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ™ΈλΆ€μ—μ„œ 값을 κ°€μ Έμ˜¨λ‹€. thisκ°€ μ—†κΈ° λ•Œλ¬Έμ— new와 ν•¨κ»˜ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•΄ μƒμ„±μž ν•¨μˆ˜λ‘œ μ‚¬μš©ν•  수 μ—†λ‹€.

    thisκ°€ μ—†κΈ°λ•Œλ¬Έμ— arr.forEach()λ‚˜ setTimeout()κ³Ό 같은 ν•¨μˆ˜λ‚΄μ—μ„œ ν˜„μž¬ μ»¨ν…μŠ€νŠΈλ₯Ό μžƒμ§€ μ•Šκ³  μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ‹€. (forEachλŠ” λ°°μ—΄ arr의 μš”μ†Œ λŒ€μƒμœΌλ‘œ 싀행이 κ°€λŠ₯ν•˜κ³  setTimeout은 λ‚΄μž₯ μŠ€μΌ€μ€„λŸ¬λ₯Ό λŒ€μƒμœΌλ‘œ μ‹€ν–‰)

  • μœ μ‚¬ λ°°μ—΄ 객체인 argumentsκ°€ μ—†λ‹€.

    λ•Œλ¬Έμ— thisκ°’κ³Ό arguments값을 ν•¨κ»˜ μ‹€μ–΄ ν˜ΈμΆœμ„ ν¬μ›Œλ”©ν•΄μ£ΌλŠ” λ°μ½”λ ˆμ΄ν„°λ₯Ό λ§Œλ“€λ•Œ μœ μš©ν•˜λ‹€.

unction defer(f, ms) {
  return function() {
    setTimeout(() => f.apply(this, arguments), ms)
  };
}

function sayHi(who) {
  alert('μ•ˆλ…•, ' + who);
}

let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("철수"); // 2초 ν›„ "μ•ˆλ…•, 철수"κ°€ 좜λ ₯λ©λ‹ˆλ‹€.

μœ„μ™€ 같은 μ½”λ“œλ₯Ό μ΄μš©ν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 args와 ctxλ₯Ό λ°˜λ“œμ‹œ μƒμ„±ν•΄μ€˜μ•Όν•œλ‹€.

function defer(f, ms) {
  return function (...args) {
    let ctx = this;
    setTimeout(function () {
      return f.apply(ctx, args);
    }, ms);
  };
}

λ§€κ°œλ³€μˆ˜

μ‹€μ œ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜ μΈμžλŠ” 2개둜 선언을 ν–ˆμ–΄λ„, 호좜 μ‹œ λ§€κ°œλ³€μˆ˜λ₯Ό μ—¬λŸ¬κ°œ 넣어주어도 μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€.

function sum(a, b) {
  return a + b;
}

alert(sum(1, 2, 3, 4, 5)); //3

argumentsλΌλŠ” νŠΉμˆ˜ν•œ μœ μ‚¬ λ°°μ—΄ 객체가 μ‘΄μž¬ν•΄ 이λ₯Ό μ΄μš©ν•΄ λͺ¨λ“  인수λ₯Ό μ ‘κ·Όκ°€λŠ₯ν•˜λ‚˜ ν™”μ‚΄ν‘œ ν•¨μˆ˜μ—λŠ” argumentsκ°€ μ—†λ‹€.

function hello() {
  alert(arguments.length);
  alert(arguments[0]);
}

hello('hi', 'hello'); // 2, hi
  • spread 문법 :

    ν•¨μˆ˜μ— λ°°μ—΄μ˜ μš”μ†Œλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ μ—¬λŸ¬κ°œλ₯Ό μž…λ ₯ν• λ•Œ, 일일히 μˆ˜λ™μž…λ ₯이 μ•„λ‹Œ μžλ™μœΌλ‘œ μž…λ ₯ν•  수 있게 ν•΄μ£ΌλŠ” 문법

    λ§κ·ΈλŒ€λ‘œ arrayλ₯Ό μ „κ°œμ‹œμΌœμ£ΌλŠ” λ¬Έλ²•μœΌλ‘œ λ°°μ—΄μ•žμ— ...을 λΆ™μ—¬μ£Όλ©΄λœλ‹€.

    let arr = [3, 5, 1];
    alert(Math.max(...arr)); //  5

    λ°°μ—΄λΏλ§Œμ΄ μ•„λ‹ˆλΌ μ΄ν„°λŸ¬λΈ” 객체라면 λͺ¨λ‘ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

    let str = 'hello';
    alert([...str]); //h,e,l,l,o

    μ΄λŠ” 문법 λ‚΄λΆ€μ—μ„œ iteratorλ₯Ό μ‚¬μš©ν•΄ μš”μ†Œλ₯Ό μˆ˜μ§‘ν•΄ 각각의 값을 λ°˜ν™˜ν•˜μ—¬ []둜 감싸 문자 λͺ©λ‘λ“€μ„ λ°°μ—΄λ‘œ λ§Œλ“€μ–΄μ£ΌκΈ° λ•Œλ¬Έμ— λ‹€μŒκ³Ό 같은 좜λ ₯κ²°κ³Όλ₯Ό 보인닀.

    λ”°λΌμ„œ [...obj]을 μ΄μš©ν•΄ 배열을 λ§Œλ“€ 수 μžˆμ§€λ§Œ Array.from(obj)와 λΉ„κ΅ν•΄μ„œ [...obj]λŠ” μœ μ‚¬ λ°°μ—΄ κ°μ²΄μ—λŠ” μ‚¬μš©ν•  수 μ—†λ‹€λŠ” 단점이 μžˆμ–΄ 무언가λ₯Ό λ°°μ—΄λ‘œ λ§Œλ“€λ•ŒλŠ” Array.from()을 μ΄μš©ν•œλ‹€.

Previousdestructuring-assignmentNextν•¨μˆ˜μ˜ prototype ν”„λ‘œνΌν‹°

Last updated 3 years ago