자바스크립트, 문자열 함수 마음대로 다루기(Javascript works with string)

Javascript String Methods : slice(), substring(), includes(), startsWith(), trim(), replace()…….

프론트엔드(React, Vue, Angular)와 백엔드(Node.js)가 모두 자바스크립트를 사용하는 시대에 들어서니 자바스크립트의 기초가 몇 배는 더 중요해진 것 같습니다.

자바스크립트의 문법 중 문자열(String) 관련 함수는 참 쓸 일이 많으면서도 가볍게 여겨져 쉽게 외워지지 않는 슬픈 함수 중 하나인 것 같습니다.😢

문자열 관련 함수는 한 번 외워두면 반복 학습할 일이 많으므로 첫 단추만 잘 꿰면 될 것 같습니다.

그럼 문자열 관련하여 사용 빈도가 높은 함수인 slice(), substring(), includes(), startsWith(), trim(), replace(), indexOf(), test() 함수에 대해 알아보겠습니다.


slice 함수는 위치(인덱스)를 매개변수로 전달하여 원하는 문자열을 추출합니다.

시작 위치(필수)와 종료 위치(옵션)를 전달하며, 시작 위치만 전달하는 경우 시작 위치부터 문자열 끝까지 추출합니다.

0은 순방향으로 첫 번째(앞에서 1번 째), 음수인 -1은 역방향으로 첫 번째(뒤에서 1번 째)를 나타냅니다.

const myWord = 'primavera';

myWord.slice(0,5);   // 'prima'
myWord.slice(-4);    // 'vera'
myWord.slice(3);     // 'mavera'

myWord.slice(3,1);    // '' -> slice함수는 시작인덱스가 종료인덱스보다 크면 빈 값을 반환

substring 함수도 slice와 마찬가지로 위치(인덱스)를 매개변수로 전달하여 원하는 문자열을 추출합니다.

기본적인 작동 방식은 같으나 slice와 달리 시작인덱스가 종료인덱스보다 큰 경우에는 자동으로 두 값의 위치를 변경하여 함수를 실행합니다.

또한 substring은 매개변수에 음수를 넣으면 이 값을 0으로 인식합니다.

따라서 (3, -1)을 전달하게 되면 (3, 0)으로 인식합니다. (3, 0)은 시작 인덱스가 더 크므로 위치를 변환하여 (0, 3)의 값을 계산한 결과를 반환합니다.

함수명이 비슷한 substr의 경우 ‘위치’와 ‘추출할 문자의 수’를 파라미터로 전달하는 함수입니다.

const myWord = 'invierno';

myWord.substring(3);     // 'ierno'
myWord.substring(1,3);   // 'nv'

myWord.substring(3,1);   // 'nv' -> 시작이 종료인덱스보다 크면 자동으로 위치 변경 후 함수를 실행

myWord.substring(3,-1);  // 'inv' -> 음수는 0, 시작인덱스와 종료인덱스는 위치 변경 후 계산

myWord.substring(-4);    // 'invierno' -> 음수는 0, 시작인덱스만 전달하여 0부터 끝까지 계산

myWord.substr(1,3);      // 'nvi' -> 시작인덱스 1부터 문자 3개를 추출

includes 함수는 지정한 문자열의 포함 여부를 확인합니다.

매개변수로 문자열(필수)과 위치인덱스(옵션)를 전달하며, 반환값은 true 또는 false 입니다.

문자열 내 지정 문자열 확인은 물론 배열 내 빈 값을 확인하는 용도로도 사용할 수 있습니다.

const myWord = 'alegria';

myWord.includes('le');       // true
myWord.includes('i');        // true
myWord.includes('rio');      // false

const myArray = ['dream','','king'];
myArray.includes('');       // true   -> myArray[1]이 빈 값이므로 true. 배열 내 빈 값을 찾는 용도
myArray.includes('dream');  // true   -> myArray[0]의 값과 일치
myArray.includes('drea');   // false  -> 배열 내 값과 정확하게 일치하는 경우에만 true를 반환

startsWith 함수도 문자열의 포함 여부를 확인하는 함수라고 볼 수 있습니다.

startsWith와 함께 문자열만 전달하면 0 인덱스부터 시작하여 해당 문자열의 존재 여부를 확인하여 BOOLEAN 값을 반환합니다.

마찬가지로 endsWith는 끝나는 문자열을 비교합니다.

const mySentence = 'cafe con leche';

mySentence.startsWith('cafe');     // true
mySentence.startsWith('fe');       // false
mySentence.startsWith('fe',2);     // true

mySentence.endsWith('eche');      // true

trim 함수는 문자열 양 끝의 공백을 제거하는 함수입니다.

문자열 변환 과정이나 실수로 보이지 않는 공백을 삽입하게 되면 문자열 비교 시 겉으로는 동일하지만 결과는

false를 반환하므로 이 trim 함수를 사용하면 문제를 해결할 수 있습니다.

문자열 양 끝의 공백, 탭, 줄바꿈 문자(/n)를 제거하며, 문자열 양 끝이 아닌 부분에는 효과가 없습니다.

const mySentence = '  la casa de papel   ';

mySentence.trim();        // 'la casa de papel'

const mySentence = ' el amor \n';

mySentence.trim();       // 'el amor'

replace 함수는 문자열에서 변경할 기존문자를 찾아 변경문자로 변경합니다.

문자열에서 매개변수로 전달한 기존문자가 여러 개 존재하는 경우 첫 번째로 탐색한 문자열만 변경합니다.

예를 들어, ‘my_name_is_Ron’에서 ‘_’문자를 모두 공백으로 변경하기 위해 replace(‘_’,’ ‘) 함수를 사용해도 결과는 ‘my name_is_Ron’이 반환됩니다.

따라서 문자열에서 해당하는 문자를 모두 변경하고 싶은 경우에는 정규표현식을 사용하면 됩니다.

정규표현식 관련 포스트

const mySentence = 'my name is:Ron';

mySentence.replace(':',' ');        //'my name is Ron'

const mySentence = 'my_name_is_Ron';

mySentence.replace('_',' ');      // 'my name_is_Ron'

//정규표현식 사용해서 모든 문자 변경하기
mySentence.replace(/_/g, ' ');    // 'my name is Ron'

indexOf 함수는 전달하는 문자의 위치를 반환합니다.

이 기능은 원하는 문자열의 앞 또는 뒤에서 문자열을 자를 때 유용하게 사용할 수 있습니다.

예를 들어, ‘Z001-03’이라는 문자열에서 뒤의 ’03’만 추출하고 싶은 경우 indexOf로 ‘-‘ 문자열의 위치를 찾고 해당 위치의 +1 위치부터 끝까지 문자열을 잘라내면 원하는 값을 가져올 수 있습니다.

만약 같은 문자가 여러 개 존재하는 경우 첫 번째 문자의 위치를 반환하며, 두 번째 매개변수에 시작 위치를 전달하면 시작 위치부터 검색을 시작합니다(시작 위치를 전달하더라도 반환 값은 전체 문자열에서 몇 번째인지를 전달합니다).

뒤에서부터 검색을 시작하는 함수는 lastIndexOf이며, 뒤에서부터 첫 번째로 나오는 문자의 위치를 반환합니다(반환 값은 해당 문자가 앞에서부터 몇 번째인지를 반환합니다).

전달하는 문자가 존재하지 않으면 -1을 반환합니다.

