자바스크립트 프로그램은 함수에서 모든 것을 처리.

함수는 비트를 옮기고 연산을 수행하기 위해 변수와 연산자를 사용.

코드의 가독성을 높이고 복잡도를 낮추려면 기본 포맷을 정한 후 변수, 함수, 연산자 사용법을 정해야 함.


4.1 변수 선언

  - 변수는 var 문을 이용하여 선언.

  - 자바스크립트에서 var는 스크립트 어느 곳에나 올 수 있고 또 여러 번 사용 가능.

  - 모든 변수 선언은 변수가 선언된 위치와 상관없이 함수의 최상단으로 끌어올려진다.

    -> 이것을 호이스트(hoist)라고 한다.

    -> 이로 인해 개발자들이 코드를 잘못 이해하는 일이 종종 발생.

  - for문에서도 변수 선언은 호이스팅(hoisting) 된다는 사실을 잘 인지하지 못하는 경우 발생.

  - 변수 선언을 하면 함수 최상단으로 변수가 끌어올려 지므로 어디에 선언하는지에 관계 없이 최상단에 변수를 선언하는 것과 같다.

  - 이러한 이유로 자바스크립트에서는 변수를 함수 이곳 저곳에 선언하지 않고 최상단에 한꺼번에 선언하는 스타일을 가장 많이 사용.


4.2 함수 선언

  - 함수 선언도 변수 선언처럼 자바스크립트 엔진에 의해 끌어올려진다

    -> 따라서 함수가 선언되기 전에 먼저 사용가능.

  - 자바스크립트 엔진이 해석하는 방법대로 코드를 작성해야 하므로 함수를 사용하기 전에 반드시 먼저 선언할 것을 권장.


4.3 함수 호출문에 공백 넣기

  - 일반적으로 함수 호출문은 복합문과 쉽게 구분할 수 있도록 함수명과 괄호 사이에 아무런 공백도 입력하지 않는 스타일을 권장

ex)

//좋은 예

doSomethind(item);


//나쁜 예: 복합문 처럼 보임.

doSomething (item); 


//복합문.

while (item) {

    //실행할 코드

}


4.4 함수 선언하고 바로 호출하기

  - 자바스크립트에서는 함수 이름이 없는 익명 함수를 선언할 수 있다.

  - 선언한 익명함수를 변수나 프로퍼티에 대입할 수 도 있다.

 var doSomething = function() {

    //함수 본문

};

  - 익명 함수는 선언과 동시에 호출할 수 있고 또 그 반환값을 변수에 할당하는 것도 가능.

  - 익명 함수 선언문 끝에 괄호를 열고 닫으면 바로 호출 가능.

 var value = functnio() {

    // 함수 본문


    return {

      message: "Hi"

    }

}();

  - 함수가 선언과 동시에 호출되었기 떄문에 변수 value에는 함수가 아닌 객체가 할당됨.

  - 이 패턴은 변수에 익명 함수를 할당하는 것과 상당히 유사해 보이는 문제점 발생.

  - 명확하게 하려면 함수 앞뒤에 괄호를 추가.


4.4.1 strict 모드

  - ECMAScript5부터 자바스크립트 문장을 해석하고 실행할 때 실수를 줄이기 위해 strict 모드가 도입.

  - strict 모드를 적용하려면 프라그마(자바스크립트 전처리기에 내리는 명령)를 추가

    -> "use strict"

  - 단순 문자열로 보이지만 ECMAScript5 자바스크립트 엔진은 이 코드를 만나면 strict 모드를 위한 전환 명령어로 인식.

  - 이 프라그마는 전역으로 사용 가능하며 함수 내부에서만 유효하도록 지역적으로도 사용 가능.

  - 일반적으로 전역으로 사용하는 것은 지양.


4.5 동등 연산자

  - 자바스크립트에서 사용할 때 타입 강제 변환이 일어나 다루기 까다롭다.

  - 주로 ==와 != 연산자를 사용할 떄 타입 강제 변환이 일어남.

    -> 서로 다른 데이터 타입을 비교할 때 타입을 강제 변환. 같은 데이터 타입을 비교할 떄는 변환하지 않는다.

  - null과 undefinded는 ECMAScript 표준에 따르면 같은 값으로 판단

  - 타입이 강제 변환되는 ==와 != 사용대진 === 와 !==를 사용하는 것이 좋음.

  - =-==와 !== 연산자는 타입 강제 변환없이 비교 연산을 수행.


4.6 eval()

  - eval()은 문자열로 된 자바스크립트 코드를 실행하는 함수.

 eval("alert('Hi!')");


var count = 10;

var number = eval("5 + count");

  - eval() 함수 외에도 문자열로 된 자바스크립트 코드를 실행하는 방법이 존재.

  - function 생성자, setTimeout(), setInterval()을 통해 자바스크립트 문자열을 실행 가능.

var myFunc = new Functino("alert('Hi!')");


setTimeout("document.body.style.background='red'", 50);


