Deep Dive Series

Deep Dive Series/Good Condition

[좋은 조건문 작성하기 4] JSON 객체를 활용한 조건문 형태

※ 대부분에 언어에 해당될 수 있는 내용이지만, javascipt 언어에 가장 적합한 글입니다. 꼭 , 을 써야만 조건문인 것은 아니다. JSON 객체를 활용해서도 조건문을 만들 수 있다. function getFruitByName(name) { if (name === 'apple') { return '🍎' } else if (name === 'banana') { return '🍌'; } else if (name === 'kiwi') { return '🥝'; } else if (name === 'lemon') { return '🍋'; } else { return ''; } } 위의 조건문을 으로 바꿔보자. function getFruitByName(name) { switch (name) { case 'a..

Deep Dive Series/Algorithm

[Javascript] Combination(조합), 이항계수 가져오기

/** * Q. 자연수 n을 이진법으로 변환했을 때 나오는 1의 개수를 k라고 했을 때, * n보다 작은 자연수 중에서 이진법으로 변환하여 * 1의 개수가 k인 수가 몇 개 있는지를 return 하도록 solution 함수를 완성해 주세요. */ 이 코딩 문제를 효율적으로 풀기 위해 직감적으로 Combination(조합)이 필요하다고 느꼈다. (확률과 통계에서 배운 개념들이 스르륵 스쳐갔다.) 정확히는 이항계수를 구해야하는데 이항계수란 다음과 같다. 위의 이항계수를 코드로 구현해보자. 크게 어려울 것은 없다. //10 C 2 => getCombinationsCount(10, 2) function getCombinationsCount(총원소수, 선택원소수) { const 곱셈 = (a, b) => a * ..

Deep Dive Series/Good Condition

[좋은 조건문 작성하기 3] 애매한 조건문은 팀원들과 생각 나누기

※ 대부분에 언어에 해당될 수 있는 내용이지만, javascipt 언어에 가장 적합한 글입니다. 복잡한 조건문을 작성하다보면, 무언가 잘못 분기하고 있다고 느낄 때가 있다. 이 부분은 애매하지만 매우 중요한 부분이라 생각되어 어떻게든 글로 풀어써보려고 한다. 정답이 있는 문제라기보단 앞서, 왜 좋은 조건문(IF) 을 작성해야할까? 라는 질문에 나는 '서로의 조건 로직을 잘 이해해 서비스를 잘 디벨롭하기 위해서'라고 답하고 싶다. 라고 포스팅했기에, 아래의 시나리오를 팀원들과 같이 읽어보며 좋은 조건문에 대해서 고민해보면 좋을 것 같다. 상황1 . 과일의 이름에 따라 적용가능한 색깔들(배열)을 가져오는 함수를 만드려는데 조건문을 어떻게 만들지 고민이다. function availableColorsByFru..

Deep Dive Series/Good Condition

[좋은 조건문 작성하기 2] Switch/Case 톺아보기

※ 대부분에 언어에 해당될 수 있는 내용이지만, javascipt 언어에 가장 적합한 글입니다. 0. 방법이 바뀐다고 조건문의 성능 차이가 있을까? 조건문에는 문도 있지만 문도 있다. 개인적으로 이 둘의 '가독성' 차이는 별로 없다고 생각한다. 취향 차이가 있을 뿐이지 두 조건문 방법 모두 충분히 좋은 조건문이라 보인다. 위 주장이 맞기 위해서는 조건문 방법이 달라진다고 '성능' 차이는 크게 발생하지 않는다라는 전제가 있어야 한다. 하지만 문 성능이 우수하다는 의견이 많았고 정말 그러하다면 '좋은 조건문'에 대하여 다시 한번 생각해볼 문제라고 생각했다. 그래서 특별히 문의 성능을 들여다보게 되었다. 1. 문은 무엇이 특별한가? 한 블로거께서 다음과 같이 표현해주셨다. if-else문은 원하는 조건이 나올..

Deep Dive Series/Good Condition

[좋은 조건문 작성하기 1] Early Return은 깊이가 얕아서 좋다!

※ 대부분에 언어에 해당될 수 있는 내용이지만, javascipt 언어에 가장 적합한 글입니다. 0. 깊이가 얕은 Early Return 방법 말 그대로 일찍이 RETURN 하여 함수를 빠져나오는 것이다. 바로 코드를 보자. const isNumber = v => /^(\s|\d)+$/.test(v); // function getBoardByRegisterId(registerId) { if (registerId.length >= 4) { if (isNumber(registerId)) { const data = []; // 20 Line ... return data; } else { alert('아이디는 숫자만 유효합니다.'); } } else { alert('아이디는 4자 이상 필요합니다.'); } } ..

Deep Dive Series/Good Condition

[좋은 조건문 작성하기 0] 왜 좋은 조건문을 작성해야 할까?

Q. 코딩에서 조건문은 어떠한 역할을 할까? 조건문은 모든 프로그래밍 언어를 막론하고 절대 빼놓을 수 없는 간단하지만 매우 중요한 뼈.대.요소라고 생각한다. 단순히 A의 조건에는 B의 로직이 수행되고, A가 아닌 조건에는 C의 로직이 수행된다는 개념을 떠나 새로운 조건이 계속 계속 생겨나면 그 조건 전체가 서비스의 복잡도를 결정할 만큼 중요한 요소라고 생각한다. 좋은 조건문은 이러한 요소를 좋게 만든다는 것을 말한다. if (A) { B(); } else { C(); } Q. 그렇다면 좋은 조건문은 어떤 조건문을 말할까? 우리 팀의 유지보수를 위한 가.독.성이 높은 조건문을 말한다. 여기서 단순히 가독성 높음에 집중하면 보기에만 좋은 떡?이 될 가능성이 높다. 유지보수하기 좋게 가독성 높은 조건문을 작성..

Deep Dive Series/Paging

[페이징 톺아보기 3] 두번째 페이징이 잦을때, IN절 페이징

2페이징 스크롤이 잦은 기능의 경우, 써보면 좋을 법한 아이디어가 있어 공유해보려 한다. 보통 스크롤 페이징을 구현해놓더라도 1페이징에 머무는 기능이 대부분이다. 예를 들어, 채팅 메시지 목록을 1페이징으로 조회한다고 했을 때, 메시지를 스크롤로 올려 이전 메시지를 확인하는 경우보다 1페이징에서 머물다 바로 메시지를 보내는 경우가 많다. (아니라고 하더라도 가정해보자) 하지만, 페이스북의 뉴스피드 타임라인의 경우 첫 페이징에 머물기보다는 2페이징, 3페이징 스크롤하여 나아갈 가능성이 많다. 이러한 경우 물론, OFFSET 페이징보다 커서 페이징이 이점이겠지만, 때에 따라 커서 페이징이 불가능한 경우가 있을 수도 있고, 커서가 2개 이상 존재하여 OFFSET 보다 속도가 나지 않는 경우가 있다. 이럴 때,..

Deep Dive Series/Paging

[페이징 톺아보기 2] 두 테이블의 유니온 페이징 (정석이 아니라 선택)

특수한 경우에 페이징을 구현함에 있어 괜찮은 속도 개선을 만들어낸 경험이 있어 정리해보려 한다. 0. 테이블 2개의 페이징 보통 페이징을 시도하는 테이블은 1개가 정석인데, 2개로 요청이 들어왔다면 어떻게 쿼리를 짜야할까? 게시물과 댓글 각각 테이블로 데이터를 관리하고 있는 상태에서 게시물, 댓글 모두 등록시간순으로 정렬해 한꺼번에 리스팅 해주면 좋겠다는 요건이 나왔다. 일단, 강력하게 게시물, 댓글을 탭을 나눠 따로 조회했으면 좋겠다고 주장했으나 먹히지 않았다. 1. UNION 페이징 --UNION PAGING SELECT data, register_time FROM board --게시물 UNION SELECT data, register_time FROM comment --댓글 ORDER BY regi..

날개단
'Deep Dive Series' 카테고리의 글 목록