-
[JavaScript] 05-2. 참조타입프로그래밍/JavaScript 2014. 5. 27. 22:44반응형
< 프론트엔드 개발자를 위한 자바스크립트> (2013 인사이트, 한선용 옮김) 의 책을 요약한 내용으로 자바스크립트 제대로 배우기 스터디 그룹(페이스북) 의 글입니다.
* 단원간 파트가 길어짐에 따라 단원을 분리하여 정리할 생각입니다.
5.3 Date 타입
- ECMAScript의 Date 타입은 자바 초기 버전의 java.util.Date에 기반한다.
- Date 타입은 날짜와 시간을 저장할 때 1970년 1월 1일 자정부터 몇 밀리초가 지났는지 나타내는 숫자를 사용
- 이런 형식을 사용하므로 Date 타입은 1970년 1월 1일 자정으로부터 285,616년 전후의 날짜를 정확히 표현할 수 있다.
- 날짜 객체를 생성할 때는 new 연산자 다음에 Date 생성자를 사용
- ECMAScript 5에서는 Date 객체에 now() 메서드가 추가되었다. 이 메서드는 현재 시각을 밀리초 표현을 반환한다. 이 메서드를 사용하면 코드의 실행 시간을 측정하는 프로파일링 작업을 할수 있다.
5.3.1 상속된 메서드
- 다른 참조 타입과 마찬가지로 Date타입 역시 toLocaleString(), toString(), vlaueOf() 메서드를 오버라이드한다.
- toLocaleString()이나 toString()은 디버그 목적으로 사용할만하지만 브라우저 호환성 문제로 사용자에게 표시하기에는 적당하지 않다.
5.3.2 날짜 표시 메서드
- Date 타입에는 날짜를 특정한 형식으로 표현하는 메서드가 존재한다.
- toDateString() - 날짜를 요일, 월, 일, 년 형식으로 표현
- toTimeString() - 날짜를 시, 분, 초, 타임존 형식으로 표현
- toLocaleDateString() - 날짜를 요일, 월, 일, 년, 형식으로 표현
- toLocaleTimeString() - 날짜를 시, 분, 초, 타임존 형식으로 표현
- toUTCString() - 날짜를 UTC(협정 세계시) 형식으로 표현
5.3.3 날짜/시간 부속 메서드
- Date 타입의 메서드인데 날짜의 특정 부분을 가져오거나 설정하는데 사용한다.
5.4 RegExp 타입
- ECMAScriptsms RegExp 타입을 통해 정규 표현식을 지원한다.
5.4.1 정규 표현식 인스턴스 프로퍼티
- RegExp 인스턴스에는 각 프러퍼티 패턴에 대한 정보를 포함
5.4.2 정규 표현식 인스턴스 메서드
- RegExp 객체에서 가장 많이 쓰이는 메서드는 그룹을 캡처할 의도로 만들어진 exec() 메서드
- exec() 메서드는 패턴을 테스트할 문자열을 매개변수로 받고 패턴에 일치하는 문자열 배열을 반환하며 일치하는 부분을 찾을 수 없을 때는 null을 반환한다.
- exec() 메서드가 반환하는 배열은 Array의 인스턴스인 동시에 프로퍼티 두 개가 추가된다.
- index 프로퍼티는 패턴이 일치한 위치를 나타내며 input 프로퍼티는 exec() 메서드에 넘긴 문자열이다.
- exec()메서드가 반환하는 배열의 첫 번째 데이터는 패턴에 일치하는 부분 전체인데 다른 데이터는 표현식에서 캡쳐한 부분이다.
- 패턴에 캡쳐 그룹이 없다면 반환하는 배열에는 데이터가 하나만 존재한다.
5.4.3 RegExp 생성자 프로퍼티
- RegExp 생성자에는 몇가지 프로퍼티가 존재하는데 이들 프로퍼티는 스코프에 포함된 정규 표현식 전체에 영향을 미치며 마지막으로 실행한 정규 표현식 조작에 따라 바뀐다.
- 프로퍼티의 또 다른 특징은 두 가지 방법으로 접근 가능하다는 점이다.
5.4.4 패턴의 한계
- ECMAScript의 정규 표현식은 완전히 개발된 상태이지만 펄 같은 언어에서 가능한 고급 정규 표현식 기능에는 미치지 못한다.
- ECMAScript 정규 표현식에서 지원하지 않는 기능에 대해서는 http://www.regular-expressions.info/ 를 참고하십시오.
- 몇가지 제한이 있지만 ECMAScript에서 지원하는 정규 표현식 기능만으로도 대부분의 작업을 충분히 처리가능하다.
5.5 Function 타입
- 함수는 ECMAScript에서 가장 흥미로운 부분인데 이는 함수가 사실 객체라는 점에 기인
- 모든 함수는 Function 타입의 인스턴스이며 다른 참조 타입과 마찬가지로 프로퍼티와 메서드가 존재한다.
- 함수 역시 객체이므로 함수 이름은 단순히 함수 객체를 포인터일 뿐이지 함수와 단단히 결합되는 것은 아니다.
5.5.1 오버로딩 없음(다시 설명합니다)
- 함수 이름이 단순한 포인터임을 이해하면 ECMAScript에서 함수 오버로딩이 불가능한 이유를 이해할 수 있다.
5.5.2 함수 선언 vs 함수 표현식
- 함수 선언과 함수 표현식이 거의 일치한다.
5.5.3 값처럼 쓰는 함수
- ECMAScript에서 함수 이름은 단수 변수일 뿐이므로 함수도 다른 값이 올수 있는 곳이라면 어디든 올 수 있는데 이러한 특징 덕분에 함수를 다른 함수에 매개변수로 넘기거나, 함수가 실행 결과로 다른 함수를 반환하는 일이 가능해진다.
5.5.4 함수의 내부 구조
- 함수 내부에는 arguments, this 라는 특별한 개체가 있다
- arguments 객체는 배열과 비슷한 객체이며 함수에 전달된 매개변수를 모두 포함
- arguments 객체의 주요 목적은 함수 매개변수를 포현하는것이지만 arguments 객체의 소유자인 함수를 가리키는 포인터인 callee라는 프로퍼티도 있다.
5.5.5 함수 프로퍼티와 메서드
- ECMAScript의 함수는 객체이며 프로퍼티와 메서드를 가진다.
- 모든 함수에 공통인 프로퍼티는 length와 prototype이다.
- length 프로퍼티는 함수가 넘겨받을 것으로 예상하는 이름 붙는 매개변수의 숫자이다.
5.6 원시 래퍼 타입
- Boolean, Number, String은 원시 값을 편리하게 조작하기 위해 디자인된 참조 타입이다.
5.6.1 불리언 타입
- Boolean 타입은 불리언 값에 대응하는 참조타입인데 Boolean 객체를 생성하려면 Boolean 생성자에 true나 false를 넘기면 된다.
5.6.2 Number 타입
- Number 타입은 숫자형 값의 참조 타입인데 Number 객체는 Number 생성자에 숫자를 넘겨 생성한다.
5.6.3 String 타입
- String 타입은 문자열을 나타내는 객체이며 String 생성자를 통하여 생성한다.
5.7 내장된 싱글톤 객체
- ECMA-262 명세에서는 내장 객체를 ECMAScript 구현에서 제공하는 객체는 호스틓 ㅘㄴ경에 무관하며 ECMAScript 프로그램이 실행되는 즉시 이미 존재한다고 정의한다.
- 개발자가 내장 객체를 명시적으로 인스턴스화 할 필요가 없다.
5.7.1 Global 객체
- Global 객체는 명시적으로 접근할 수 없다는 점에서 ECMAScript에서 가장 독특한 객체다
- ECMA-262는 Global 객체를 소유자가 없는 모든 프로퍼티와 메서드를 담는 객체로 정의한다.
- 전역 변수나 전역 함수라는것은 존재하지 않지만 전역에서 정의하는 변수와 함수는 모두 Global 객체의 프로퍼티가 된다.
5.7.2 Math 객체
- ECMAScript에서는 수학 공식과 각종 상수를 Math 객체에 저장한다.
- 필요한 계산이 Math 객체에 구현되어 있다면 자바스크립트로 해당 수식을 직접 만들기보다는 Math 객체에 구현된 것을 이용하는 편이 훨씬 빠르다.
5.8 요약
- 자바스크립트 객체는 참조 값이라고 불리며 다음과 같이 내장된 참조 타입을 통해 특정한 타입의 객체 생성이 가능하다.
- ECMAScript의 참조 타입은 전통적인 객체 지향 언어의 클래스와 비슷하지만 다른점도 많다.
- 모든 참조 타입은 Object 타입의 작동방식을 상속한다.
- Array 타입은 데이터의 순서가 있는 목록이며 포함한 값을 조작하고 변환하는 기능을 제공한다.
- Date 타입은 현재의 날짜와 시간을 포함해 날짜와 시간에 관한 정보를 제공하며 이를 가공하는 메서드도 가지고 있다.
- RegExp 타입은 ECMAScript에서 지원하는 정규 표현식에 대한 인터페이스이며 정규 표현식의 기본 기능은 대부분 지원하고 고급 기능도 일부 지원한다.
- 자바스크립트의 독특한 점은 Function 타입의 인스턴스, 즉 함수도 객체의 일종
- 자바스크립트에는 원시 래퍼 타입이 존재하여 원시 값을 객체처럼 다룰수 있는데 Boolean, Number, String 세 가지 이다.
- 각 래퍼 타입은 이름의 원시 타입에 대응
- 원시 값을 읽기 모드로 접근할 때 원시 레퍼 객체의 인스턴스가 만들어지며 이를 통해 데이터를 조작
- 래퍼 객체는 원시 값을 조작하는 문장이 실행되는 즉시 파괴
- 내장 객체인 Global, Math 객체는 코드가 실행되는 즉시 생성
- ECMAScript에서 Global 객체에 접근할 수 있는 방법은 없지만 웹 브라우저는 Global 객체를 window 객체로 구현한다.
- Global 객체는 모든 전역 변수와 함수를 프로퍼티 형태로 포함
- Math 객체에는 복잡한 수학 계산에 필요한 프로퍼티와 메서드가 포함
요약 후기
- 상세 메서드 내용들은 생략하였다. 다 요약하려면 책을 요약하는 것이 아니라 책을 쓰게 될것같아서; 그리고 지금 시점에서 최대한 진도를 빠르고 정확하게 빼는것이 목적이지 요약이 최우선 목표가 아니므로 내용면에서 허술한 점이 꽤나된다... 이렇게 찝찝하게 하는거 별로 안좋아하는데.. -ㅅ-
반응형'프로그래밍 > JavaScript' 카테고리의 다른 글
JavaScript ES6 함수형 자바스크립트 기본 (0) 2019.05.26 [JavaScript] 07. 함수 표현식 (0) 2014.05.28 [JavaScript] 05-1. 참조타입 (0) 2014.05.27 [JavaScript] 06-1. 객체 지향 프로그래밍 - 객체에 대한 이해 (0) 2014.04.09 [JavaScript] 04. 변수와 스코프, 메모리 (0) 2014.04.03