const mySentence = 'Z001-03';

mySentence.indexOf('-');     // 4

mySentence.substring(mySentence.indexOf('-')+1);    // '03'

mySentence.indexOf('D');    // -1

const mySentence = 'Z001-03-02';

mySentence.indexOf('-');    // 4
mySentence.indexOf('-', 5);   // 7

mySentence.lastIndexOf('-')   // 7

test 함수는 정규표현식과 함께 사용하여 매개변수로 전달하는 문자열의 유효성을 확인합니다.

비밀번호에 알파벳, 특수문자 등 포함여부 확인이나 생년월일 형식에 알파벳 등 불필요한 문자의 포함 여부를 효과적으로 확인할 수 있습니다.

const mySentence = /a/;
const myWord = 'baby';

mySentence.test(myWord);   // true

/\d/.test('cookie');       // false \d는 숫자(0~9)를 나타내는 정규표현식
/\d/.test('cookie1');      // true

const typedError = /[ㄱ-ㅎㅏ-ㅣ]/gi;
const inputData = '김ㅊ치와 나물';

typedError.test(inputData);    // true 

이 외에도 다양한 함수들이 많고 또 여러 요구에 맞춰 새롭고 편리한 함수가 계속 나오기 때문에 끊임없는 관심과 업데이트 관련하여 모니터링이 필요할 것 같습니다.

광릉수목원(국립수목원), 마음의 여유를 느끼며 스탬프 투어하기!

국립수목원에서 보내는 여유로운 하루

지인의 추천으로 포천시에 위치한 국립수목원(광릉수목원)에 다녀왔습니다.

서울에서 한 시간 정도 거리에 위치하고 가는 길에는 차도 막히지 않아 상쾌하게 다녀왔습니다.

하루 입장 인원이 제한되어 있고 예약을 통해서만 입장이 가능하므로 붐비지도 않고 여유롭게 하루를 보낼 수 있는 곳이어서 너무 좋았습니다.

방문은 2021년 11월 13일이었으며, 근래 비가 오고 날씨가 쌀쌀해진 관계로 바스락 거리는 낙엽들을 많이 밟으며 걸을 수 있었고 반대로 말하면 잎이 많이 떨어져 휑한 나무 친구들도 꽤 많았습니다.

떨어진 낙엽을 보고 계절의 변화를 직접 느낄 수 있어 너무 좋았고, 풀과 나무 내음은 항상 사람을 기분 좋게 하는 것 같습니다.

– 광릉수목원(경기도 포천시 소흘읍 광릉수목원로 415)

입구에서 여러 자료들을 만날 수 있는데요.

스탬프 투어라는 이벤트가 있습니다.

수목원 내 스탬프를 찍을 수 있는 포인트가 지정되어 있고, 스탬프를 모두 찍으면 소정의 선물을 받을 수 있는데요.

스탬프는 3개/5개/13개/14개에 따른 선물이 있습니다.

선물이 무엇일지 기대감을 품고 하나하나 찍다 보니 13개 스탬프에 성공했는데요.

선물은 아래쪽에서 공개하겠습니다.

1인당 한번의 이벤트만 참여가 가능하므로 저희는 두 장의 스탬프 지도를 들고 시작했습니다.

이렇게 스탬프 별 난이도가 적혀 있구요.

마지막에 나올 때 이 난이도 표를 보니 ‘아 그러고 보니 저긴 별 5개 급의 자격이 있군’하는 생각이 들긴 했습니다..ㅎㅎㅎ

이렇게 생긴 것이 스탬프 포인트구요.

돌아다니면서 스탬프를 찍다 보면 수목원 방문 목적이 스탬프로 착각하게 되는 순간이 있습니다..

스탬프 바닥을 보시고 그에 맞는 곳에 꾹! 하고 찍어주시면 됩니다.

사진을 찍어야 하는데 스탬프만 찍고 온 것 같습니다..

유치원에서 세상을 알아갈 만한 나이의 어린 친구들과 섞여서 순서대로 스탬프를 찍는 제 모습도 생각이 납니다..

위 귀곡산장(화장실)은 별 5개짜리 중 한 곳으로 가는 길에 있습니다.

지도 왼쪽 중간쯤에 위치한 카페인데요.

가격이 조금 비싸긴 하지만 자연 속에서 맛있게 먹을 수 있다면야..

내 카드가 아니라서 막 사라고 부추기긴 했습니다..

‘누워서 하늘을 보세요’라는 안내문이 있는 벤치에서 바라본 하늘입니다.

‘광릉숲’ 포인트 하나를 제외한 나머지 포인트를 모두 완성했습니다.

구경하고 쉬고 먹고 걷고 하다 보니 약 3~4 시간 정도 소요된 것 같습니다.

‘광릉숲’ 포인트는 수목원 외부에 있고, 거리가 왕복 약 3.1km로 기재되어 있었는데요.

배가 고파 오늘의 미션은 13개로 마무리하고 선물을 수령하러 갔습니다.

선물은 바로!

스탬프 13개 완성 선물은 펜 + 엽서 + 조각맞추기(?)입니다.

스탬프 14개 선물은 조각맞추기(?)를 하나 더 준다는 차이가 있었던 것 같은데요.

무리하지 말고 13개로도 충분히 만족할 만한 선물을 받을 수 있는 것 같습니다.

스탬프 3개 – 펜

스탬프 5개 – 엽서

스탬프 13개 – 펜 + 엽서 + 조각맞추기(?)

스탬프 14개 – 펜 + 엽서 + 조각맞추기(?) 2개

선물 교환 장소에 스탬프에 따른 선물이 적혀있었는데 힘이 들어 사진도 못 찍었네요..

개인적인 생각으로 5월/6월/10월/11월초가 방문하기 가장 좋은 시기라고 생각됩니다.

예약은 보통 방문 예정 날짜로부터 한 달 정도 여유를 두고 해야 할 만큼 인기가 많은 곳이다 보니 계획적으로 준비하여 방문하시면 정말 좋은 추억을 남길 수 있는 곳이라고 생각됩니다.

매표소 앞에 있는 주차 요금 정산소에서 정산 시 할인 차량(장애인/유공자/저공해차량 등)의 할인도 받을 수 있으니 참고해 주세요.

국립수목원 예약 : https://kna.forest.go.kr/kfsweb/kfi/kfs/cms/cmsView.do?mn=UKNA_01_03_01&cmsId=FC_003267

깃허브(Github) PUSH와 Personal Access Token 문제 해결하기

Support for password authentication was removed on August 13, 2021. 에러

깃허브의 정책 변경으로 인해 8월 13일부터는 개인 액세스 토큰을 사용해야 푸시(PUSH)가 가능하도록 변경이 되어

설정하는 방법을 간략하게 알아보겠습니다.


1. 토큰 발급

vscode에서 푸시를 진행하면 8월 13일 이후로는 위와 같은 에러 메시지와 함께 토큰을 사용하라는 에러가 발생합니다.

토큰 발급은 다음 페이지에서 진행합니다.

https://github.com/settings/tokens

접속하여 Generate new token 클릭

위 페이지에서 Note, Expiration, Select scopes 항목을 선택하면 됩니다.

Note는 토큰 설명, Expiration은 만료 기간, Select scopes는 범위를 지정합니다.

기본적인 범위만 지정하고 싶은 경우 Select scopes는 repo만 체크하면 됩니다.