setInterval("document.title = 'It is now '" + (new Data()), 1000); 

  - 특별한 case가 아니면 eval(), setTimeout, setInterval 사용을 금하자.


4.7 기본 래퍼 타입

  - 기본 래퍼 타입은 String, Boolean, Number 세가지가 존재.

  - 각 타입은 전역 범위를 갖는 생성자가 존재하고 기본 데이터 타입에 해당하는 객체가 존재.

  - 기본 래퍼 타입은 다음 예제처럼 기본 데ㅣ터 타입을 객체처럼 사용할 수 있다.

var name = "Nicholas"

console.log(name.toUpperCase());

  - 변수 name은 객체가 아니고 기본 데이터 타입인 문자열 이지만 마치 객체인 것 처럼 toUpperCase() 메서드 사용 가능.

  - 자바스크립트 엔진에서 String타입으로 새로운 인스턴스를 우리도 모르게 생성하기 떄문이다. 

  - 구글 자바스크립트 스타일 가이드에서는 기본 래퍼 타입을 직접 사용하는 것을 금지.




















Maintainable JavaScript 책 정리 시작.

(읽기 좋은 자바스크립트 코딩 기법)


자바스크립트를 사용할 줄은 알았다.

정말 제대로 된 자바스크립트 코딩이였을까? 라는 질문에

"No. 그냥 대충 기능만 구현되도록 구글링 해서 어거지로 구현했어" 라는 답이 도출 됐다.


현재 앱 서비스의 서버파트 개발을 하고 있지만

Native App의 단점을 보완하고 서버 주도적인 서비스를 구축하고자 Hybrid 방식을 채택하기 시작했다.

(Native App의 단점이라면 한번 배포되면 회수가 불가능하다는 점과 웹 처럼 빠른 수정 및 대응이 불가능하다는 점 등등..)


결국 웹 페이지 작업은 진행해야 했고 깔끔하고 군더더기 없는 소스를 짜고 싶었기 떄문에

해당 책을 추천 받아 읽었고, 그 내용을 블로그에 정리하기로 했다.


지은이 말.

  - 웹 개발의 전문화는 어렵고 복잡한 과정으로 이루어져 왔다.

  - 대기업에서도 웹을 전문화시키는 과정에서 많은 시행착오를 겪어왔다,

  - 소유모의 기업에서 모든 웹 서비스를 혼자 담당하는 사람이면 무엇이든 원하는 대로 가능하겠지만 대부분의 프로그래머가 기업이라는 환경에서 일하게 되면서 혼자 하는 것이 아니라 팀 단위로 작업하는 방법을 알아가야 함.

  - 6년차 이직 이후 팀원들과 다른 방식으로 코드를 짜게 되는 것을 알게 되었고 그것이 문제가 있다고 판단.

  - 팀에 더 도움이 되도록 동료들과 같은 방식으로 작업 시작.

  - 생소한 부분은 그 부분을 잘 아는 동료의 작성 코드를 참고

  - HTML, CSS, 자바스크립트 코딩의 경우 동료에세 패턴을 적용해볼 것을 권하고 이를 표준으로 규정하기 위해 빌드 프로세스에 린트 추가.

  - 결과, 팀은 윤활유가 잘 칠해진 기계처럼 유기적인 업무 가능

  - 이미 익숙해진 프로세스 중에도 항상 옳지만은 않다.

  - 통일된 방법이 없으면 많은 개발자들은 각자의 방법대로 처리하고 그 결과 버그로 이어지기도 함.

  - 이 책은 '개인이 아닌, 팀의 일원으로 자바스크립트 코드를 작성하는 방법'에 관한 책이다.

  - 우리는 코드를 유지보수하는 데 대부분의 시간을 보내고 있다.

  - 동료에게 "우리는 자신을 위해 코드를 작성하는 것이 아니라 다음에 이 코드를 보게 될 사라믈 위해 작성하는 것" 이라는 말을 자주 했음.

  - 이 책은 자바스크립트 코딩 컨벤션과 이에 대한 논의로 구성.

  - 가장 유명한 코딩 컨벤션 문서인 '자바 프로그래밍 언어 코드 컨벤션' 에서는 다음과 같은 이유로 코딩 컨벤션의 중요성을 언급


  * 소프트웨어를 사용하면서 드는 비용의 80%는 유지보수에 사용된다.

  * 소프트웨어 생명주기 동안 최초 개발자가 끝까지 유지보수하는 경우는 거의 없다.

  * 코딩 컨벤션은 소프트웨어의 가독성을 향상시켜, 개발자가 새로운 코드를 더 빠르고, 더 완전하게 이해할 수 있게 한다.

  * 소스 코드를 제품화 시키려면, 다른 제품들처럼 깔끔하고 잘 패키지화되는 것을 보장할 수 있어야 한다.


앞으로도 코더가 아니라 개발자가 되고 싶다.

좋은 개발자가 되기 위해서 이 책은 좋은 안내서가 될 수 있다고 생각한다.

이 책은 결국 좋은 결과물을 만들기 위한 책 이기 떄문이다.

+ Recent posts