펭귄집

토비의 스프링 3.1 스프링의 이해와 원리
1장 오브젝트와 의존관계
/
- 인터페이스는 어떤 일을 하겠다는 기능만 정의해놓은 것이다.
-> 따라서 인터페이스에는 어떻게 하겠다는 구현 방법은 나타나있지 않다.
(그건 인터페이스를 구현한 클래스들이 알아서 결정할 일)


connectionMaker = new DConnectionMaker();
-> DConnection 클래스의 생성자를 호출해서 오브젝트를 생성하는 코드
어떤 ConnectionMaker 구현 클래스를 사용할지를 결정하는 new DConnectionMaker()라는 코드가 있다.


사용되는 오브젝트를 서비스 / 사용하는 오브젝트를 클라이언트라고 부를 수 있다.


클래스 사이에 관계가 만들어진다는 것은 한 클래스가 인터페이스 없이 다른 클래스를 직접 사용한다는 뜻이다.
-> 따라서 클래스가 아니라 오브젝트와 오브젝트 사이의 관계를 설정해줘야 한다.


오브젝트 사이의 관계는 런타임 시에 한쪽이 다른 오브젝트의 레퍼런스를 갖고 있는 방식으로 만들어진다.
connectionMaker = new DConnectionMaker();
-> DConnectionMaker의 오브젝트의 레퍼런스를 UserDao의 connectionMaker 변수에 넣어서 사용하게 함으로써, 이 두개의 오브젝트가 '사용'이라는 관계를 맺게 해준다.


오브젝트는 얼마든지 메소드 파라미터 등을 이용해 전달할 수 있으니 외부에서 만든 걸 가져올수 도 있다.
외부에서 만든 오브젝트를 전달받으려면, 메소드 파라미터나 생성자 파라미터를 이용하면 된다.
이런경우 파라미터로 전달되는 오브젝트의 클래스는 항상 인터페이스를 구현하기만 했다면 어떤 것이든지 상관없다.


숫자



자바스크립트는 하나의 숫자형만 존재
모든 숫자를 64비트 부동 소수점 형태로 저장하기 때문 -> 이는 C언어의 double 타입과 유사

var키워드로 선언되 자바스크립트 변수에는 정수나 실수 구분없이 그 값을 바로 저장할 수 있으므로 intNum, floatNum변수 모두 typeof연산자의 결과값이 number

자바스크렙스에선 정수형이 따로 X, 모든 숫자를 실수로 처리 -> 나눗셈할 때 주의



var num = 5/2;


console.log(num); 
console.log(Math.floor(num));



결과

2.5


2



이같이 소수 부분을 버리고 정수부분만 구하고 싶으면 Math.floor() 메서드 사용 ㄱㄱ


<참고문헌 : 인사이드자바스크립트(InsideJavascript)>

'전공서적 > 인사이드자바스크립트' 카테고리의 다른 글

Array() 생성자 함수  (0) 2017.11.16
Javscript배열 리터럴  (0) 2017.11.13
배열  (0) 2017.10.26
객체비교  (0) 2017.10.25
함수 호이스팅  (1) 2017.08.31

Array() 생성자 함수



배열은 일반적으로 배열 리터럴로 생성하지만, 배열 리터럴도 결국 자바스크립트 기본 제공 Array() 생성자 함수 로배열을 생성하는 과정을 단순화시킨 것.
생성자 함수로 배열과 같은 객체를 생성할 때는 반드시 new 연산자를 같이 써야한다는 거 알아둬

- 호출할 때 인자가 1개이고, 숫자일겨우 : 호출된 인자를 length로 갖는 빈 배열 생성

-  그 외의 경우 : 호출된 인자를 요소로 갖는 배열 생성


var foo = new Array(3);

console.log(foo);          
console.log(foo.length);  

var bar = new Array(1, 2, 3);
console.log(bar);     
console.log(bar.length);




결과값


[undefined, undefined, undefined]

3

1, 2, 3

3


foo 배열의 경우 Array() 생성자 함수를 호출 할 때 3이라는 인자 1개만 넘겼으므로, 3개의 요소가 있는 빈 배열 생성

