변수 : 값이 위치하고 있는 메모리 주소에 접근하기 위해 사람이 이해할 수 있는 언어로 명명한 식별자
var
, let
, const
키워드를 사용하여 선언하고 할당 연산자를 사용해 값을 할당. 식별자인 변수명을 사용해 변수에 저장된 값을 참조
데이터 타입에 따라 확보해야 할 메모리의 크기(byte)가 다르다.
자바스크립트는 동적 타입 언어이므로 변수의 타입 지정 없이 값이 할당되는 과정에서 자동으로 변수의 타입이 결정(타입 추론, Type Inference)된다.
: 즉 변수는 고정된 타입이 없다.
변경 불가능한 값(immutable value)이며 pass-by-value(값에 의한 전달)이다.
str[0] = 'S'
처럼 이미 생성된 문자열의 일부 문자를 변경해도 반영되지 않는다. (에러는 발생 X, 한 번 생성된 문자열은 read only로서 변경 불가능(immutable)이기 때문)var str = 'Hello'; // 식별자 str은 메모리에 생성된 문자열 'Hello'의 메모리 주소를 가리킨다.
str = 'world'; // 이전에 생성된 문자열 'Hello'를 수정하는 것이 아니라 새로운 문자열 'world'를 메모리에 생성하고 식별자 str은 이것을 가리킨다.
// 이 때 문자열 'Hello'와 'world'는 모두 메모리에 존재하고 있다.
typeof
연산자로 null 값을 연산해 보면 null이 아닌 object가 나옴(자바스크립트 설계상의 오류) -> null 타입을 확인할 때 ===
을 사용하여야 한다.// 심볼 key는 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키
var key = Symbol('key');
console.log(typeof key); // symbol
//
var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value
원시 타입을 제외한 나머지 값들 모두(배열, 함수, 정규표현식 등)
pass-by-reference(참조에 의한 전달) 방식으로 전달됨
localhost:8080/[파일명].html
접속 시
내장 톰켓 서버가 요청을 받음
-> 스프링 컨텐이너가 hello-static으로 매핑이 된 컨트롤러 있는지 찾음
-> 없으면 resources/static/[파일명].html
있는지 찾아서 있으면 띄워줌
※ resources/static/[파일명].html
없으면 white label error
MVC : Model, View, Controller
View - 화면을 그리는데 집중
Model, Controller - 비즈니스 로직, 내부적인 처리에 집중
Model에 담으면 그걸 View에서 렌더링할 때 씀
정형화된 패턴 : 컨트롤러를 통해 외부 요청을 받고 서비스에서 비즈니스 로직을 만들고 리포지토리에서 저장
@RequestParam("[파라미터명]") [자료형] [파라미터명]
default : required = true
localhost:8080/[컨트롤러에 매핑된 메소드명]/?[파라미터명]=[값]
들어오면
내장 톰켓서버에서 스프링 컨테이너로 던짐
-> 컨트롤러 찾음
-> 컨트롤러에 매핑되어 있는 메소드 호출
-> 메소드 [템플릿 명] 리턴, model([파라미터명]: [값])
-> viewResolver에서 templates/[템플릿 명].html
찾아서 Thymeleaf 템플릿 엔진 처리해서 변환 한 HTML 웹 브라우저에 반
@ResponseBody
HTTP body에 return 하는 데이터를 직접 넣어주겠다
리턴한 값이 요청한 클라이언트한테 그대로 전달
객체를 리턴하면 자동으로 json으로 반환
@ResponseBody
를 사용하면 viewResolver를 사용하지 않음@ResponseBody
사용 원리
localhost:8080/[컨트롤러에 매핑된 메소드명]/?[파라미터명]=[값]
들어오면
내장 톰켓서버에서 스프링 컨테이너로 던짐
-> 컨트롤러 찾음
-> @ResponseBody
어노테이션 붙어있으면
-> viewResolver 대신에 HttpMessageConverter가 동작
-> 리턴값이 문자이면 StringConverter, 객체이면 JsonConverter 동작