위 세 항목 작성 및 체크 후 Generate token을 클릭합니다.

토큰이 생성되면 위와 같이 확인할 수 있으며, 생성된 토큰은 홈페이지에서 재확인할 수 없으므로 복사해두고 사용하시면 됩니다.


2. 자격 증명 설정하기

발급 받은 토큰을 윈도우의 자격 증명에 설정하면 작업이 완료됩니다.

윈도우에서 자격 증명 관리자를 실행합니다.

Windows 자격 증명을 선택하면 아래와 같이 github 자격 증명을 확인할 수 있습니다.

위와 같은 형식으로 된 부분을 선택하여 편집을 클릭합니다.

위에서 발급 받은 토큰을 복사하여 암호 부분에 붙여넣기 및 저장하면 작업이 완료됩니다.


CSS Combinators, make your CSS works easier (+,~, ,>)

Four combinators [Adjacent Sibling(+), General Sibling(~), Child(>), Descendant( )]

When set CSS Styles, below syntax is a basic.

h1 {
  color:#FFFF11;
  background: #000000;
}

.subTitle {
  font-size:13px;
  color:#FFFFFF;
  font-family:inherit;
}

#timeLine {
  background:gray;
}

But when you want to set Styles to a specific tag, using combinators is a smart selection.

combinators are mixed Styles. like ‘div + h1’ or ‘div > span’.

Any tags are mixable and there are four combinator types.

  • Adjacent Sibling (+)
  • General Sibling (~)
  • Child (>)
  • Descendant ( space )

1. Adjacent Sibling (+)

Adjacent Sibling uses + mark when specifies one element right after designated element.

h1 + p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm h1 tag</h1>
  <p>I'm orange</p>
  <h2>I'm h2 tag</h2>
  <p>I'm a second p tag</p>
  <h1>I'm h1 tag again</h1>
  <p>I'm orange too</p>
<div>

There are two conditions for adjacent sibling.

Element should share the same parent and second element has to come only if right after first element.

In the above HTML result, there are three <p> tag lines but only two lines are matched to the condition.

Therefore only two matched elements are working as mentioned.

2. General Sibling (~)

General Sibling uses ~ mark when specifies elements come after designated element.

h1 ~ p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm h1 tag</h1>
  <p>I'm orange</p>
  <h2>I'm h2 tag</h2>
  <p>I'm orange too</p>
<div>

There are two conditions for general sibling.

Element should share the same parent and second element has to come after first element.

In the above HTML result, every <p> tag after <h1>tag is working.

3. Child (>)

Use > marks when express child elements.

div > p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm just h1 tag</h1>
  <p> I'm colored orange</p>
  <span>
    <p>I'm not the one</p>
  </span>
  <p> I also am colored orange</p>
</div>

Second element has to be a direct child of first element.

In the above HTML result, only two direct child lines are working.

Fifth line is not working because its position is parent-child-child.

4. Descendant

Use space when express descendant elements.

div p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm just h1 tag</h1>
  <p> I'm colored orange</p>
  <span>
    <p>Count me in</p>
  </span>
  <p> I also am colored orange</p>
</div>

As long as second element is a descendant of the first element, every matched line is working.


Combinators are easy and simple for efficient CSS work.

I hope this post is helpful to your CSS design.

스위프트 스포츠(ZC33S)와 함께 한 1년의 시간(SUZUKI swift sports 리뷰)

일본 생활과 함께 한 스즈키 스위프트 스포츠(feat.2018~2019)

2018년 출고부터 2019년까지 일본 생활에서 저의 발이 되어준 스즈키 스위프트 스포츠 SUZUKI, Swift Sports(zc33s) 차량에 대한 리뷰입니다. (리뷰보다는 소감에 더 가까울 것 같습니다…^^)

출시부터 3년 가량이 지났으나 한국어로 된 실제 시승기 및 포스팅은 찾기가 어려워 제가 한번 (소감에 가까운)시승기를 작성해보고자 합니다.

일본에서는 스즈키(SUZUKI)라는 브랜드가 소형차 시장에서 꽤 높은 점유율을 차지하고 있지만 국내 수입이 되지 않는 관계로 ‘스즈키는 오토바이 회사 아닌가?’ 하시는 분들도 많을 것 같은데요.

실제로 스즈키는 오토바이를 시작으로 사업 영역을 확장해 소형차 시장에 진출하였으며, ‘G바겐의 쪼꼬미 디자인’ 짐니(JIMNI)로 한 때 국내에서 화제가 된 적도 있습니다.

〈벤츠 지바겐의 쪼꼬미 디자인 짐니(JIMNI)〉

한 놈만 패는 사람처럼 스즈키도 소형차 시장이라는 한 우물만 팝니다.

사업 전략을 살펴보면 성장 가능성이 낮은 중국 시장은 과감하게 발을 빼고, 인도 시장에서 판매율 1, 2위를 다투며(현기차가 최근 인도 내수 시장 1위 기록) 잘되는 시장에 집중하는 모습이 인상적입니다.


스포츠는 일반 모델에서 성능을 최대한 끌어올리고 외모를 (조금)날카롭게 다듬은 버전으로 이 중에서도 수동은 일본의 자동차 마니아 층에서 매우 인기가 많은 모델입니다(영맨曰 ‘스포츠 모델은 인기가 많아 중고가 방어가 좋다’고 들었으며, 실제 중고 판매 시에도 그랬습니다).

자동차를 좋아하는 일본 친구의 추천으로 알게 되고 구매하게 된 모델로 극히 개인적인 용도와 만족감을 따졌을 때 별 4.5개를 주고 싶습니다.

외국 너튜브 전문 시승기에서 핸들링 및 퍼포먼스에 대한 평점을 미니쿠퍼S에 조금 못 미치는 정도로 평가하는 것을 보아 미니쿠퍼 절반 정도 가격에 이 퍼포먼스! 가성비가 좋습니다.

먼저 간략하게 차량 제원에 대해 알아보겠습니다.

후지산이 거울에 보이는 것보다 멀리 있을 수 있습니다. (2018)

1. 간략한 제원

  • B 세그먼트 (미니, 폴로, 프라이드, QM3 등 small car 분류 카테고리)
  • 5도어
  • 전륜 2WD
  • 6MT, 6AT
  • 970kg (경량화★)
  • 17.6km/L (일본의 연비 기준. 이 기준은 실연비보다 대부분 높음.. 1년간 평균 실연비는 13~14km 기록!)
  • 1,371cc
  • DOHC 16V, TURBO
  • 140ps
  • 195/45 R17
  • 앞 STRUT / 뒤 TORSION BEAM
  • ¥1,874,400 ~ ¥2,340,505(환산 1,970만원~2,450만원, 색상 및 외부 파츠 추가에 따라 최대 +300만원)
  • https://www.suzuki.co.jp/car/swiftsport/detail/

2. 구매 과정과 일본의 운전면허증

우선 면허에 대해 먼저 이야기하면 좋을 것 같습니다.

일본과 한국은 운전 면허 협정이 맺어진 상태이므로 시험은 필요 없이 서류 작업만으로 한국의 면허증 -> 일본의 면허증으로 발급이 가능합니다.

여행 등 단기간의 운전은 국제면허증(보통 1년의 유효기간)으로 가능하지만 실제 차를 소유하거나 거주하면서 운전을 하기 위해서는 현지 면허증이 필요하기에 일본 면허증을 발급받았는데요.