반면, bar배열의 경우는 Array(1,2,3)와 같이 호출했으므로 1,2,3 세개의 숫작 요소인 배열이 생성

<참고문헌 : 인사이드자바스크립트(InsideJavascript)>


'전공서적 > 인사이드자바스크립트' 카테고리의 다른 글

javascript 소수점 없앨 때  (0) 2017.11.23
Javscript배열 리터럴  (0) 2017.11.13
배열  (0) 2017.10.26
객체비교  (0) 2017.10.25
함수 호이스팅  (1) 2017.08.31

Javascript 배열


배열은 자바스크립트 객체의 특별한 형태이다.

-> 즉, 굳이 크기를 지정하지 않아도 되며, 어떤 위치에 어느 타입의 데이터를 저장하더라도 에러가 발생하지 않는다. 




Javascript 배열 리터럴


배열리터럴은 자바스크립트에서 새로운 배열을 만드는데 사용하는 표기법이다.
객체리터럴 표기법 : ({ }) -> 중괄호

배열리터럴 표기법 : ([ ]) -> 대괄호





//배열 리터럴을 통한 5개 원소를 가진 배열생성

var colorArr = ['orange', 'yellow', 'blue', 'green', 'red'];
console.log([0]);  //(출력값) orange
console.log([1]);  //(출력값) yellow
console.log([4]);  //(출력값) red



객체 리터럴에서는 프로퍼티 이름과 프로퍼티값을 모두 표기해야 하지만,
배열리터럴에서는 각 요소의 값만 포함한다. 
객체가 프로퍼티의 이름으로 대괄호나 마침표표기법을 이용해 해당 프로퍼티에 접근했다면,
배열의 경우는 접근하고자 한느 원소에 배열 내 위치 인덱스 값을 넣어서 접근한다.

배열 내의 첫 번째 원소는 인덱스0부터 시작한다.




<참고문헌 : 인사이드자바스크립트>

 



'전공서적 > 인사이드자바스크립트' 카테고리의 다른 글

javascript 소수점 없앨 때  (0) 2017.11.23
Array() 생성자 함수  (0) 2017.11.16
배열  (0) 2017.10.26
객체비교  (0) 2017.10.25
함수 호이스팅  (1) 2017.08.31

배열


배열은 자바스크립트 객체의 특별한 형태이다.

-> 즉, 굳이 크기를 지정하지 않아도 되며, 어떤 위치에 어느 타입의 데이터를 저장하더라도 에러가 발생하지 않는다.



배열 리터럴

배열리터럴은 자바스크립트에서 새로운 배열을 만드는데 사용하는 표기법이다.
객체리터럴 표기법 : ({ }) -> 중괄호
배열리터럴 표기법 : ([ ]) -> 대괄호


//배열 리터럴을 통한 5개 원소를 가진 배열생성

var colorArr = ['orange', 'yellow', 'blue', 'green', 'red'];


console.log([0]);  
console.log([1]);  
console.log([4]);  


출력

(출력값) orange

(출력값) yellow

(출력값) red



객체 리터럴에서는 프로퍼티 이름과 프로퍼티값을 모두 표기해야 하지만,
배열리터럴에서는 각 요소의 값만 포함한다. 

객체가 프로퍼티의 이름으로 대괄호나 마침표표기법을 이용해 해당 프로퍼티에 접근했다면,
배열의 경우는 접근하고자 한느 원소에 배열 내 위치 인덱스 값을 넣어서 접근한다.

배열 내의 첫 번째 원소는 인덱스0부터 시작한다.



<참고문헌 : 인사이드자바스크립트>


'전공서적 > 인사이드자바스크립트' 카테고리의 다른 글

Array() 생성자 함수  (0) 2017.11.16
Javscript배열 리터럴  (0) 2017.11.13
객체비교  (0) 2017.10.25
함수 호이스팅  (1) 2017.08.31
자바스크립트 참조타입(객체타입)  (0) 2017.08.30

객체비교


