들어가기에 앞서..
가끔 친구와 술을 마실 때면 개발 이야기를 하곤 합니다. (거의 술 마실 때마다 항상 하는 것 같기도 하고;;)
하여튼 대화 도중에 `세미콜론`에 대한 이야기가 나왔습니다.
"
파이썬으로 개발을 많이 하다가 자바스크립트를 해야 할 때면 세미콜론 정말 귀찮아.
자꾸 빼먹게 돼서 어디는 들어가 있고 어디는 안들어가 있고...
이거 정말 꼭 붙여야 하는 걸까?
자바스크립트는 세미콜론 없어도 문제 없잖아??
자바같이 엄격한 애들은 에러 나서 넣긴 하는데, 굳이 자바스크립트는..
"
여기서 간단히 설명하면, 파이썬은 세미콜론이 아닌 들여쓰기를 통해 구문구분이 됩니다.
따라서 세미콜론이 필요 없습니다.
저는 프로그래밍을 배우던…. 새싹일 때부터 많은 강사가,
그리고 만났던 사수들이 예외사항이 생길 수 있다며 세미콜론을 꼭 붙이라고 했습니다.
그래서 의심조차 하지 않고 늘 사용해왔고 심지어 회사 컨벤션에 포함된 경우도 봤습니다.
그리고 플러그인 프로그래밍할 때 타 플러그인과의 충돌을 막기 위해 세미콜론으로 시작하는 예도 종종 봤습니다.
근데 이게 정말 필수였을까요?
궁금증을 해결해보기 위해 찾아봤습니다.
본문
세미콜론을 사용하지 않고 개발한다고 해서 구문 구분 시 세미콜론이 없는 것이 아닙니다.
인터프리터과정에서 자동으로 구문 구분을 해야 하는 곳에 세미콜론을 붙여주기 때문입니다.
이 과정을 세미콜론 자동삽입(ASI, automatic semicolon insertion)이라고 합니다.
그리고 이 과정이 존재하기에 논쟁은 시작되었을 것 같습니다.
자동으로 붙여주는 것을 왜 우리가 넣어야 하는가.
많은 사람이 혹.시.모.르.는 예외사항을 대비하라고 합니다.
하지만
반대 견해의 사람들은 자동삽입이 되는 동작을 이해하고 코딩하면 문제가 되지 않을 것이라고 합니다.
예시
return
true;
이때 개발자는 return; true;로 보겠지만, 인터프리터에서는 return true;로 인식합니다.
하지만 이것도 자동삽입되는 부분의 동작을 이해하면 문제가 되지 않을 수도 있습니다.
그렇습니다. 사용하지 말자는 사람의 의견대로 인터프리터에 자동삽입의 코딩스타일을 정립할 수 있다면 세미콜론을 강제하지 않아도 됨을 말합니다.
정답이 없기 때문에 빠르게 결론으로 가겠습니다.
짧게보는 이야기
1. 자바스크립트는 구문구분 시 세미콜론을 넣어야 한다
2. 세미콜론을 넣지 않을 때 인터프리터가 자동으로 넣어준다.
3. 자동으로 넣어줄 때 오류가 생길 예외사항에 대해 과거에 많은 사람이 세미콜론을 강제했다.
4. 인터프리터의 과정을 이해하여 코딩할 경우 세미콜론이 없어도 충분히 예외사항이 생기지 않는다.
5. 인터프리터의 과정에 따라 코딩스타일이 정립된다면 세미콜론을 강제할 필요가 없다.
6. 하지만 여전히 논쟁거리
결론
자바스크립트의 기본 규칙은 세미콜론을 붙이는 것이며
과거에 나온 자바스크립트 교재를 보면 대부분 세미콜론을 넣는 것이 바람직하다고 설명합니다.
자동삽입에 대한 이해가 없어도(할 필요도 없이) 세미콜론을 넣게 되면 문제를 미리 방지할 수 있습니다.
세미콜론을 마지막으로 구문이 구분되니 가독성에도 좋습니다.
그리고 사용해서 문제가 되는 것은 없으나 반대의 경우 문제가 될 경우가 조금이라도 있다면 개발자는 예외사항도 무시하면 안 된다 생각합니다.
(안전한걸 하지 않을 이유는 없겠죠.)
하지만 저와 친구가 한 대화의 현실적인 결론은 아래와 같습니다.
물론 세미콜론을 넣는 스타일로 정립된 저는 사용하자는 편에 서 있지만요.
"
회사 컨벤션에 쓰라고 돼 있으면 쓰고 말라면 만다.
그 외 개인적인 코딩은 개인이 책임지기 때문에 알아서 한다.
"
논쟁거리
okky 홈페이지에서 논쟁인 부분을 캡처해서 가져왔습니다.
대화의 출처는 ooky이며 저작권 문제가 있다면 삭제하겠습니다.
https://okky.kr/article/448378
참고
https://bakyeono.net/post/2018-01-19-javascript-use-semicolon-or-not.html
https://blog.hanaoto.me/semicolon_javascript/
https://weicomes.tistory.com/135
https://okky.kr/article/448378
'개념' 카테고리의 다른 글
[jQuery기초] 버전별 특성 (0) | 2020.06.18 |
---|---|
[jQuery기초] jQuery란? (0) | 2020.06.17 |
회사에서 쓰던 환경 그대로 VSCode 동기화하기!__gist__settings sync__ 설정 동기화 (0) | 2020.04.27 |
VSCode 에디터 .tpl 확장자 인식방법(코드 확장자 인식방법) (0) | 2020.04.22 |
객체지향프로그래밍이란? 3요소 | 5원칙 | 그리고 추상화 (0) | 2020.02.25 |
Git Squash 깃 스쿼시, 커밋 연결하기/병합하기 소스트리에서 사용해보기 (0) | 2020.02.24 |
git Stash 깃 스태시, 소스트리에서 사용해보기 (1) | 2020.02.24 |
자바스크립트 프로토타입(Prototype)이란? __ 프로토타입링크(Prototype Link)__프로토타입객체(Prototype Object) (1) | 2020.02.14 |