제출하는 서류의 발급 시기(1달 이내, 운전면허증이 유효함을 인정하는 서류)도 따지고 발급 비용(약5천엔)도 들고, 심지어 면허증 발급 기관의 운영 시간도 정해져 있기에 목표 완수 후 ‘아 드디어……..’라는 말이 나옵니다…

보통은 일본에서 차량을 구매하기 위해서는 차고지 증명서 제출이 필수입니다. 주차할 곳이 있으니 불법 주차나 길거리에 차를 짱 박지 않겠다는 확인 서류로 보면 되는데요. 거주하는 집에 주차장이 있으면 주인에게 차고지 증명서를 달라고 하고 아니면 집 근처(1~2km 이내) 유료 주차장에 월 주차를 등록하면 서류 발급이 가능합니다.

보험료의 경우 보장 범위를 최대로 하고 최초 가입이라 월 1만2천엔(1년 보험료 약 150만원 가량) 정도 납부하였으며, 귀국 시 보험가입증명서를 가져와 국내 보험사에서 해외 운전 경력을 인정받았습니다.


저는 지금 타는 D 세그먼트 차량도 조금 크다고 느낄 정도로 작은 차를 좋아하다보니 당연히 작은 차에 눈이 가고 일본에서는 선택권이 많아 좋았습니다.

일본은 소형차 시장이 워낙 치열하다 보니 브랜드 별로 라이벌 차량이 꽤 있습니다.

NISSAN, TOYOTA, SUBARU, MAZDA, HONDA, MINI 등 실제로 가격대 혹은 퍼포먼스로 보면 라이벌은 많지만 코스파(コスパ, Cost Performance:가성비)로 압도적 평가를 받는 이 모델은 시승 갔다가 바로 계약서를 쓰고 말았습니다.

2018년 6월 당시 출시된 지 반년 정도 밖에 지나지 않은 상황에 인기 차종이라 약 3~6개월 가량 대기를 안내를 받았으나, 타 계약자의 주문 취소로 생각보다 빠른 1개월 반 만에 납차를 받았습니다(이 때는 코로나 전이고 국산 모델이라 3~6개월은 짧은 시간이 아니었습니다).

해가 뜨끈뜨끈하던 8월에 만난 친구

생애 첫 차를 만나는 기쁨은 무엇과 비교할 수 있을까요?😋

LHD(Left Hand Drive)인 국내 차량 구조와 달리 일본은 RHD이므로 운전석이 오른쪽에 있습니다.

위치는 모두 다 반대라고 보면 됩니다.

엑셀과 브레이크 위치만 빼구요. 엑셀(오른쪽)과 브레이크(왼쪽)의 위치는 변하지 않습니다.


3. 내부 살펴보기

운전석은 이런 느낌을 갖고 있습니다.

플라스틱 감성에 예민하진 않지만 확실히 고급스러운 소재와 거리가 있는 점은 꽤 아쉬웠으나 가격으로 타협!

차량은 5인승이지만 역시 2명이서 탈 때가 가장 편안했습니다.

실용성(플라스틱)과 퍼포먼스(레드 테마)를 중시하는 실내 재질과 컬러

네비게이션은 서라운드 카메라 기능이 포함된 옵션 사항인데요.

네비게이션의 터치가 그렇게 러블리하지는 못하고, 누르는 키는 약간 90년대의 감성을 갖고 있습니다.

처음 서라운드 뷰를 접했을 때의 느낌은 너무 신선한 충격이었습니다. 지금은 너무도 흔하고 엄청난 화질을 자랑하는 차량들도 많지만요.

차를 구매하고 넣은 옵션 중 제일 만족스러운 옵션이었습니다.

계기판 역시 스포츠 모델 답게 빨간 색상을 강조합니다.

스포츠가 아닌 일반 가솔린 또는 하이브리드 모델은 초록색 또는 파란색으로 구성되어 있고, 색상의 변경은 어렵습니다.

아마도 연비가 궁금하실텐데요.

고급휘발유(하이오크, High-Octane) 권장으로, 수동 모델 고급휘발유 기준 도심 13km, 고속도로 15~18km 정도로 평균 연비는 14~15km 정도가 나와 스포츠 모델로는 아주 준수한 수준이었습니다.

퍼포먼스를 중시하는 모델이라고 해도 수동 기어에 공차중량이 가볍다보니 관련 카페에서는 평균연비 18~21km를 자랑하는 오너들도 많았습니다.

저는 연비 대신 정신 건강을 택했지만요.

수동 6단 기어는 부드럽습니다.

물론 변속 시점이나 클러치 조작에 따라 말도 타고… 시동이 꺼지기도 하지만요.

3단부터 4단까지가 가장 즐거운 구간이었습니다.

스포츠 전용 휠입니다.

깔끔하죠?

엔진룸 구조는 위와 같습니다.

정기 점검 프로그램에 가입이 되어 있다 보니 때 되면 연락 와서 점검 예약하고 점검 시 소모품 교환이나 엔진 오일 교환 등을 처리해주니 신경 쓸 필요가 없어 좋았습니다. (3개월, 반년, 1년, 1년 반 등 2년 간 정기 점검 프로그램이었던 것으로 기억하고, 비용은 5만엔 정도였던 것 같은데 가물가물합니다.)

6박 7일간 혼자 차박 여행을 다녀온 짐입니다.

물론 뒷자리에도 짐이 가득하지만요.

요코하마(横浜)에서 출발해 하마마츠(浜松), 나라(奈良), 코베(神戸), 오사카(大阪), 효고(兵庫)를 돌아 약 1,500km의 일정으로 다녀왔는데요.

관련 내용은 나중에 별도로 포스팅 해보도록 하겠습니다.

뒷자리 시트가 접히고 트렁크 짐이 안 보이도록 해주는 가림막도 탈부착이 가능하기 때문에 접고 떼면 보기보다는 많은 짐의 적재가 가능합니다.


4. 외부 살펴보기

뒤통수입니다. 날쌘돌이처럼 생겼나요?

넓디 넓은 공원 주차장에 차를 세우고 잠시 산책을 다녀왔는데요.

나가노에서 온 친구가 일부러 바로 옆에 주차를 해 놓고 갔네요.

같은 차를 만난 게 반가워서 아는 척하는 강아지 같습니다 ㅎㅎ

비오는 날에는 이렇게 촉촉하게 비도 맞구요.

드러운 날엔 이렇게 거품도 맞습니다.

물론 기분 좋은 날엔 이렇게 일광욕도 하구요.

후지산 촬영 스팟에서 차를 세우고 비루한 실력으로 한 컷 뽑았는데요.

핑크빛 구름이 산머리에 걸려있는 것 같습니다.


5. 장단점 살펴보기

장점

  • 주행 성능 : 가벼운 차체와 터보 엔진의 만남 그리고 세팅
  • 연비 : 고급휘발유도 두렵지 않은 연비
  • 가격 : 아름다운 가성비
  • 외부 디자인 : 호불호가 나뉘지만 개인적 好
  • 중고 가격 방어 : 인기가 많은 차량으로 높은 중고 가격 라인

단점

  • 실내 디자인과 재질 : 아름답지 않은 플라스틱 마감
  • 편의 요소 : 엉차 부재, 후방 충돌 보조 센서 부재 , 멀티미디어와 사운드의 아쉬움
  • 좁은 실내 : 사람에 따라 다소 좁을 수 있는 실내
  • 약한 도장 : 생각보다 실기스와 잔기스, 찍힘이 쉽게 생기는 약한 도장면