동등연산자(==)를 사용하여 두 객체를 비교할 때도 객체의 프로퍼티 값이 아닌 참조값을 비교한다는 것을 알아야 한다.


var a = 100;
var b = 100;

var objA = { value : 100 };
var objB = { value : 100 };

var objC = objB;

1번
console.log(a == b);       
2번
console.log(objA == objB);  
3번
console.log(objB == objC); 


출력값

1번

console.log(a == b);        //(출력값) true
2번
console.log(objA == objB);  //(출력값) false
3번
console.log(objB == objC);  //(출력값) true


1번
a와 b는 숫자100을 저장하고 있는 기본타입의 변수
기본타입으 경우 동등 연산자(==)를 이용해서 비교할때 값을비교
두 변수 모두 100이라는 동일한 값을 가지고 있으므로 a==b의 결과가 true

2번
아래그림처럼 objA와 objB는 다른객체지만 같은 형태의 프로퍼티값을 갖고있음
하지만 동등연산자(==)로 두 객체를 비교하면 1번과 다르게 결과가 false
-> 이유는 1번처럼 기본타입의 경우는 값 자체를 비교해서 일치여부를 판단하지만, 객체와 같은 참조타입의 경우는 참조값이 같아야 true


objA ->    value : 100

objB ->
               value : 100

objC -> 


참고문헌 : <인사이트자바스크립트>


'전공서적 > 인사이드자바스크립트' 카테고리의 다른 글

Javscript배열 리터럴  (0) 2017.11.13
배열  (0) 2017.10.26
함수 호이스팅  (1) 2017.08.31
자바스크립트 참조타입(객체타입)  (0) 2017.08.30
null 과 undefined  (0) 2017.08.30

모델2에서 Front Controller패턴으로


Front Controller 적용원인

1. 각 컨트롤러 사이의 중복적인 코드의 문제

2. 개발자의 개발패턴의 차이

=> 이로인해 모델2방식은 좀 더 강제적인 형태인 Front Controller방식을 적용


Front Controller패턴의 가장 중요한 변화는 전체 로직의 일부만을 컨트롤러가 처리하도록 변경 == '위임' (Delegation)

전체로직의 일부를 컨트롤러에게 위임하고 모든 흐름의 제어는 앞쪽의 Fornt Controller가 담당
-> 이런 구조를 사용하게 될 경우
     1. 개발자가 작성하는 컨트롤러는 전체 로직의 일부분만을 처리 => 개발자가 작성해야 하는 전체코드가 줄어듬
     2. 모든 컨트롤러는 Front Controller의 일부분을 구현한느 형태이므로, 좀 더 규격화된 코드 구현 가능




<참고문헌 : 코드로 배우는 Spring 웹 프로젝트>

'전공서적 > 코드로 배우는 Spring 웹 프로젝트' 카테고리의 다른 글

모델2패턴의 이해  (0) 2017.10.24

델2패턴의 이해


스프링 MVC는 모델2방식 구조르 이요하기 때문에 이론적으로 모델2방식에 대한 이해가 필요하다


최근의 모든 웹 개발은 거의 모델2방식을 사용한다.


모델2방식은 흔히 MVC구조를 응용하는 것이라고 생각하는데 가장중요한것 

 -> 화면과 데이터 처리를 분해해서 재사용이 가능하도록 하는 구조


모델2구조에서는 다음과 같은 용어들이 사용된다

 모델(Model)

데이터 혹은 데이터를 처리하는 영역을 의미한다 

뷰(View) 

결과 하면을 만들어 내는 데 사용하는 자원이다 

컨트롤러(Controller) 

웹의 요청(request)을 처리하는 존재로 뷰와 모델사이의 중간 통신 역할을 한다   


컨트롤러는 모델계층과 연동해서 필요한 데이터를 처리하고, 결과를 뷰로 전송하게 된다.


모델2에서 모든 요청은 기본적으로 컨트롤러를 호출한다.
각 컨트롤러는 자신을 호출하는 특정한 URL경로를 가지고 있다.


  모델2방식의 장점

 개발자와 웹 퍼블리셔의 영역을 분리할 수 있다 

 컨트롤러의 URL을 통해서 뷰를 제어하기 때문에, 뷰의 교체나 변경과 같은 유지보스에 유용 




