4.1 Objects객체 생성은 아래 두 가지 방식으로 할 수 있다.let user = new Object(); // "object constructor" syntaxlet user = {}; // "object literal" syntax마지막 속성의 끝에 쉼표를 사용해도 무방하다. 코드 편집 시 편리할 것 같다.let user = { name: "John", age: 30,}Square brackets객체 속성에 접근하려면 '.'을 사용하면 되는데, 속성 이름이 두 개 이상의 단어로 구성되어 있다면 대괄호를 사용해야 한다.// this would give a syntax erroruser.likes birds = true// setuser["likes birds"] = true;// getale..
2.15 Function함수를 정의할 때, 아래와 같이 text 파라미터의 기본값을 넣어 줄 수 있다.javascript에서는 함수를 호출할 때 일부 파라미터가 빠져도 정상적으로 호출되는데, 이때 빠진 파라미터의 기본값을 설정하는 것이다.function showMessage(from, text = "no text given") { alert( from + ": " + text );}showMessage("Ann"); // Ann: no text givenJava의 경우 메서드 이름이 같더라도 파라미터가 다르면 사실상 다른 메서드로 취급하기 때문에, 이 부분은 기억해 두고 잘 활용할 수 있는 방법을 고민해 볼 필요가 있겠다.Returning Value함수에서 값을 반환할 때, 값이 없는 것과 undefi..
2.12 nullish coalescing operator '??'result = a ?? b; null 병합 연산자는 아래 코드와 같은 동작을 한다. 먼저 나온 변수가 정의되어 있다면 해당 값을 반환하고, 아니면 뒤에 값을 반환한다.result = (a !== null && a !== undefined) ? a : b;조금 비슷한 용도로 '||'를 사용할 수도 있다. 가장 먼저 나오는 true 값을 반환하는 점을 이용한다.let firstName = null;let lastName = null;let nickName = "Supercoder";// shows the first truthy value:alert(firstName || lastName || nickName || "Anonymous"); /..
2.7 Type conversionsString ConversionString 변환은 String(value)으로 할 수 있음. Numeric ConversionNumber("123") 방식으로 변환이 가능하다. true는 1로 false는 0으로 변환된다.alert( Number(" 123 ") ); // 123alert( Number("123z") ); // NaN (error reading a number at "z")alert( Number(true) ); // 1alert( Number(false) ); // 0Boolean Conversionalert( Boolean(1) ); // truealert( Boolean(0) ); // falsealert( ..
2.5 Data types여덝가지의 기본 데이터 타입이 존재한다. javascript는 어떤 한 변수에 어떤 타입의 값이든 넣을 수 있는데, 이를 "동적 타입"이라 한다. number모든 정수, 부동 소수점 숫자를 나타낸다.Infinity, -infinity, NaN 와 같은 특수 숫자 값도 존재한다. (infinity 는 무한대, NaN 는 계산상의 오류) NaN의 경우 아래 케이스를 숙지해두자.alert( NaN + 1 ); // NaNalert( 3 * NaN ); // NaNalert( "not a number" / 2 - 1 ); // NaN0으로 나누거나 문자열을 숫자로 처리하는 등의 잘못된 연산을 수행하더라도 에러가 발생하는 것이 아니라, NaN 값이 나오기 때문에 비교적 안전하다.Bigi..
모던 자바스크립트 튜토리얼 이 문서를 참고하여 javascript 학습한 내용에 대해 기록한다. 가급적 영문 그대로 보고 이해 안 되는 부분만 한글로 번역해서 학습한다. 평소 알고 있던 내용은 생략하고 새롭게 알게 되거나 짚고 넘어가고 싶은 내용 위주로 기록한다. 2.1 Hello, World!The "script" tag" 보통 간단한 스크립트는 html 문서에 포함하고, 좀 복잡한 파일은 분리한다. 분리된 파일은 브라우저에서 캐시에 저장하는 이점이 있다. 이 경우 다른 페이지에서 해당 스크립트를 참조할 때, 새롭게 다운로드하는 것이 아니라 캐시에서 가져오게 된다. (사실상 한 번만 다운로드) 이를 통해 트래픽을 줄이고 페이지를 속도를 빠르게 유지할 수 있다. src 속성과 내부에 코드가 함께 쓰일 ..
아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라 자바 8 전에는 인터페이스에 메서드를 추가시키면, 기존 구현체를 깨뜨릴 수밖에 없음 이후 자바 8에 디폴트 메서드가 추가되면서 쉽게 메서드를 추가시킬 수 있게 되었지만, 여전히 위험성은 존재 디폴트 메서드를 추가한다는 것은 구현체에 대한 아무런 정보 없이 무작정 메서드가 삽입되는 것 대부분 잘 작동하지만, 모든 상황에서 잘 작동되는 디폴트 메서드를 작성하는 것은 어려움 디폴트 메서드에 의한 문제점 예시 자바 8 Collection 인터페이스의 removeIf 메서드 default boolean removeIf(Predicate
잘 설계된 컴포넌트는 외부로부터 내부 구현이 잘 숨겨져 있어서 구현과 API가 깔끔히 분리되어 있다. 이것을 정보은닉, 또는 캡슐화라고 한다. 정보 은닉의 장점 시스템 개발 속도 향상 시스템 관리 비용 절감 성능 최적화에 도움을 줌 소프트웨어 재사용성 향상 큰 시스템 제작의 난이도 감소 접근 제한 수준 private : 멤버를 선언한 톱레벨 클래스만 접근 가능 package-private(default) : 멤버가 소속된 패키지 안의 모든 클래스에서 접근 가능 protected : package-private의 접근 범위 포함, 이 멤버를 선언한 클래스의 하위 클래스에서도 접근 가능 public : 모든 곳에서 접근 가능 접근 제한자 활용 원칙 모든 클래스와 멤버의 접근성을 가능한 한 좁힌다. publi..