Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- physical media
- 가로모드끄기
- 페이지이동함수
- SwiftUI Font
- 컴퓨터네트워크
- 동기 함수 내에서 비동기 함수 호출
- access network
- react-router-dom
- navigationBar 숨기기
- 반응형 css
- react hook
- 상단 빈공간 제거
- @environmentobject 프로퍼티 래퍼
- 비동기함수
- C++
- 리렌더링최적화
- featured-sliced-design
- CSS
- 페이지전환
- GridItem
- 세로모드끄기
- BFS
- @observedobject 프로퍼티 래퍼
- LazyVGrid
- react fsd
- LazyHGrid
- 블로그업로드확인
- 리액트최적화
- network core
- @published 프로퍼티 래퍼
Archives
- Today
- Total
leebaek
[JS] JavaScript 특징에 대해 알아보자! 본문
■ JavaScript
: 가볍고 유연한 인터프리터 또는 JIT(Just-In-Time) 컴파일 방식의 동적 프로그래밍 언어이다.
인터프리터란 ?
더보기
더보기
프로그래밍 언어의 코드를 한 줄씩 읽고 바로 실행하는 방식
소스 코드를 기계어로 변환하면서 즉시 실행하는 프로그램
- 코드를 실행할 때, 전체를 컴파일하지 않고 한 줄씩 번역하며 실행함
- 실행이 빠르게 시작 되지만, 매번 실행할 때마다 번역해야하므로 속도가 느릴 수 있음
- 인터프리터 언어는 특정 운영체제(OS)에 종속되지 않으며, 다양한 환경에서 실행 가능
-> 즉시 실행 가능, 디버깅이 쉬움, 컴파일 과정이 필요없음, 이식성이 좋음
■ JavaScript의 주요 특징
□ 프로토타입 기반 (Prototype-based)
- 클래스 기반 언어와 달리, 객체가 다른 객체를 상속하는 방식으로 동작한다.
- Object.create()나 prototype을 활용해 객체를 확장할 수 있다.
- 프로토타입 체인 : 객체에서 속성이나 메서드를 찾을 때 자신에게 없으면 부모(프로토타입) 객체를 따라 올라가며 찾는 구조이다.
프로토타입 기반 객체 지향 프로그래밍(Prototype-based OOP): 클래스 없이 객체를 직접 복제(상속)하여 새로운 객체를 생성하는 방식 |
□ 일급 함수 (First-class Functions)
- 함수가 변수에 할당될 수 있고, 다른 함수의 인자로 전달되거나 반환될 수 있다.
- 고차 함수(Higher-Order Functions)와 콜백 함수 사용이 가능하다.
const sayHello = function() {
console.log("Hello!");
};
sayHello(); // Hello!
function execute(func) {
func(); // 전달받은 함수를 실행
}
function greet() {
console.log("Hi there!");
}
execute(greet); // Hi there!
function createMultiplier(multiplier) {
return function(number) {
return number * multiplier;
};
}
const double = createMultiplier(2);
console.log(double(5)); // 10
const operations = {
add: (a, b) => a + b,
multiply: (a, b) => a * b
};
console.log(operations.add(3, 5)); // 8
console.log(operations.multiply(3, 5)); // 15
□ 다중 패러다임 지원 (Multi-paradigm)
- 객체지향 프로그래밍(OOP): 객체와 메서드를 활용하여 상태를 관리한다.
- 명령형 프로그래밍(Imperative Programming): 명령어를 순차적으로 실행한다.
- 함수형 프로그래밍(Functional Programming): 순수 함수와 불변성을 강조한다.
class Calculator {
constructor() {
this.result = 0;
}
add(value) {
this.result += value;
return this; // 메서드 체이닝 지원
}
subtract(value) {
this.result -= value;
return this;
}
getResult() {
return this.result;
}
}
// 명령형 스타일 사용
const calc = new Calculator();
calc.add(10).subtract(3);
console.log(calc.getResult()); // 7
// 함수형 스타일 적용
const numbers = [1, 2, 3, 4, 5];
const total = numbers.map(n => n * 2).reduce((acc, num) => acc + num, 0);
console.log(total); // 30
□ 동적 타입 (Dynamically Typed)
- 변수의 타입을 명시적으로 선언할 필요가 없으며, 런타임에 결정된다.
- var, let, const로 변수를 선언할 수 있으며, typeof 연산자를 사용해 타입을 확인할 수 있다. ( var는 권장 X )
let message = "Hello"; // 문자열(string)
message = 42; // 숫자(number)
message = true; // 불리언(boolean)
console.log(message); // true
□ 단일 스레드, 비동기 처리 (Single-threaded, Asynchronous)
- 이벤트 루프(Event Loop)를 기반으로 한 비동기 프로그래밍을 지원한다.
- setTimeout, setInterval, Promise, async/await를 통해 비동기 작업을 처리한다.
□ 자동 메모리 관리 (Garbage Collection)
- 불필요한 메모리를 자동으로 정리하는 가비지 컬렉션(GC) 기능을 제공한다.
더보기
더보기
1) 참조 카운팅(Reference Counting)
- 변수가 참조되고 있으면 메모리를 유지, 참조가 없으면 해제
2) 마크 앤 스위프(Mark-and-Sweep)
- 주기적으로 도달할 수 없는(사용되지 않는) 객체를 찾아 정리
3) 순환 참조 해결
장점 :
개발자가 직접 메모리 해제를 할 필요 없음 → 편리함
메모리 누수 방지 가능 (하지만 100% 방지는 아님)
단점 :
언제 실행될지 예측 불가 → 성능 저하 가능
메모리 누수가 발생할 수 있음 (특히 전역 변수 남발 시)
□ ECMAScript 표준 기반
- ECMAScript(ES) 는 JavaScript의 공식 표준
- ECMAScript(ES6, ES7, …) 표준을 따라 발전하고 있으며, 새로운 기능이 지속적으로 추가된다.
'웹 > JavaScript' 카테고리의 다른 글
[JS] 익명함수와 기명함수 | 함수 표현식 vs 함수 선언식 (0) | 2025.04.02 |
---|