<참고문헌 : 코드로 배우는 Spring 웹 프로젝트>

함수 호이스팅



함수를 생성하는 3가지 방법이 있는데 동작방식이 약간의 차이가 있다. 

=> 그 중 하나가 함수 호이스팅(Function Hoisting)


함수표현식만을 사용할 것을 권장하는데 그 이유는 함수 호이스팅때문

//함수 선언문 방식과 함수 호이스팅

//1번
add(2,3);  // 5

//함수 선언문 형태로 add() 함수 정의
//2번
function add(x,y) {
     return x + y;
}

//3번
add(3,4);  // 7


1번
이 시점에서 add()함수가 정의되지 않았음에도 2번에 정의된 add()함수를 호출하는 것이 가능하다.
-> 이것은 함수가 자신이 위치한 코드에 상관없이 함수 선언문 형태로 정의한 함수의 유효범위는 코드의 맨 처음부터 시작한다는 것을 확인할 수 있다.
=> 이것이 함수 호이스팅

3번

2번에서 정의된 add() 함수가 정상적으로 호출


이러한 함수 호이스팅은 함수를 사용하기 전에 반드시 선언해야한다는 규칙을 무시하므로 코드의 구조를 엉성하게 만들 수도 있음
-> 함수 표현식 사용 이유

함수 표현식으로하면 위의 결과가 달라


//함수 표현식 방식과 함수 호이스팅
//1번
add(2,3);  //uncaught type error

//함수 표현식 형태로 add()함수 정의
//2번
var add = function(x,y){
     return x + y;
}

//3번
add(3,4);  //7


1번
add()함수는 2번에서 함수 표현식 형태로 정의되어 있어 호이스팅이 일어나지않는다.
-> 따라서 3번과 같이 함수가 생성된 이후에 호출이 가능.
1번에서는 add()함수를 호출한 시점에서 아직 add()함수가 생성되기 전이므로 uncaught type error 에러가 발생

3번

add()함수가 생성된 후에는 함수가 정상적으로 동작한다는 것을 확인 가능


이러한 함수 호이스팅이 발생하는 원인은 자바스크립트의 변수생성(Instantiation)초기화(Initialization) 작업이 분리돼서 진행되기 때문


<참고문헌 : 인사이드자바스크립트>

'전공서적 > 인사이드자바스크립트' 카테고리의 다른 글

배열  (0) 2017.10.26
객체비교  (0) 2017.10.25
자바스크립트 참조타입(객체타입)  (0) 2017.08.30
null 과 undefined  (0) 2017.08.30
문자열  (0) 2017.08.30

자바스크립트 참조타입(객체타입)



자바스크립트에서 숫자, 문자열, 불린값, null, undefined 같은 기본 타입으 제외한 모든 값은 객체다.
-> 따라서 배열, 함수, 정규표현식 등도 모두 결국 자바스크립트 객체로 표현된다.

자바스크립트에서 객체는 단순히 '이름(key) : 값(value)' 형태의 프로퍼티들을 저장하는 컨테이너로서, 해시라는 자료구조와 유사하다.

자바스크립트에서 기본타입은 하나의 값만을 가지는데 비해, 참조타입인 객체는 여러개의 프로퍼티들을 포함할 수 있으며, 이러한 객체의 프로퍼티는 기본타입의 값을 포함하거나, 다른객체를 가리킬 수 있다.

-> 이러한 프로퍼티의 성질에 따라 객체의 프로퍼티는 함수로 포함할 수 있으며, 자바스크립트에서는 이러한 프로퍼티를 메서드라 부른다.



<참고문헌 : 인사이드자바스크립트>


'전공서적 > 인사이드자바스크립트' 카테고리의 다른 글

객체비교  (0) 2017.10.25
함수 호이스팅  (1) 2017.08.31
null 과 undefined  (0) 2017.08.30
문자열  (0) 2017.08.30
참조타입의 특성  (0) 2017.08.25