6. 종합 정리

일본의 도로는 우리나라만큼 단속 카메라가 많지 않지만 제한 속도가 낮고 암행 경찰(토X타 사의 크라X 흰색 모델을 고속도로에서 조심하라는 이야기가 있습니다ㅎㅎ 걸리면 벌금 액수가 몇만엔(몇십만원)까지 간다고 하네요.. 주차위반 벌금 또한 1만엔(11만원)이 넘구요..)이 많아 고속으로 달릴 기회는 거의 없었습니다만 제한 속도 내에서도 충분히 재미있게 달릴 수 있는 차량이라고 생각합니다.

사정이 있어 딱 1년만에 차량을 판매하고 귀국하게 되었지만 다른 차량을 타는 지금도 자주 생각나고 그리운 차량입니다.

혹시 일본에 계시거나 해외에 계신 분들 중 차량 구매를 고민하고 계시다면 강력하게 추천 드립니다.

차가 많이 막히는 곳에 살고 계시다면 수동은 진지하게 고민해보시기 바랍니다.😂

마지막으로 인터넷에 돌아다니는 컨버터블 사진으로 마무리하겠습니다.

미니쿠퍼 컨버터블이 생각나는 것 같습니다.

실제로 출시되는 모델은 아니고 렌더링만 그려 놓은 것 같습니다.

위 사진은 BMW Z4 모델에 스위프트를 믹스한 것이라고 하네요.

이상입니다.

쉽고 빠른 정규표현식(Easy Regular Expression, regex)

정규표현식(Regular Expression)의 구성과 의미, 자바스크립트에서 사용하기

정규표현식(Regex)은 검색 패턴을 지정하여 기호로 표시한 것입니다.

이 개념은 미국의 수학자인 Stephen Cole Kleene가 1950년대에 정의한 정규 언어(Regular Language)와 관련이 있으며, 정규표현식 문법은 1980년대 Perl에서부터 사용되기 시작했습니다.

주로 검색 또는 치환 작업에 사용되며, 현재 대부분의 프로그래밍 언어에서 정규표현식을 지원하거나 라이브러리를 통해 사용할 수 있습니다.

예를 들어 다음 문장에서 특정 조건에 따른 검색을 진행하고자 할 때, 정규표현식을 사용할 수 있습니다.

The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.

  • too를 찾고자 할 때 -> /too/
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
  • 대소문자 구분 없이 t를 모두 찾고자 할 때 -> /t/-gi
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
  • d로 시작하는 단어 및 문자를 모두 찾고자 할 때 -> /[d]\w+/-gi
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
  • ea가 들어가는 단어를 찾고자 할 때 -> /[a-z]*ea[a-z]*/-i
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.

다음 사이트를 이용하면 의도한 대로 정규표현식이 작성되었는지 확인할 수 있어 매우 유용합니다.

regexr.com

Expression 아래에 식을 삽입하고, 그 아래 상자에는 검색 대상이 될 텍스트를 입력하면 됩니다.

그럼 먼저 표현식이 나타내는 의미에 대해 알아본 뒤, 자바스크립트에서 편리하게 사용하는 방법을 확인해 보겠습니다.


1. 정규표현식 기호의 종류

  • / . / → 모든 문자
  • / + / → 하나 이상의 문자
  • / ? / → 0 개 또는 1개의 문자
  • / ^ / → 해당 문자를 제외
  • / / → 범위 지정
  • / * / → 0 개 또는 1개 이상의 문자
  • / [ ] / → 집합 구성
  • / { } / → 반복 횟수 지정
  • / \ / → 이스케이프 문자
  • / \d / → 모든 숫자
  • / \D / → 숫자가 아닌 문자
  • / \w / → 알파벳, 숫자, 밑줄_ 문자
  • / \W / → 알파벳, 숫자, 밑줄_이 아닌 문자
  • / \s / → 공백 문자
  • / \S / → 공백이 아닌 문자
  • / \n / → 줄 바꿈 문자

정규표현식의 가장 기본이 되는 기호와 의미는 위와 같으며, 위 기호의 사용법만 익힌다면 정규표현식의 기본적인 이해는 가능할 것입니다.

그럼 각 기호의 사용 예제를 통해 사용법을 익혀보도록 하겠습니다.


2. 기호의 의미

정규 표현식에서 가장 기초가 되는 부분이므로 외워두면 유용하게 사용할 수 있습니다. d는 숫자, w는 영문자, 숫자, _, s는 공백, n은 줄바꿈을 의미하며, 각 단어의 대문자는 NOT(반대)을 의미합니다.

  • 숫자가 한 번 이상 반복되는 문자 검색 👉 / [\d]+ /
  • 숫자가 아닌 문자 검색(공백 포함) 👉 / [\D] /
  • 괄호가 포함된 문자, 숫자 검색 👉 / \([\w]+\) /
  • 영문자, 숫자, _ 가 아닌 문자 검색 👉 / [\W]+ /
  • 공백을 검색 👉 / \s /

regexr.com에 검색할 대상이 되는 문장을 붙여 넣거나 직접 작성한 뒤 원하는 패턴으로 표현식을 직접 만들어보면 정규 표현식에 금방 익숙해질 수 있습니다.


이스케이프란 무엇일까요? 키보드 왼쪽 상단에 있는 ESC 버튼이 이스케이프의 약자입니다. 바로 벗어나다는 뜻인데요.

여기서는 기존에 지정된 약속에서 벗어난다는 뜻으로 보면 됩니다.

예를 들어서 .(마침표, dot)의 경우 모든 문자를 의미하는 뜻으로 사용됩니다.

하지만 때로는 글자 그대로 마침표 기호를 의미하고 싶은 경우도 있는데요. 이 때 이스케이프 문자를 사용하면 ‘우리 약속했던 것에서 벗어나자’는 뜻으로 사용할 수 있습니다.

  • 모든 문자를 의미. a, b, c, d, ?, !, @, , 등 모든 문자 중 하나를 의미 👉 / . /
  • 오직 .(마침표)만을 의미 👉 / \. /
  • 하나 이상의 문자를 의미 👉 / + /
  • 오직 +(플러스)만을 의미 👉 / \+ /

이스케이프는 매우 유용한 필수 기능이므로 이스케이프가 필요한 문자를 확인해 둘 필요가 있습니다.


