/static/star.jpg
/search?q=hello&hl=ko
application/x-www-form-urlencoded
: 전송 데이터 url encoding 함.multipart/form-data
: 여러 개의 컨텐츠 타입에 대한 데이터 전송 가능application/json
: JSON
형태로 전송프로토타입 스코프: 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프
해당 빈을 단독으로 사용하면 프로토타입 빈의 특성을 살릴 수 있지만,
싱글톤에 프로토타입 빈을 주입한 후에 사용하게 되면 프로토타입 빈의 특성을 살릴 수 없음.
싱글톤이 생성될 때, 이미 프로토타입 빈이 생성되어 주입됨.
이때 싱글톤의 로직을 사용하게 되면 프로토타입 빈을 새로 생성하는 것이 아닌 미리 생성해둔 빈을 사용하므로 프로토타입 빈의 특성을 살릴 수 없음.
Provider은 프로토타입 뿐만 아니라 DL이 필요한 경우에 언제든지 사용 가능함.
웹 환경에서만 동작하는 스코프
스프링이 해당 스코프의 종료시점까지 관리함. - 종료 메서드가 호출됨.
@Scope(value="request")
처럼 스코프 지정이 가능함.
ex) request
클라이언트 A와 B가 똑같은 요청을 하면 A 전용의 빈과 B 전용의 빈을 따로 생성함.
+) controller와 service
웹과 관련된 부분은 컨트롤러까지만 사용해야 함.
예를 들어 requestURL(HttpServletRequest request.getRequestURL()로 받은 URL: ex) http://loclhost:8080/log-demo
) 같은 웹과 관련된 정보는 웹과 관련없는 서비스 계층까지 넘어가지 말도록 해야 함.
=> 다형성을 이용하면 메시지를 이해할 수 있는 어떤 객체와도 협력할 수 있는 유연하고 확장 가능한 구조를 만들 수 있음.
다형성이 가능한 이유는 송신자와 수신자의 사이에 결합도 낮은 관계가 이어지고 있기 때문이며, 이 관계는 메시지로만 이루어져 있음.
!) 클래스는 단지 동적인 객체들의 특성과 행위를 정적인 텍스트로 표현하기 위해 사용할 수 있는 추상화 도구임.
객체지향을 구성하는 것은 객체이며, 객체들의 윤곽을 결정하는 것이 메시지임.
데이터 주도 설계: 데이터를 중심으로 객체를 설계하는 방식
이는 객체의 자율성을 저해함.
이를 통해 객체 외부에서는 몰라도 되는 객체 내부 구조의 변경이 외부의 협력자에게까지 파급될 것.
-> 객체를 독립된 단위가 아니라 협력이라는 문맥 안에서 생각해야 함.
=> 어떤 객체가 어떤 메시지를 전송할 수 있는가와 어떤 객체가 어떤 메시지를 이해할 수 있는가를 중심으로 객체 사이의 협력 관계를 구성하는 것이 휼륭한 객체지향 설계법임.
책임을 완수하기 위해 협력하는 객체들을 이용해 시스템을 설계하는 방법
객체가 책임을 완수하기 위해 다른 객체의 도움이 필요하다고 판단되면 도움을 요청하기 위해 어떤 메시지가 필요한지 결정함.
메시지를 결정하면 메시지를 수신하기에 적합한 객체를 선택함.
선택된 객체는 수신자가 되어 송신자가 기대한 대로 메시지를 처리할 책임이 있음.
=> 메시지가 수신자의 책임을 결정함.
'어떤 행위(what)'를 수행할 것인지를 결정한 후에 '누가(who)' 그 행위를 수행할 것인지를 결정해야 하는 것
행위를 먼저 식별한 후에 행위를 수행할 적절한 객체를 찾아야 함.
-> 메시지를 먼저 결정한 다음에 메지리를 수신하기에 적합한 객체를 선택해야 함.
=> 객체의 책임을 결정하는 것은 메시지임.
메시지에 초점을 맞추게 함으로써 객체지향의 장점을 극대화함.
메시지가 '어떻게' 해야 하는지를 지시하지 말고 '무엇'을 해야하는지를 요청하는 것
송신자는 수신자의 내부 상황을 볼 수 없으며, 수신자가 메시지를 처리할 수 있다는 믿음만을 가지고 전송하는 것임.