본문 바로가기

Programming152

자바스크립트에서 함수를 new 연산자를 이용하여 인스턴스 생성 new 키워드를 사용하여 함수를 호출 시 동작 과정.빈 객체 인스턴스가 생성생성자 함수에 빈 객체 인스턴스가 this로 전달생성자 함수는 this 객체에 skulk 라는 프로퍼티를 생성하고 함수를 할당한다결국 새로 생성된 객체는 skulk 프로퍼티를 갖게 된다. 일반적으로 자바와 같은 객체지향 언어를 사용했던 관점에서 보면 new Ninja를 수행하면 Ninja라는 인스턴스가 생성될 것 같은데 빈 객체가 생성된다는 것이 헷갈리는 부분이었다. 빈 객체 안에 생성자를 통해 반환 될 this가 전달되고 이 this에 함수 안에서 일어나는 대입 연산에 대한 부분이 프로퍼티로 생성된다는 점이 특이하고도 혼란스럽게 느껴졌다. 그렇게해서 반환된 이 this가 ninja라는 변수에 대입되어 자바에서의 객체 처럼 사용할.. 2016. 4. 6.
자바스크립트 이벤트 중첩 문제(버블링) 작업을 하던 중 테이블 row에 클릭 이벤트가 걸려 있고, 해당 row 안에 삭제 기능을 하는 버튼이 존재하여 삭제 버튼을 클릭시 버튼 이벤트와 row에 걸려있는 클릭 이벤트가 중첩되어 발생하는 문제가 생겼다. 이는 이벤트의 버블링 때문에 발생하는 문제였는데 이벤트가 중첩된 구조에서 child 엘리먼트의 이벤트 콜백 함수에서 event 객체의 stopPropagation() 함수를 사용해서 버블링을 막아주면 이를 해결할 수 있다. 하지만 button의 onclick attribute에 함수를 호출하도록 설정하여 이벤트를 동작시킬 때 파라미터로 event를 넘길 수 없었다. (넘길 수 있는 방법이 있는데 못찾은 걸지도) 자바스크립트에서 bind나 event 리스너를 사용하면 간단히 해결되었지만 button.. 2016. 4. 5.
자바스크립트에서 함수 선언 시 주의하자 자바스크립트에서의 함수는 표현식을 사용할 수 있는 곳이라면 어디에서든 함수를 만들 수 있다. 이는 자바스크립트의 함수가 1급 객체이기 때문에 가능한 것인데 예를들면 어떤 특정한 기능에서만 동작하는 함수가 있다면 이름을 가진 함수를 선언해서 글로벌 네임스페이스를 어지럽히는 것보다는 사용하는 부분에서만 함수를 선언하여 사용하면 효율적이다. 자바나 C++ 처럼 함수형 프로그래밍을 지원하지 않는 환경에서 개발해온 나로서는 생소한 개념이었다. 이를 이해하려면 자바스크립트의 코드가 프리컴파일 되는 것이 아니라 동적으로 실행되는 점을 이해해야했다. 자바스크립트를 작업하는 동안은 굳이 사용되지 않을 수도 있는 함수를 미리 컴파일하여 리소스 낭비를 하지 말고 최대한 사용하는 시점에 생성하도록 구현한다는 개념으로 접근해야.. 2016. 4. 5.
JSP에서 세션(Session) 이란? 세션이 왜 필요한 것일까? HTTP 프로토콜은 stateless 연결이므로 웹 서버에서는 기본적으로 각 클라이언트를 위해 다음 요청까지 메모리에 데이터를 유지해주지 않는다. (request 인스턴스는 응답과 동시에 메모리에서 제거된다.) 그래서 다음 번에 다시 요청을 해도 요청한 클라이언트가 누구인지 인식하지 못한다. 하지만 쇼핑몰 사이트와 같은 것을 보면 한번 봤던 상품 리스트가 오른편에 출력되고, 새로고침을 하거나 브라우저를 종료했다가 다시 실행해도 리스트가 그대로 보여진다. 로그인을 하지 않아도 장바구니에 상품을 담으면 메모리를 사용하는 것 처럼 다시 확인 할 수가 있다. 이러한 동작은 어떻게 이루어지는 것일까? 데이터베이스 사용을 생각해보자. 상품을 요청하는 클라이언트의 고유 키를 생성하여 해당 .. 2016. 4. 3.