프로그래밍언어68 [모던 자바스크립트 Deep Dive] 48장 모듈 48.1 모듈의 일반적 의미 모듈module이란 애플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드 조각을 말한다. 일반적으로 모듈은 기능을 기준으로 파일 단위로 분리한다. 이때 모듈이 성립하려면 모듈은 자신만의 파일 스코프(모듈 스코프)를 가질 수 있어야 한다. 자신만의 파일 스코프를 갖는 모듈의 자산은 캡슐화되어야 한다 모듈은 공개가 필요한 자산에 한정하여 명시적으로 선택적 공개가 가능하다. 이를 export라 한다. 모듈 사용자는 모듈이 공개export한 자산 중 일부 또는 전체를 선택해 자신의 스코프 내로 불러들여 재사용할 수 있다. 이를 import라 한다. 48.2 자바스크립트와 모듈 자바스크립트 파일을 여러 개의 파일로 분리하여 script 태그로 로드해도 분리된 자바스크립트 파일들은.. 2024. 2. 25. [모던 자바스크립트 Deep Dive] 44장 REST API REST REpresentational State Transfer는 HTTP/1.0과 1.1의 스펙 작성에 참여했고 아파치 HTTP 서버 프로젝트의 공동 설립자인 로이 필딩의 2000년 논문에서 처음 소개되었다. 발표 당시의 웹이 HTTP를 제대로 사용하지 못하고 있는 상황을 보고 HTTP의 장점을 최대한 활용할 수 있는 아키텍쳐로서 REST를 소개했고 이는 HTTP 프로토콜을 의도에 맞게 디자인하도록 유도하고 있다. REST의 기본 원칙을 성실히 지킨 서비스 디자인을 "RESTful" 이라고 표현한다. 즉, REST는 HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍쳐고, REST API는 REST를 기반으로 서비스 API를 구현한 것을 의미한다. 44.1 REST API의.. 2024. 2. 24. [모던 자바스크립트 Deep Dive] 43 Ajax 43.1 Ajax란? Ajax Asynchronous JavaScript and XML란 자바스크립트를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식을 말한다. Ajax는 브라우저에서 제공하는 web API인 XMLHttpRequest 객체를 기반으로 동작한다. XMLHttpRequest는 HTTP 비동기 통신을 위한 메서드와 프로퍼티를 제공한다. 이전의 웹페이지는 html 태그로 시작해서 html 태그로 끝나는 완전한 HTML을 서버로부터 전송받아 웹페이지 전체를 처음부터 다시 렌더링 하는 방식으로 동작했다. 따라서 화면이 전환되면서 서버로부터 새로운 HTML을 전송받아 웹페이지 전체를 처음부터 다시 렌더링했.. 2024. 2. 24. [모던 자바스크립트 Deep Dive] 42장 비동기 프로그래밍 42.1 동기 처리와 비동기 처리 자바스크립트 엔진은 단 하나의 실행 컨텍스트 스택을 갖는다. 이는 함수를 실행할 수 있는 창구가 단 하나이며, 동시에 2개 이상의 함수를 동시에 실행할 수 없다는 것을 의미한다. 실행 컨텍스트 스택의 최상위 요소인 "실행 중인 실행 컨텍스트"를 제외한 모든 실행 컨텍스트는 모두 실행 댁 ㅣ중인 태스크tast 들이다. 자바스크립트 엔진은 한 번에 하나의 태스크만 실행할 수 있는 싱글 스레드 방식으로 동작한다. 싱글 스레드 방식은 한 번에 하나의 태스크만 실행할 수 있기 때문에 처리에 시간이 걸리는 태스크를 실행하는 경우 블로킹(작업 중단)이 발생한다. 현재 실행 중인 태스크가 종료할 때까지 다음에 실행될 태스크가 대기하는 방식을 동기synchronous 처리 라고 한다. .. 2024. 2. 18. [모던 자바스크립트 Deep Dive] 39장 DOM(2) 39.4 노드 정보 취득 노드 객체에 대한 정보 취득 프로퍼티 Node.prototype.nodeType Node.protytype.nodeName 39.5 요소 노드의 텍스트 조작 39.5.1 nodeValue 지금까지 살펴본 토드 탐색, 노드 정보 프로퍼티는 모두 읽기 전용 접근자 프로퍼티다. 지금부터 살펴볼 Node.prototype.nodeValue 프로퍼티는 setter와 getter 모두 존재하는 접근자 프로퍼티다. 노드 객체의 nodeValue 프로퍼티를 참조하면 노드 객체의 값을 반환한다. 노드 객체의 값이란 텍스트 노드의 텍스트다. 39.5.2 textContent Node.prototype.textContent 프로퍼티는 setter와 getter 모두 존재하는 접근자 프로퍼티로서 요소.. 2024. 2. 17. [모던 자바스크립트 Deep Dive] 39장 DOM(1) 브라우저의 렌더링 엔진은 HTML 문서를 파싱하여 브라우저가 이해할 수 있는 자료구조인 DOM을 생성한다. DOM(Document Object Model)은 HTML 문서의 계층적 구조와 정보를 표현하면 이를 제어할 수 있는 API, 즉 프로퍼티와 메서드를 제공하는 트리 자료구조다. 39.1 노드 39.1.1 HTML 요소와 노드 객체 HTML 요소 HTML element는 HTML 문서를 구성하는 개별적인 요소를 의미한다. hello 시작 태그(start tag) class 어트리뷰트 이름(attribute name) "greeting" 어트리뷰트 값(attribute value) Hello 콘텐츠(content) 종료 태그(end tag) HTML 요소는 렌더링 엔진에 의해 파싱되어 DOM을 구성하는.. 2024. 2. 11. [모던 자바스크립트 Deep Dive] 38장 브라우저의 렌더링 과정 웹 애플리케이션의 클라이언트 사이드 자바스크립트는 브라우저에서 HTML, CSS와 함께 실행된다. 따라서 브라우저 환경을 고려할 때 더 효율적인 클라이언트 사이드 자바스크립트 프리그래밍이 가능하다. 이를 위해 브라우저가 HTML, CSS, 자바스크립트로 작성된 텍스트 문서를 어떻게 파싱(해석)하여 브라우저에 렌더링하는지 살펴보자. 파싱parsing 파싱(구문 분석syntax analysis)은 프로그래밍 언어의 문법에 맞게 작성된 텍스트 문서를 읽어 들여 실행하기 위해 텍스트 문서의 문자열을 토큰token으로 분해(어휘 분석lexical analysis)하고, 토큰에 문법적 의미와 구조를 반영하여 트리 구조의 자료구조인 파스 트리parse tree/syntax tree를 생성하는 일련의 과정을 말한다. .. 2024. 1. 14. [자바의 정석] 14. 람다식 1. 람다식이란? 람다식(Lambda expression)은 메서드를 하나의 '식(expression)'으로 표현한 것이다. 람다식은 함수를 간단하면서도 명확한 식으로 표현할 수 있게 해준다. 람다식을 '익명 함수(anonymous function)'이라고도 한다. 모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야 하고, 객체도 생성해야만 비로소 메서드를 호출할 수 있다. 그러나 람다식은 이 모든 과정 없이 오직 람다식 자체만으로도 메서드의 역할을 대신할 수 있다. 람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환될 수도 있다. 람다식으로 인해 메서드를 변수처럼 다루는 것이 가능해졌다. *메서드는 함수와 같은 의미지만, 특정 클래스에 반드시 속해야 한다는 제약이.. 2023. 12. 30. [자바의 정석] 12. 애너테이션(annotation) 3.1 애너테이션이란? 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 애너테이션은 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공할 수 있다는 장점이 있다. '@'을 붙여서 사용한다. 미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, javadoc.exe라는 프로그램이 이 정보를 읽어서 문서를 작성하는데 사용한다. 3.2 표준 애너테이션 애너테이션 설명 @Override 컴파일러에게 오버라이딩하는 메서드라는 것을 알린다. @Deprecated 앞으로 사용하지 않을 것을 권장하는 대상에 붙인다. @SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않게 해준다. @SafeVarargs 지네릭스 타입의 가변인자에 사.. 2023. 9. 30. [자바의 정석] 12. 열거형(enums) 2.1 열거형이란? 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. *관련된 상수들을 같이 묶어 놓은 것. 자바는 타입에 안전한 열거형을 제공 class Card { enum Kind { CLOVER, HEART, DIAMOND, SPADE } //열거형 Kind를 정의 enum Value { TWO, THREE, FOUR } //열거형 Value를 정의 final Kind kind; //타입이 int가 아닌 Kind임에 유의하자. final Value value; } 자바의 열거형은 '타입에 안전한 열거형(typesafe enum)'이라서 실제 값이 같아도 타입이 다르면 컴파일 에러가 발생한다. 이처럼 값뿐만 아디라 타입까지 체크하기 때문에 타입에 .. 2023. 9. 29. [자바의 정석] 12. 지네릭스 1.1 지네릭스란? 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬레션 클래스의 컴파일 시의 타입 체크(compile - time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.(컴파일 한계를 넘어서게 해줌) *컴파일러에게 타입정보를 주는 것. 형변환 에러를 줄일 수 있다. 지네릭스의 장점 타입 안정성을 제공한다 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다. 간단히 얘기하면 다룰 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 줄여준다는 얘기다. 1.2 지네릭 클래스의 선언 지네릭 타입은 클래스와 메서드에 선언할 수 있다. 클래스에 선언하는 지네릭 타입 //일반 클래스 class Box {.. 2023. 9. 28. [C++] 입출력 스트림 (2) cout을 이용한 출력 cout은 표준 출력 스트림인 ostream의 객체이다. ostream은 연산자 2023. 9. 25. 이전 1 2 3 4 ··· 6 다음