for 루프
for' 루프는 배열의 요소를 반복하거나 지정된 횟수만큼 일련의 명령문을 수행할 수 있게 해주는 JavaScript의 전통적인 반복 구조입니다. 다음은 for 루프의 기본 예입니다
const array = [1, 2, 3, 4, 5];
for (let i = 0; i < array.length; i++) {
// Access each element using array[i]
console.log(array[i]);
}
키 포인트:
- 루프 카운터(예에서는 i)를 수동으로 제어해야 합니다.
- 배열 반복을 위해 더 많은 상용구 코드가 필요합니다.
- 루프 범위 외부의 변수를 수정합니다.
map 방법
map 메소드는 배열에서 사용할 수 있는 JavaScript의 고차 함수입니다. 기존 배열의 각 요소에 제공된 함수를 적용하여 새 배열을 생성합니다. 다음은 map을 사용하는 예입니다.
고차함수란
고차 함수는 하나 이상의 함수를 인수(매개변수)로 사용하거나 결과로 함수를 반환할 수 있는 함수입니다. 즉, 고차 함수는 함수를 인수로 받아들이거나, 함수를 반환하거나, 두 가지 모두를 수행합니다. 이 개념은 함수형 프로그래밍의 핵심 측면입니다.
const array = [1, 2, 3, 4, 5];
const newArray = array.map((element) => {
// Process each element and return a new value
return element * 2;
});
console.log(newArray);
키 포인트:
- 원래 배열을 수정하지 않고 새 배열을 반환합니다.
- 콜백 함수를 사용하여 변환 논리를 정의합니다.
- 배열 변환을 위해 더욱 간결하고 표현력이 풍부한 구문을 제공합니다.
map 사용의 이점:
- 불변성: map의 주요 이점 중 하나는 원본 배열을 수정하지 않고 새 배열을 생성한다는 것입니다. 이는 불변성을 촉진하여 특히 함수형 프로그래밍 패러다임에서 더욱 예측 가능하고 유지 관리 가능한 코드를 만들 수 있습니다.
- 간결함 및 가독성: map 구문은 전통적인 for 루프보다 더 간결하고 표현력이 풍부한 경우가 많습니다. 이렇게 하면 특히 배열의 각 요소에 대해 간단한 변환을 수행할 때 코드를 더 쉽게 읽고 이해할 수 있습니다.
- 선언적 프로그래밍: map의 사용은 달성 방법보다는 달성하려는 목표를 설명하는 데 초점을 맞춘 선언적 프로그래밍 원칙에 잘 맞습니다. 이는 더 설명이 필요 없고 추론하기 쉬운 코드로 이어질 수 있습니다.
- 함수형 프로그래밍 패러다임: map은 배열 변환을 함수형 작업으로 처리하여 함수형 프로그래밍 패러다임에 부합합니다. 이는 더 모듈화되고 구성 가능한 코드로 이어질 수 있습니다.
- 부작용 방지: map은 원본을 수정하지 않고 새 배열을 생성하므로 for 루프 내에서 변수를 수정할 때 발생할 수 있는 의도하지 않은 부작용을 피하는 데 도움이 됩니다.
가독성 측면에서의 map의 이점
짧음:
for의 단점
- for 루프 구문에는 명시적인 초기화(let i = 0), 조건(i < array.length) 및 증가(i++) 문이 필요합니다. 이는 장황한 것으로 인식될 수 있으며 상용구 코드가 도입될 수 있습니다.
map의 이점
- 반면에 map 메소드는 요소 변환에 콜백 함수만 필요하므로 보다 간결한 구문을 제공합니다.
가독성:
for의 단점
- 루프 카운터(i)는 수동으로 관리되므로 주의 깊게 처리하지 않으면 오류가 발생할 수 있습니다.
- 루프의 목적(각 요소를 기록하는 것)은 명확하지만 루프 구조로 인해 기본 목표가 흐트러질 수 있습니다.
map의 이점
- 변환 로직이 콜백 함수 내에 캡슐화되어 있어 작업 목적을 더 쉽게 이해할 수 있습니다.
- 코드는 더 선언적이며 각 요소에 2를 곱한 새 배열을 생성하려는 의도를 표현합니다.
map 메서드의 캡슐화:
- 데이터(배열 요소):
- 연산되는 데이터는 배열 자체이며, 배열 내의 각 요소는 개별 데이터 조각으로 간주됩니다.
- 메서드(콜백 함수):
- 이 경우 메소드는 map 메소드에 제공되는 콜백 함수입니다. 이 함수는 배열의 각 요소를 변환하는 방법을 정의하는 논리를 캡슐화합니다.
- 캡슐화 실행:
- 콜백 함수는 변환 논리를 캡슐화하여 각 요소에서 독립적으로 작동하는 격리된 코드 단위로 만듭니다.
- 변환이 수행되는 방법에 대한 내부 세부 사항은 함수 내에 캡슐화되며 map 메소드 사용자는 구현의 세부 사항을 알 필요가 없습니다.
- 액세스 제어:
- map 메서드 자체는 배열을 반복하고 제공된 콜백 함수를 각 요소에 적용하는 세부 정보를 캡슐화합니다. 반복 프로세스의 복잡성을 추상화합니다.
- 불변성:
- 캡슐화는 불변성 원칙을 지원합니다. 'map' 메소드는 원래 배열을 변경하지 않고 변환된 값으로 새 배열을 생성하기 때문입니다.
요약하면, map 메소드의 맥락에서 캡슐화에는 데이터(배열 요소)와 메소드(콜백 함수의 변환 논리)를 응집력 있는 단위로 묶는 것이 포함됩니다. 이 장치는 데이터에 대한 제어된 액세스를 제공하고, 내부 구현 세부 정보를 숨기고, 보다 모듈화되고 유지 관리 가능한 코드를 생성할 수 있도록 합니다. 캡슐화를 사용하면 JavaScript에서 map 메소드로 작업할 때 코드의 명확성과 표현력이 향상됩니다.
- 데이터 은닉: 캡슐화에는 객체 외부에서 직접 수정하거나 조작하는 것을 방지하기 위해 객체의 일부 구성 요소(속성 또는 메서드)에 대한 액세스를 제한하는 것이 포함됩니다. 이는 특정 속성을 비공개 또는 보호됨으로 선언함으로써 달성되는 경우가 많습니다.
- 액세스 제어: 공용 메소드는 객체의 내부 상태(속성)에 대한 제어된 액세스를 제공하기 위해 정의됩니다. 이러한 메서드는 외부 코드가 개체와 상호 작용하고 조작할 수 있는 인터페이스 역할을 합니다. 필요한 것만 노출하고 구현 세부 사항은 숨기는 것이 아이디어입니다.
- 구현 세부정보: 캡슐화를 사용하면 객체 구현의 내부 세부정보를 외부 세계로부터 숨길 수 있습니다. 이는 복잡성을 관리하고, 모듈성을 촉진하며, 의도하지 않은 간섭이나 개체 상태 수정의 위험을 줄이는 데 도움이 됩니다.
- 정보 은닉: 캡슐화는 객체의 내부 작동을 숨기고 필요한 정보만 노출하는 정보 은닉 개념을 지원합니다. 이는 인터페이스(공용 메소드)와 구현(비공개 또는 보호 속성 및 메소드) 간의 명확한 분리를 촉진합니다.
- 데이터 무결성: 메소드를 통해 객체 속성에 대한 액세스를 제어함으로써 캡슐화를 통해 유효성 검사 및 비즈니스 규칙을 구현할 수 있습니다. 이는 데이터 무결성을 유지하는 데 도움이 되며 개체가 항상 유효한 상태에 있도록 보장합니다.
Java, C++, Python 등 OOP를 지원하는 프로그래밍 언어에서 캡슐화는 재사용 가능하고 유지 관리가 가능한 모듈식 코드 생성을 용이하게 하는 강력한 개념입니다. 잘 정의된 인터페이스 정의의 중요성을 강조하고, 구현 세부 사항을 숨기고, 작업 내에서 관심사 분리를 촉진함으로써 좋은 디자인 관행을 장려합니다.
'javascript Deep Dive' 카테고리의 다른 글
[Javascript] Javascript의 array구현방법, 다른 언어와의 차이점 (0) | 2023.12.29 |
---|---|
[Javascript] var, let, const 차이점과 각각의 사용 이유 (1) | 2023.12.29 |
[Javascript] Javascript vs Java 웹사이트 채택이유 (1) | 2023.12.28 |
[Javascript] V8 엔진 (0) | 2023.12.27 |
[Javascript] 클래스(class) (1) | 2023.12.26 |