회고록 블로그
[공부 필기] 재귀함수를 사용하는 이유 본문
생활코딩 JavaScript 공부를 하다가 재귀함수를 공부하게 되었는데
반복문이 있음에도 불구하고 왜 재귀함수를 사용하는지 이해를 할 수가 없었다.
그래서, 구글신의 도움을 받아 찾아보았다.
이 글은 개인적으로 정리해놓고 필요할 때 찾아보기 위해 작성하는 글이다.
아래 코드는 recurse 라는 함수를 recurse라는 함수 안에서 다시 호출해서 사용하는 코드이다.
반복문 두고 왜 굳이 이런 식으로 사용하는지 이해를 할 수 없었다.
물론 이 코드는 단지 '재귀함수'에 대해서 학습하기 위한 코드이기 때문에
재귀함수를 쓰기에는 비효율적인 코드일 수 있지만('어? 이 코드에서는 반복문을 쓰는게 덜 복잡하지 않나?'라는 생각이 들 수 있음)
대충 이 코드가 반드시 '재귀함수를 사용해야만 하는 코드'라고 가정하자.
그래서 결국 중요한 것은 왜 반복문 대신에 재귀함수를 사용하는 이유를 잘 이해 못하겠다.
function recurse(target, callback){
if(target.nodeType === 1){
// nodeType '1' is 'A'(anchor)
var c = target.childNodes;
for(var i=0; i<c.length; i++){
recurse(c[i], callback);
}
}
}
recurse(document.getElementById('start'), function(elem){
console.log(elem);
});
그래서 찾아보았다.
왜 재귀함수가 필요할까.
그 답을 아래 글에서 찾아왔다.
출처: https://www.codecademy.com/forum_questions/4fd5964ffc052d000300483f
부족한 영어실력으로 해석해보자면..
재귀적 사고는 프로그래밍에서 굉장히 중요하고, 문제를 잘게 부수는데 도움을 준다.
재귀함수는 반복문으로 작성하는 것보다 더 읽기 쉽게 만들어 준다고 한다. (=가독성이 높다는 이야기)
재귀는 항상, 필드에서(=현업에서), 많은 프로그래밍 언어에서 사용한다는 이야기를 해주시고 계신 것 같다.
그리고 일반적으로 재귀는 깊이우선탐색 등에서 사용한다.
깊이우선탐색 : ("알고리즘" 책을 찾아 공부하기를 권장)
https://ko.wikipedia.org/wiki/%EA%B9%8A%EC%9D%B4_%EC%9A%B0%EC%84%A0_%ED%83%90%EC%83%89
또 다른 곳에서 재귀함수에 대해서 좋은 설명을 해주셔서 스크랩 해왔다.
출처 : https://javascript.info/recursion
중간즈음에 "Recursive traversals"를 보면 얼추 이렇게 설명해주고 계신다.
재귀를 사용하기 좋은 경우는 이러한 경우도 있다.
회사가 있는데, 만약 직원이 객체로 표현될 수 있다면. 부서 마다 직원이 배열(array)로 구성되어있다면.
예를 들어 영업조직(sales department)은 직원이 2명이다.
개발조직(development)은 그 안에서 사이트(sites)팀과 내부(internal)팀으로 나뉘고 각 팀에는 직원들이 있다.
그리고 사이트(sites)팀이나 내부(internal)팀이 잘 되면 그 팀 안에서도 또 파트를 나눌 수 있다.
예를 들어서 사이트팀은 그 안에서 사이트A파트, 사이트B파트로 분할될 수 있다.
이러한 상황에서 모든 직원들의 월급의 합을 구하려고 한다.
이때 재귀를 사용하면 심플한 코드가 될 수 있다.
위의 이런 경우가 깊이우선탐색을 사용할 수 있는 상황이지 않을까 싶다.
재귀함수를 사용하는 또 다른 이유에 대한 글을 찾아왔다.
결국 변수의 사용을 줄이기 위해서도 사용한다는 것 같다.
(친절한 설명과 좋은 내용이 담겨있어서 꼭 읽어보기를 추천)
하지만 재귀함수는 메모리를 많이 차지해서 성능이 더 떨어지는 위험(?)이 있을 수 있기 때문에
사용할 땐 주의사항을 잘 고려해야 한다고 한다.
결론적으로 정리하자면 재귀 함수를 사용하는 이유는 코드의 가독성을 높이고, 변수의 사용을 줄이기 위함이라고 정리할 수 있겠다.
(반복문으로도 돌아가지만 코드의 가독성을 위해서 재귀함수 사용)
항상 보면 가독성을 높은 코드가 좋은 코드라고 한다.
컴퓨터 입장에서야... 코드의 가독성이 높든지 낮든지 연산을 하고 처리 하는게 주로 할 일이니 큰 신경쓰지 않지만
그 코드를 작성하고 수정하는 것은 결국 사람들이다.
그리고 사람의 입장에서 복잡한 코드는 별로 읽고 싶지 않을 것이다.
마치 유튜브 댓글들에 보이는 줄바꿈 하지 않고 글을 딱딱 붙여서 쓴 글이나,
수식어를 엄청 많이 붙여서 장황하게 10줄로 늘려 쓴 글들은 읽기 싫은 것처럼... (한줄로 표현할 수 있는데 말이다)
코드를 만지는 것은 결국 사람이니까 사람에게 더 읽기 쉬운 코드가 수정하기도 편하고 유지보수도 편할 것이다.
그래서 가독성 높은 코드가 좋은 코드라고 하는 것 아닐까. (아닐수도 있다)
재귀 함수도 그런 의미에서 사용한다고 생각한다.
'2. 프로그래밍 언어 공부 > JavaScript' 카테고리의 다른 글
[공부 필기] JavaScript 문법 공부 2일차 (0) | 2022.02.21 |
---|---|
[공부 필기] JavaScript 문법 공부 1일차 (0) | 2022.02.19 |
[공부 필기] 생활코딩 웹브라우저 자바스크립트 강의 필기 (2) (0) | 2021.05.24 |
[공부 필기] 생활코딩 웹브라우저 자바스크립트 강의 필기 (1) (0) | 2021.05.06 |
[공부 필기] 생활코딩 JavaScript 입문 강의 필기 (3) (0) | 2021.04.18 |