정규 표현식에서 특정 기호는 특별한 의미를 갖습니다. 대표적인 기호의 사용법은 다음과 같습니다.

  • 소문자 a~z 또는 대문자 A~Z 내 일치하는 영문자 검색 👉 / [a-zA-Z] /
  • color 또는 colour를 검색(u가 있어도 되고 없어도 됨) 👉 / colou?r /
  • a를 포함하는 단어 검색 👉 / [\S]*a[a-zA-Z]* /
  • a-z 또는 공백(space)이 아닌 문자 검색 👉 / [^a-z ] /
  • 영문자로 시작하여 반드시 숫자 또는 특수 기호를 포함하는 문자열 검색 👉 / [a-zA-Z]+[\d!@#\$%\^*]+[\w]* /

중괄호는 반복 횟수를 지정하며, 이를 사용하면 검색 패턴의 상세한 지정이 가능합니다.

중괄호에 하나의 숫자를 넣으면 전체 반복 횟수를 의미하며, 두 개의 숫자는 시작과 끝의 범위를 의미합니다.

예를 들어 {3}이면 패턴을 3번 반복하라는 의미를 가지며, {1, 3}은 범위 구간이 1에서 3까지임을 의미합니다.

{1, }과 같은 표현도 가능하며, 이는 + 기호와 같은 의미, 즉 하나 이상이라는 의미를 갖습니다.

  • A가 3번 반복되는 문자를 검색 👉 / [A]{3} /
  • 3자리 이상인 숫자를 검색(3번 이상 반복) 👉 / [\d]{3,} /
  • A가 2번에서 3번 반복되는 문자를 검색(반복 범위 지정) 👉 / [A]{2,3} /

반복 횟수만 지정하면 의도하지 않은 결과도 함께 검색되는 경우가 많아 하위표현식 및 전후방 탐색과 함께 사용하면 더욱 효과적인 패턴의 사용이 가능합니다.


대괄호 내 기재된 기호로 검색할 패턴을 지정합니다. 기호를 직접 기입하거나 범위 지정 기호인 -를 사용해 검색 패턴을 지정할 수 있습니다.

  • 지정한 문자(a 또는 A 또는 b 또는 B 또는 c 문자)를 하나 검색 👉 [aAbBc]
  • a에서 e까지(a,b,c,d,e)의 범위 내 문자하나 검색 👉 [a-e]
  • 제외 문자인 ^가 있으므로 a-z 범위에 들어가지 않는 문자 또는 기호를 하나 검색 👉 [^a-z]
  • 지정 기호 중 하나를 검색 👉 [?!@#$%^&*()_]
  • c 또는 C로 시작하여, a-z 중 하나로 끝나는 단어 검색 👉 [cC][a-z]

[ ] 내 기재된 기호는 하나의 문자 또는 하나의 기호를 대상으로 검색하므로 한 글자 이상을 검색하고 싶은 경우에는 +(하나 이상의 문자) 또는 *(0개 또는 1개 이상의 문자)를 붙여줘야 합니다.

  • 한 개 이상의 a-z 문자를 검색(반드시 1 개 이상 존재하는 조건) 👉 [a-z]+
  • 0 개 이상의 A-Z 문자를 검색(있을 수도 있고 없을 수도 있는 조건) 👉 [A-Z]*

위 조건은 특정 구성을 갖는 문자열 검색에 효과적이며, 예를 들어 이메일 주소가 있습니다.

이메일 주소 형식인 abcd@xyz.com을 검색하기 위해서는 다음과 같은 검색 패턴을 사용할 수 있습니다.

/[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]+/

패턴을 분석해 보겠습니다.

먼저 이메일의 아이디에 해당하는 부분은 영문자 및 숫자로 이루어질 수 있으므로 [a-zA-Z0-9]로 시작하고, 하나 이상의 문자이므로 +기호를 붙여줍니다.

아이디가 끝나는 부분에 @가 따라오므로 @를 기입하고, 뒤의 호스트 주소 역시 하나 이상의 영문자와 숫자로 지정합니다.

.com 형식의 주소이므로 .(마침표, dot)문자와 일치시키기 위해 이스케이프로 .(마침표, dot)을 지정해주고, 다시 하나 이상의 영문자를 지정하여 이메일 검색 패턴을 생성합니다.

아이디에 .(마침표, dot)이 들어가거나 호스트 주소가 .co.kr의 형식이 되는 경우에는 위 패턴에서 약간의 응용이 필요합니다.



3. 종합 정리

정규 표현식은 처음 보면 마치 외계어처럼 기존의 프로그래밍 언어와는 다른 모습을 하고 있습니다.

선뜻 다가가기 어렵거나 거부감이 들기도 하는데요. 알고나면 생각보다 간단하고 규칙적인 구조를 가지고 있어 마음이 놓이기도 하고 검색에 응용할 수 있는 부분이 많은 것을 깨닫습니다.

위에서 소개한 부분은 아주 기초적인 부분이며 대표적인 기능을 소개하기 위한 간략한 샘플 패턴이므로 정말 원하는 검색 패턴을 구현하기 위해서는 더 많은 기능을 익혀야 하고 검색 패턴도 보완되어야 할 부분이 많습니다.

추가 문의 사항이나 문제가 있는 부분은 댓글 남겨주세요.

감사합니다.

자바스크립트 비구조화 할당 사용하기(Beautiful Destructuring in JS)

자바스크립트에서 객체 비구조화(Object Destructuring)를 사용하는 아름다운 방법
from. How to Use Object Destructuring in Javascript(Dmitri Pavlutin)

비구조화 할당(Destructuring Assignment)이란 배열 또는 객체 안의 속성값를 풀어 편리하게 변수에 넣는 것을 말합니다.
한 번 선언으로 여러 속성값 추출, 하부 객체에서 접근, 값이 존재하지 않는 경우 기본값 설정 등이 가능합니다.

백 번의 설명보다 하나의 샘플 코드가 더 유용하므로 하나씩 알아보도록 하겠습니다.

1. 비구조화 할당의 필요성

자바스크립트 ES2015 환경에서 객체의 속성값을 가져오려면 다음과 같은 코드를 사용합니다.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const name = flower.name;
const color = flower.color;

console.log(name);    // 'Rose'
console.log(color);    //  'Red'

flower.name 값을 name 변수에 넣고, flower.color 값을 color 변수에 넣습니다.

하지만 위와 같이 값을 대입하면 반복되는 부분이 발생합니다. 바로 ‘name’과 ‘color’입니다.

대입 과정에서 name이 변수 선언에 한 번, 그리고 flower 객체의 속성 접근에 한 번, 총 두 번이 사용됩니다.

color도 마찬가지입니다.

비구조화 할당은 이런 번거로움을 없애고자 할 때 사용합니다.

비구조화 할당을 사용하면 객체에서 속성을 가져와 같은 이름의 변수에 대입할 때 속성명을 한번 더 명시할 필요가 없습니다.

게다가 속성이 여러 개일지라도 한번의 선언으로 해결이 가능합니다.

아래 코드에서는 위 코드를 리팩토링하여 비구조화 할당을 사용합니다.

const flower = {
 name: 'Rose',
 color: 'Red'
};

const { name, color } = flower;

console.log(name);   // 'Rose'
console.log(color);  // 'Red'

‘const { name, color } = flower’가 바로 객체 비구조화입니다.
이 구문으로 name과 color 변수를 선언하고, flower.name과 flower.color 속성의 값을 같은 이름 변수에 할당합니다.

다음은 객체의 속성값에 접근하는 두 가지 방법입니다.

const name = flower.name;
const color = flower.color;

// 위와 아래는 같은 결과

const { name, color } = flower;

속성명과 변수명이 중복되지 않으므로 비구조화가 훨씬 깔끔하고 편리한 것을 알 수 있습니다.

2. 속성값 가져오기

객체 비구조화의 기본 문법은 간단합니다.

const { identifier } = expression;

여기서 identifier는 속성에 접근할 이름이고, expression은 identifier가 접근하는 객체입니다.

비구조화를 하면 identifier 변수는 접근한 속성값을 갖게 됩니다.

위와 같은 코드이지만 속성 접근자를 사용하게 되면 다음과 같습니다.

const identifier = expression.identifier;

위 내용을 토대로 비구조화 할당을 연습해 보겠습니다.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { name } = flower;

console.log(name);  // 'Rose'

‘const { name } = flower;’는 name 변수를 선언하고, flower.name의 속성값을 대입하는 비구조화 할당입니다.

3. 여러 속성값 한번에 가져오기

여러 속성값을 가진 객체의 비구조화는 쉼표를 사용하면 됩니다.

const { identifier1, identifier2, ..., identifierN } = expression;

여기서 identifier1, identifier2, …, identifierN은 속성에 접근할 이름이고, expression은 identifier가 접근하는 객체입니다. 비구조화를 하면 각 identifier 변수는 접근한 속성값을 갖게 됩니다.

속성 접근자를 사용하는 코드는 다음과 같습니다.

const identifier1 = expression.identifier1;
const identifier2 = expression.identifier2;
// ......
const identifierN = expression.identifierN;

그럼 두 개의 속성값을 할당하는 첫 번째 샘플 코드를 다시 확인해 보겠습니다.

const flower = {
 name: 'Rose',
 color: 'Red'
};

const { name, color } = flower;

console.log(name);   // 'Rose'
console.log(color);  // 'Red'

‘const { name, color } = flower;’는 name, color 두 변수를 생성하고, 각각 flower.name과 flower.color의 속성값을 할당합니다.

4. 기본값 설정하기

비구조화를 하더라도 객체에 동일한 속성명이 존재하지 않는 경우 undefined가 할당됩니다.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { meaning } = flower;

console.log(meaning);  // undefined 

위와 같이 속성이 존재하지 않는 경우 기본값 설정이 가능하며, 문법은 다음과 같습니다.

const { identifier = defaultValue } = expression;

identifier가 expression 객체의 속성에 접근하는 이름이 됩니다. expression 객체 내 identifier 속성이 존재하지 않으면 지정한 기본값인 defaultValue가 대입됩니다.

다음 코드와 같은 기능을 합니다.

const identifier = expression.identifier === undefined ? defaultValue : expression.identifier;

기본값 설정 옵션을 더해 코드를 수정해 보겠습니다.

const flower = {
  name: 'Rose',
  color: 'Red'
}

const { meaning = 'love' } = flower;

console.log(meaning)  // 'love'

undefined 대신 ‘love’가 대입됩니다.

5. 별명(alias) 정하기

객체의 속성명과 다른 이름으로 변수를 선언하고 싶을 때는 별명을 지정하면 됩니다.

const { identifier: aliasIdentifier } = expression;

여기서 identifier는 속성에 접근하는 이름이며, aliasIdentifier는 변수로 사용할 이름입니다. 비구조화를 하면 aliasIdentifier가 속성값을 갖습니다.

다음 코드와 같은 의미입니다.

const aliasIdentifier = expression.identifier;

실제 별명을 적용한 코드는 다음과 같습니다.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { color: realColor } = flower;

console.log(realColor); // 'Red'
console.log(color); // 에러 발생(color is not defined)

위 코드는 realColor로 변수를 선언하고, flower.color값을 할당하여 비구조화를 진행합니다.

6. 내부 객체의 속성값 가져오기

앞에서 확인한 샘플은 원시형 데이터 타입(String, Number 등)의 속성을 갖는 일반 객체입니다.

그러나 일부는 객체 안에 또 다른 객체를 갖습니다. 물론 이러한 형태를 가진 객체도 비구조화 할당이 가능합니다.

const { nestedObject: { identifier } } = expression;

nestedObject는 내부 객체명이고, identifier는 내부 객체의 속성명입니다.

비구조화 할당을 통해 identifier가 내부 객체의 속성값을 가지며, 다음 코드와 같은 의미입니다.

const identifier = expression.nestedObject.identifier;

내부 객체의 깊이는 제한이 없으며, 중괄호{ }만 추가해주면 됩니다.

const { propA: { propB: { propC: {......} } } } = object;

다음 샘플을 통해 내부 객체에 접근하여 비구조화 할당을 진행하는 코드를 확인해 보겠습니다.

const flower = {
  name: 'Rose',
  color: 'Red',
  blooming: {
   season: 'spring'
  }
};

//Object destructuring
const { blooming: { season } } = flower;

console.log(season) // 'spring'

‘const { blooming: { season } } = flower;’는 내부 객체 blooming의 season 속성값을 할당합니다.

7. 동적 이름으로 속성값 가져오기

동적 이름(Dynamic Name)의 사용도 가능합니다.

const { [propName]: identifier } = expression;

propName은 속성명(주로 string 타입)이며, identifier는 값이 할당될 변수의 이름입니다.

다음 코드와 같은 의미를 갖습니다.

const identifier = expression[propName];

다음 샘플을 통해 속성명으로 사용되는 prop을 확인하겠습니다.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const prop = 'name';
const { [prop]: flowerName } = expression;

console.log(flowerName); // 'Rose'

‘const { [prop]: flowerName } = expression’에서 flowerName 변수에 flower[prop] 속성값을 할당하며, prop은 접근할 속성명을 가진 변수입니다.

8. 비구조화 할당 후 남겨진 객체

나머지 데이터를 관리하는 문법은 비구조화 할당에서 유용하게 사용할 수 있습니다.

const { identifier, ...rest } = expression;

위 코드에서 identifier를 제외한 나머지 속성은 rest 변수에 할당됩니다.

아래 코드에서 name 속성을 제외한 나머지 속성을 정리하는 샘플을 확인해 보겠습니다.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { name, ...realColor } = flower;

console.log(realColor) // { realColor: 'Red' }

name 속성값을 할당한 뒤 나머지 속성들은 realColor 변수에 할당합니다.

9. 자주 사용되는 구문

앞에서 확인한대로 비구조화는 속성값을 변수에 할당합니다.

변수 타입은 const, let, var 모두 사용이 가능하며, 이미 선언된 변수에도 할당이 가능합니다.

let을 사용한 방법은 다음과 같습니다.

//let
const flower = {
  name: 'Rose',
};

let { name } = flower;

console.log(name); // 'Rose'

var를 사용한 방법은 다음과 같습니다.

//var
const flower = {
  name: 'Rose',
};

var { name } = flower;

console.log(name); // 'Rose'

이미 선언된 변수에 할당하는 방법은 다음과 같습니다.

//existing variable

let name;

const flower = {
  name: 'Rose',
};

({ name } = flower);

console.log(name); // 'Rose'

for…of 반복문을 사용한 비구조화 할당은 다음과 같습니다.

const flowers = [
  { name: 'Rose' },
  { name: 'Lily' }
];

for (const { name } of flowers) {
  console.log(name) //'Rose', 'Lily'
}

사실 비구조화는 할당이 가능한 곳이면 어디든지 사용이 가능하다고 볼 수 있습니다.

예를 들면 다음과 같이 함수 파라미터의 비구조화도 가능합니다.

const flowers = [
  { name: 'Rose' },
  { name: 'Lily' }
];

const names = flowers.map(
  function({ name }) {
    return name;
  }
)

console.log(names); // ['Rose', 'Lily']

‘function({ name })’은 함수의 파라미터를 비구조화하여, name 변수에 name 속성을 할당합니다.

10. 변수 값 서로 교환(swap)

비구조화 할당을 사용하면 두 변수의 값을 편리하게 교환할 수도 있으며, 기존처럼 데이터를 임시로 보관할 변수가 필요하지 않습니다.

let a = 1;
let b = 2;

//기존 교환 방법
const temp = a;
a = b;
b = temp;

//비구조화를 통한 교환
[a, b] = [b, a];

11. 정리

비구조화 할당은 객체의 속성값을 빠르고 쉽게 변수에 할당할 수 있는 아주 강력한 기능을 제공합니다.
특히 간결한 문법과 여러 변수를 한 번에 선언할 수 있는 점이 매력적입니다.


비구조화 할당에 대해 간결하면서도 누구나 이해하기 쉽도록 작성된 좋은 글을 접하게 되어 좋은 정보를 나누고자 양해를 구하여 국내에 맞게 번역하고 일부 내용을 추가하여 글을 올리게 되었습니다. 궁금하신 사항은 댓글 남겨주세요.

출처: https://dmitripavlutin.com/javascript-object-destructuring/

Useful Shortcut Keys For Visual Studio Code(VS code단축키 모음)

효율적인 작업을 위한 비쥬얼 스튜디오 코드(VS Code) 단축키 모음

Sometimes we need some shortcut keys for improving efficiency and avoiding irritable repeating works.

But occasionally, we use it because just seems cool!

VS code shortcut keys will help you and your work faster.

You can also check or edit shortcuts keys at File – Preferences – Keyboard Shortcuts.

Or follow default set version as below.

단축키는 효율성을 높이거나 반복되는 작업에 자주 사용하곤 합니다.

그 작업이 게임이건 사무용 프로그램이건 말이죠.

단축키를 쓰면 실력자로 보이기도 하고, 약간은 숙련자로 보이기도 하는 것 같습니다.

익숙한 단축키부터 유용한 단축키까지 VS Code에서 사용할 수 있는 단축키를 정리해보았습니다.

물론 File – Preferences – Keyboard Shortcuts에서 단축키의 수정도 가능합니다.


SHORTCUT KEYS FOR VS CODE

EDIT
CopyCtrl + C복사
CutCtrl + X잘라내기
PasteCtrl + V붙여넣기
Select AllCtrl + A전체 선택
Undo(↔Redo)Ctrl + Z실행취소(↔다시실행)
Redo(↔Undo)Ctrl + Y다시실행(↔실행취소)
Copy LineAlt + Shift + ↑/↓행 복사하기
Move LineAlt + ↑/↓행 옮기기
Insert Line AboveCtrl + Shift + Enter한 줄 삽입하기(위쪽)
Indent LineCtrl + ]들여쓰기
Line CommentCtrl + /코멘트 (라인)
Block CommentAlt + Shift + A코멘트 (블록)
FindCtrl + F찾기
ReplaceCtrl + H바꾸기
Trigger SuggestionCtrl + Space완성 제안
Close EditorCtrl + W에디터 닫기
SaveCtrl + S저장하기
Reopen closed EditorCtrl + Shift + T닫은 에디터 열기
Full Screen ModeF11풀스크린
Sidebar visibilityCtrl + B사이드바 열기
Show TerminalCtrl + `터미널 열기
Debug
Start/ContinueF5시작/계속
StopShift + F5정지
BreakpointF9브레이크 포인트

VS Code 터미널 Terminal에서 yarn 실행하기

How to use ‘yarn’ with VS Code terminal


VS Code와 yarn을 설치하고 VS Code의 터미널에서 yarn을 사용하려고 하면 다음과 같이 에러가 뜨는 경우가 있어요.

이는 스크립트의 실행 권한으로 발생하는 문제인데요. Node.js command prompt 등의 프롬프트를 따로 열고 실행하면 문제없지만 하나의 툴(VS Code)로 코드도 편집하고 프롬프트 명령도 사용할 수 있으면 좋잖아요.

다음과 같이 간단한 작업을 통해 문제를 해결할 수 있습니다.

1. Windows PowerShell 을 관리자 권한으로 실행


2. 주어진 권한 상태 확인(get-ExecutionPolicy)

get-ExecutionPolicy 명령을 입력하면 권한이 Restricted로 설정되어 있는 것을 확인할 수 있어요.
간단하게 이 권한을 RemoteSigned로 변경해주면 됩니다.


3. Set-ExecutionPolicy RemoteSigned 입력 -> y

Set-ExecutionPolicy RemoteSigned를 실행하면 변경 여부를 묻고, y를 입력하면 변경이 완료!
get-ExecutionPolicy 명령을 통해 변경된 권한을 확인할 수 있어요.


4. 작동 여부 확인

이제 자유를 얻은 VS Code 터미널에서 yarn 명령을 실행해 만족스러운 결과를 확인합니다.

개발자의 영어 사전(Developers’ terms in English)

Developers’ terms in English and Korean for foreign works

공부와 번역 일을 하면서 문장 번역과 업무에 핵심이 되는 개발 용어들을 틈틈이 정리하여 업데이트하는 포스트

  • anonymous function 익명 함수
  • arrow function 화살표 함수
  • ascending order 오름차순
  • assign 할당하다
  • braces { } 중괄호 (=curly brackets)
  • brackets [ ] 대괄호
  • boilerplate 상용구
  • cascade 연속, 종속
  • closure 클로저 (자바스크립트 클로저 포스팅)
  • curly brackets { } 중괄호 (=braces)
  • declarative programming 선언형 프로그래밍
  • deprecated 더 이상 사용되지 않는, 사라지게 될
  • descending order 내림차순
  • DOM (Document Object Model) 문서 객체 모델
  • duplicate 복사하다, 복제하다
  • execute 실행하다
  • first-class function 일등 함수 (함수와 변수를 구분하지 않는 함수)
  • function 함수
  • function call operator 함수 호출 연산자 ( )
  • functional programming 함수형 프로그래밍
  • global variable 전역변수
  • IIFE (Immediately Invoked Function Expression) 즉시 실행 함수
  • immutable 불변의
  • imperative programming 명령형 프로그래밍
  • impure function 불순 함수
  • inheritance 상속
  • invoke 호출하다
  • LOC(Lines of Code) 코드 라인
  • local variable 지역변수
  • loop 루프 / 반복 실행
  • manipulate 조작하다
  • memoization 메모이제이션(동일한 계산(또는 함수 생성) 반복 시 이전 계산 값을 메모리에 저장하여 반복 계산을 피함)
  • migration 이동, 이주
  • method 메서드
  • mutable 가변의
  • object 객체
  • object literal 객체 리터럴
  • object oriented programming (OOP) 객체 지향 프로그래밍
  • operand 피연산자
  • opinionated 의견이 있는, 고집이 있는, 방안을 제시하는, 제한을 두는(Angular 프레임워크 특징 설명 시 자주 사용)
  • parallel 병행의, 병렬의
  • parentheses ( ) 소괄호
  • parse 분석하다
  • pure fuction 순수 함수
  • quotation mark 따옴표
  • reactive programming 반응형 프로그래밍
  • recursive function 재귀 함수
  • regular expression 정규 표현
  • REST (REpresentational State Transfer) REST
  • response 응답, 리스폰스
  • request 요청, 리퀘스트
  • robust 탄탄한, 강력한
  • shallow copy 얕은 복사(동일한 객체를 참조)
  • snippet 조각, 단편, 코드 조각
  • syntax 문법
  • ternary operator 삼항연산자
  • UI (User Interface) UI
  • unopinionated 의견이 없는, 방안을 제시하지 않는, 제한을 두지 않는(Express 프레임워크 특징 설명 시 자주 사용)
  • variable 변수