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 | 31 |
Tags
- 프로그래머스
- js
- 제로베이스
- IT 지식
- nomadcoders
- K-Digital Credit
- 노마드 코더
- Do it! 시리즈
- 알고리즘
- 공부를 가장한 일기일지도
- boj
- 비전공자를 위한
- 자격증
- 구름edu
- CodeStates
- javascript
- 이해할 수 있는
- 자바스크립트
- SQLD
- 노개북
- SQL 개발자
- 노마드코더
- 티스토리챌린지
- 오블완
- 개발자북클럽
- 톺아보기
- 최원영 저자
- 모던 자바스크립트 deep dive
- 엘리스코딩
- 백준
Archives
- Today
- Total
개발자를 희망하는 초보의 자기개발 이야기
[혼공스] 4주차 Chapter 05 함수 본문
반응형
기본 미션
p. 202 <윤년을 확인하는 함수 만들기> 예제를 실행하여 2022년이 윤년인지 확인하는 결과 인증하기
const isLeapYear = function (year) {
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
};
선택미션
p. 240 확인 문제 1번 풀고, 풀이 과정 설명하기
논리연산자 &&를 통해 3가지 조건에 일치하는 값을 필터링 하도록 했다.
filter 메서드는 비파괴적처리를 하기 때문에 result라는 새로운 변수에 필터링된 결과값을 할당했고,
console.log에는 결과값이 할당된 result 변수를 출력했다.
// 변수를 선언합니다.
let numbers = [273, 25, 75, 52, 103, 32, 57, 24, 76]
// 처리합니다.
let result = numbers.filter((el) => el % 2 === 1 && el <= 100 && el % 5 === 0);
// 출력합니다.
console.log(result)
학습 기록
함수
- 함수는 코드의 묶음이다.
- 반복되는 작업을 한 번만 정의하면 필요시 재사용할 수 있어서 효율적이다.
- 긴 프로그램을 기능별로 함수로 분리하면 모듈화되어 전체 코드의 가독성이 좋아진다.
- 기능별로 수정이 가능하므로 유지보수가 쉽다.
함수 선언 방법:
- 대괄호 안에 쉼표로 구분된 값들을 넣어 만든다.
- 배열 내부의 각 값을 요소(element)라고 부른다.
const 함수명 = function () {
실행될 내용
}
함수 호출:
- 함수명과 () 괄호를 사용해서 호출한다.
- 함수 내부에서 외부 변수를 사용할 수 있다.
- 함수는 실행 시 점프와 리턴 과정이 발생한다.
- 점프: 호출 위치에서 함수 본문으로 이동하는 것이다.
- 리턴: 함수 본문에서 호출 위치로 나오는 것이다.
const 함수명 = function () {
동작 실행
return // 값을 가지고 원래 위치로 리턴한다.
}
함수명(); // 함수가 실행되면서 함수 내부로 점프한다.
교재 외 프로시저 함수:
- 전통적으로 매개변수가 없는 함수를 의미한다.
- 보통 return 문이 없거나 반환값이 없고, 출력(console.log), API요청, 데이터 저장, 파일 처리 등의 작업을 수행한다.
- 현대 프로그래밍에서는 매개변수 유무와 관계없이 동작을 중심으로 판단한다.
- 즉, 매개변수가 있더라도 반환값 없이 특정 동작을 수행하는 함수는 프로시저 함수라고 볼 수 있다.
const sayHello = function () {
console.log("Hello, world!");
};
sayHello(); // 실행하지만 반환값이 없음
const sayHello2 = function (name) {
console.log(`Hello, ${name}!`);
};
sayHello2("yoonTeacher"); // 실행하지만 반환값이 없음
수학적 함수:
- 매개변수를 받아 계산 후 결과를 리턴하는 방식이다.
- 함수 내부에 리턴 키워드를 사용한다.
- OO의 리턴값은 OO다 라고 표현한다.
const sum = function (a, b) {
return a + b; // 값을 가지고 원래 위치로 리턴한다.
};
sum(1, 2); // 함수에서 각각의 위치 a와 b에 해당 값을 할당하면서 점프한다.
함수의 두 가지 표기 방법 - 익명 함수와 선언적 함수
- 익명 함수와 선언적 함수는 표기 방법만 다를 뿐 동작은 거의 같다.
- 초기에는 선언적 함수 형태를 많이 사용했지만, 현대 자바스크립트에서는 익명 함수 형태를 더 많이 사용한다.
선언적 함수(함수 선언식)
- function 키워드로 함수를 선언한다.
- 함수의 이름이 필수다.
function g() {
return b;
}
교재 외 함수 표현식
함수 표현식
- 함수를 변수에 할당하는 방식이다.
- 함수 이름이 없어도 된다.
const f = function () {
return a;
};
- 함수 표현식이지만 이름을 붙이는 경우 내부에서 재귀적으로 호출이 가능하다.
const factorial = function fact(n) {
if (n <= 1) return 1;
return n * fact(n - 1); // 내부에서 자신의 이름을 사용하여 재귀 호출
};
console.log(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120
- 즉, 모든 함수 표현식이 익명 함수는 아니지만, 익명 함수는 보통 함수 표현식에서 많이 사용된다.
- 아래와 같은 즉시 호출 함수는 변수에 할당하지 않는 익명함수를 만들 수 있다..
(function () {
console.log("I am anonymous!");
})();
나머지 매개변수와 전개 연산자(함수 호출)
API(Application Programming Interface)란
- 애플리케이션 프로그램을 만들 때 약속을 의미한다.
- API 설계자가 만든 약속을 API 사용자가 활용한다.
- 나머지 매개변수, 전개 연산자 등은 주로 API 설계자가 사용하는 기능이며, API 사용자도 이해하면 좋다.
나머지 매개변수(Rest Parameters):
- 함수를 정의할 때 매개변수 앞에 ...을 붙여서 만든다.
- 언제나 자료형은 배열이다.
- 나머지 매개변수는 일반 매개변수와 함께 사용할 수도 있지만, 항상 마지막에 위치해야 한다.
const arr = function (...list) {
console.log(list);
};
arr("apple", "banana", "mango"); // ['apple', 'banana', 'mango']
const arr2 = function (a, ...list) {
console.log(`${a}와 나머지 ${list}입니다.`);
};
arr2("apple", "banana", "mango"); // apple와 나머지 banana,mango입니다.
구버전 자바스크립트에서 가변 인자 함수 구현하기:
- 매개변수를 지정하지 않고 arguments 객체를 사용하여 나머지 매개변수처럼 구현하는 방법이 있었다.
- arguments는 함수 내에서만 사용할 수 있는 유사 배열 객체이다.
- 유사 배열 객체이기 때문에 배열 메서드를 사용할 수 없다.
- 현대에는 나머지 매개변수를 사용할 것을 권장한다.
const list = function () {
let output = arguments;
return output;
}
console.log(list(1, 2, 3, 4)); // [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
전개 연산자(Spread Operator):
- 함수를 호출할 때 배열 앞에 ...을 붙여서 사용한다.
- 이렇게 하면 배열의 요소들이 개별 인수로 전달된다.
const arr = function (a, b) {
console.log(a, b);
};
let list = ["apple", "banana", "mango"];
arr(...list); // apple banana
구버전 자바스크립트에서 전개 연산자 구현하기:
- 과거에는 apply 메서드를 사용하여 전개 연산자를 구현했다.
- 배열 형태로 전달할 인자를 apply()에 포함하면 개별 인자로 변환된다.
- 현대에는 전개 연산자로 간단히 구현할 수 있다.
const list = function () {
console.log.apply(null, arguments);
};
let input = [1, 2, 3, 4];
list.apply(null, input); // 1 2 3 4
기본 매개변수와 가독성
가독성의 중요성
- 프로그래밍에서는 성능보다 가독성이 점점 더 중요해지고 있다.
- 가독성이 좋다는 것은 코드를 쉽게 읽고 이해할 수 있으며, 안전하게 사용할 수 있다는 의미다.
- 가독성이 좋은 코드를 작성하면 다른 개발자들이 실수를 덜 하게 된다.
- 기본 매개변수, 게터/세터, 프라이빗 속성/메서드 등은 가독성을 높이기 위한 기능들이다.
과거 자바스크립트 버전의 기본 매개변수 처리
- 과거에는 기본 매개변수를 설정하기 위해 조건문이나 삼항 연산자 등을 사용했다.
- 파라미터가 undefined인 경우와 0인 경우를 구분해서 처리해야 하는 등 코드가 복잡해질 수 있었다.
const isLeapYear = function (year) {
// year = typeof year === "undefined" ? new Date().getFullYear() : year;
// year = year || new Date().getFullYear();
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
};
console.log(isLeapYear());
기본 매개변수(default parameter)
- 최신 자바스크립트 버전에서는 함수 매개변수에 기본값을 설정할 수 있다.
- 이를 통해 매개변수를 입력하지 않아도 기본값이 들어가도록 할 수 있다.
- 예를 들어 윤년 계산기에서 연도 파라미터를 입력하지 않으면 현재 연도를 기본으로 계산하도록 설정 가능하다.
const isLeapYear = function (year = new Date().getFullYear()) {
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
console.log(isLeapYear());
콜백함수
- 자바스크립트에서 함수는 하나의 값이 될 수 있다.
- 따라서 함수를 함수의 매개변수로 전달할 수 있다.
- 이 때 전달된 함수를 콜백함수라고 부른다.
const test = function (callback) {
callback();
};
const call = function () {
console.log("안녕하세요");
};
test(call); // 안녕하세요
배열 메서드
- 배열의 forEach, filter, map 메서드들은 모두 콜백함수를 매개변수로 받는다.
- 이를 통해 배열의 요소를 다양하게 처리할 수 있다.
forEach
- 매개변수로 값, 인덱스, 기준 배열을 가진다.
- 배열의 요소를 콜백함수로 전달해서 반복하는 메서드다.
const arr = ["apple", "banana", "mango", "grape"];
arr.forEach(function (value, index, array) {
console.log(value, index, array);
});
/*
apple 0 ['apple', 'banana', 'mango', 'grape']
banana 1 ['apple', 'banana', 'mango', 'grape']
mango 2 ['apple', 'banana', 'mango', 'grape']
grape 3 ['apple', 'banana', 'mango', 'grape']
*/
filter
- 매개변수로 값, 인덱스, 기준 배열을 가진다.
- 최종 출력은 필터링된 배열이고, 필터를 통과한 요소가 없으면 빈 배열이 반환된다.
- 단, 비파괴적 처리를 하기 때문에 필터링된 배열을 사용하려면 새로운 변수에 할당하거나 기존 변수에 재할당 해야한다.
let arr = [123, 345, 234, 456];
arr = arr.filter(function (value, index, array) {
return value % 2 === 0;
});
console.log(arr); // (2) [234, 456]
map
- 매개변수로 값, 인덱스, 기준 배열을 가진다.
- 기존의 배열 요소를 기반으로 새로운 배열을 만들어서 리턴하는 함수다.
- filter와 마찬가지로 비파괴적 처리로 변수 할당이 필요하다.
let arr = [123, 345, 234, 456];
arr = arr.map(function (value, index, array) {
return value * 2;
});
console.log(arr); // [246, 690, 468, 912]
콜백함수의 장점
- 코드를 간결하게 작성할 수 있어 효율적이다.(익명함수, 화살표 함수 활용)
- 필요에 따라 매개변수의 함수를 통해 다른 결과를 만들 수 있다.
타이머 함수, 즉시 호출 함수(IIFE), 엄격 모드
타이머 함수
setTimeout / clearTimout함수:
- 특정 시간 후 한 번 실행되는 콜백 함수이다.
- clearTimeout를 통해 설정한 타이머를 해제할 수 있다.
const timeout = setTimeout(function () {
console.log("setTimeout이 실행되었습니다.");
}, 2000);
clearTimeout(timeout);
setInterval / clearInterval함수:
- 특정 시간 간격으로 반복 실행되는 콜백 함수이다.
- clearInterval를 통해 설정한 타이머를 해제할 수 있다.
const intervalTime = setInterval(function () {
console.log("setInterval이 실행되었습니다.");
}, 2000);
clearInterval(intervalTime);
- clear처리하는 함수들은 매개변수로 숫자를 넣도록 되어 있는데 이 숫자는 setTimeout과 setInterval의 리턴값이다.
즉시 호출 함수 (IIFE, Immediately Invoked Function Expression):
- 함수를 정의하자마자 바로 실행하는 방법이다.
- 변수/함수 이름 충돌을 방지할 수 있다.
- ()를 통해 각각의 스코프가 달라지기 때문에 충돌이 발생하지 않는다.
(function func() {
console.log("I am anonymous!");
})();
(function func() {
console.log("I am anonymous!");
})();
/* I am anonymous
I am anonymous
*/
엄격 모드(Strict Mode):
- 자바스크립트 코드를 보다 엄격하게 검사하는 모드이다.
- 브라우저 콘솔에 입력시 변수나 상수를 선언하지 않았는데도
- 브라우저 임의로 a,b 변수를 생성해 값을 할당한다.
a = 100;
b = 200;
console.log(a + b);
- 이런 부분을 엄격하게 검사해 막아주는 기능이다.
- <script>태그를 시작할 때 코드의 첫 부분에 'use strict'를 선언하면 활성화된다.
<script>
"use strict"
a = 100; b = 200; console.log(a + b);
</script>
IIFE 내부에서 엄격 모드를 적용하는 것이 일반적이다.
<script>
(function() {
"use strict"
a = 100;
b = 200;
console.log(a + b);
})()
</script>
선언적 함수와 익명 함수의 차이, 확인 문제
함수를 만드는 2가지 방법 - 선언적 함수와 익명 함수
선언적 함수:
- 전체 코드가 실행되기 전에 미리 만들어진다.
익명 함수(함수 표현식):
- 코드를 실행하면서 만들어진다.
선언적 함수와 익명적 함수의 차이
- 익명 함수는 코드 순서대로 실행되지만 선언적 함수는 코드 순서와 상관없이 실행된다.
- 이로 인해 두 함수를 섞어 사용하면 실행 순서 예측이 어려지고 여러개의 파일이 import되면 더 어려워진다.
- 따라서 일반적으로 선언적 함수는 잘 사용하지 않는다.
함수 ()
함수 = function () {
console.log("익명함수")
}
function 함수() {
console.log("선언적 함수")
}
함수()
> 선언적 함수
> 익명함수
반응형
'혼공학습단 > 혼공자스' 카테고리의 다른 글
[혼공스] 6주차 Chapter 07 문서 객체 모델 (0) | 2025.02.23 |
---|---|
[혼공스] 5주차 Chapter 06 객체 (0) | 2025.02.13 |
[혼공스] 3주차 Chapter 04 반복문 (2) | 2025.02.04 |
[혼공스] 2주차 Chapter 03 조건문 (0) | 2025.01.22 |
[혼공스] 1주차 Chapter 01 ~ 02 (0) | 2025.01.10 |