프로젝트를 진행하는 와중에 팝업창에서 배열을 반환하고 부모창에서 그 배열을 가지고 값을 세팅하는 화면이 있었는데 기존 소스가 완성되어있는 상태에서 부모창에서 무조건 문자열만 반환이 가능한 상황이 생겼다.기존 소스를 최대한 건드리지 않는 상태로 진행을 해야 서로가 좋은 상황이었기에 배열을 문자열로 변환하고 다시 그 문자열을 배열로 변환하는 함수를 만들어봤다.그리 어려울건 없는 함수몇줄이지만 뭐랄까 처음으로 TDD에 입각한 방법으로 함수를 만들었고, 당장 프로젝트에서는 2차원배열이 끝이지만 기왕 만드는 김에 다차원 배열을 처리하기위해 개인적으로 어렵게 생각하는 재귀적 요소를 사용한게 내심 뿌듯해 블로그에 올리게됐다. 나중에 언제 다시 쓰게될지 모르니 사용방법을 미래의 나에게 전달하자면 첫번째 인자는 배열을,..
앞선 포스팅에서 프로토타입을 살짝 맛봤다. 함수를 정의하게되면 개발자의 의지와는 상관없이 프로토타입이라는 객체가 생성되게되고, 함수를 그냥 메서드 사용하듯 호출할때는 크게 신경쓸필요없지만 생성자로 사용하게될경우엔 해당 함수를 생성자로 생성된 객체가 해당함수의 프로토타입을 바라본다는것까지 포스팅을 했다. 그리고 동일한 생성자로 생성된 각각의 다른 인스턴스들이 모두 한 프로토타입 객체를 바라보기때문에 인스턴스들이 공유하는 자원은 생성자의 프로토타입 객체에 정의하게되면 자바의 static 변수와같이 메모리를 절약할수있다는것까지 알게되었다. 그럼 여기서 본질적인 궁금증을 가져보자. 인스턴스들은 어떤식으로 자신의 생성자의 프로토타입 객체를 바라보게되는것일까? function Undead(){ this.name =..
1.ServletContextListener -애플리케이션이 배포, 종료되는 순간 이벤트 발생 Spring을 사용하다보면 web.xml에 org.springframework.web.context.ContextLoaderListener 라고 작성된걸 많이들 봤을것이다. 저기에 명시된 ContextLoaderListener가 ServletContextListener를 확장한(구현한) 클래스이며 애플리케이션이 배포되는 순간 Spring Bean들을 생성하는것이다. 2. ServletContextAttributeListener -서블릿 컨텍스트에 속성을 추가, 수정, 삭제하는 순간 이벤트 발생 3. HttpSessionListener -세션이 생성, 소멸하는 순간 이벤트 발생 4. ServletRequestLi..
java script의 단위테스트 라이브러리인 qunit 활용법 test("테스트 설명", function(){ equal(실제값, 기대값, "테스트 설명"); //실제값과 기대값이 동일하면 성공 == 연산자로 비교하기때문에 형변환을 감안해야함. notEqual(); //실제값과 기대값이 다르면 성공 != 연산자로 비교함. strictEqual(); //=== 연산자로 비교. (1, "1", "테스트!"); 일시 테스트는 실패한다. notStricEqual(); //!== 연산자로 비교. ok(boolean, "테스트 설명"); //첫번째 인자가 true 면 성공. deepEqual();/* 참조타입을 값으로 비교하게됨. 예를들어 var obj = { age : 27 }; equal(obj, { age ..
jQuery에서 제공하는 required는 html 태그들의 name속성으로 해당 validate를 체크하는것 같다. 그래서 해당 form 태그안에 name속성이 없는 태그가 있으면 has no name assigned 라는 에러가 떨어진다.그럴때 validate 함수에 전달하는 객체에 ignore : '*:not([name])' 속성을 넣어주면 에러가 발생안함.그런데 이건 매 화면마다 추가해줘야하고 공통적인 부분에서 처리해주는게 있는거같은데 그건 좀 더 찾아봐야겠다. $("#frm_main").validate({ignore : '*:not([name])',rules : {user_name : {required : true}} });
이클립스에서(굳이 IDE툴이 아니라도) 톰캣(더 정확히는 WAS)을 실행시키면 여러 서버설정 xml파일들이 읽힘. 이것저것 파일들이 있겠지만 사실 개발자에게 가장 중요한 web.xml도 이때 와스가 읽게됨. WAS가 구동되면서 프로젝트에 존재하는 서블릿들도 JVM에 로딩됨. *클래스가 로딩되는거지 서블릿 객체생성은 아님. *WAS에 따라서 이때 서블릿 객체를 생성하는 경우도있고 로딩만 해놓고있다가 첫 요청이 들어오면 그때 생성하는 경우도있음 WAS가 구동되면서 ServletContext 객체를 생성함. ServletContext 객체는 모든 서블릿이 공유하는 객체임. web.xml에 해당 context 객체에 저장할 파라미터를 정의할 수 있는데 web.xml에서는 기본형변수밖에 정의할 수 없음. 물론 굳..
자바스크립트는 크게 함수와 객체로 구성되어있다고 보면 된다. 사실 그게 전부다. 그런데 함수와 객체로 완벽히 나뉘어져 있는게 아니고 또 함수는 객체고 객체는 함수다. 이때부터 머리가 좀 복잡해진다. 일단 함수부터 보자. 우리가 아무런 생각없이 함수를 정의하게되면 함수의 메모리 모델링은 이런식으로 이루어진다. 코드실행영역, 지역변수영역, 함수객체영역, 프로토타입영역 일단 여기에 나오는 이 용어들은 공식적인건 아니고 그냥 내가 갖다쓰는것이므로 이 용어들까지 알필요는 없다. 코드실행영역과 지역변수영역은 여태 우리가 생각없이 쓰던 그대로 이해하면 된다. 코드실행영역은 변수 선언이 아닌 일반적 코드가 실행되는 부분이고 지역변수영역은 말그대로 지역변수들이 저장되는 영역이다. 그럼 함수객체영역은? 일단 함수객체라는 ..
자바스크립트로 코딩을 한다거나 자바스크립트를 공부하는 사람들이라면 누구나 한번쯤 원인모를 에러(사실 지극히 정상인데 본인이 그렇게 느끼게 됨)에 몇시간씩 낭비하는 경험이 있을것이다. 바로 자바스크립트의 클로저(closure)때문이다. 처음 클로저라는 단어를 들으면 아마 closure 보다는 closer를 먼저 떠올리지 않을까 한다. 하지만 closer 가 아니라 closure이기때문에 굳이 제목에서부터 영어를 사용하게됐다(은근히 뜻이 비슷해서 서로 다른 단어를 연상하면서도 말이 통하는 경우가있는건 함정). 클로저에 대한 정의는 그 영단어의 뜻을 알아보는것이 가장 빠르다. 가까운 포털을 이용해보자. 클로저라는 단어에 대한 뜻을 살펴보자 '폐쇄' 이다. 그럼 무엇이 폐쇄됐다는 걸까? 잠시 함수에 대해 생각해..
한동안 공부할것도 많고 회사일도 바빠져서 자바스크립트 포스팅을 못했다. 오랜만에 하려니 순서도 기억이 안나고 어디까지했는지도 잘 모르겠어서 클로저에 대한 포스팅을 하고자 쭉쭉 글을 써내려가고있었는데 생각해보니 변수스코프에 대한 얘기를 한적이 없다는걸 깨달았다. 변수스코프는 사실 어떻게보면 굉장히 당연한거고 어렵지않은 개념이지만 클로저를 이해하기위해서는 필수적으로 이해를 해야하는 부분이고, 간단한 소스에서는 이걸 뭘 따로 이해까지해야하나 라고 생각할 수도있지만 앞서말한 클로저 등을 접하게됐을땐 꽤나 복잡해진다. 다음의 소스를 보자. var global = "hello"; function getGlobal1(){ return global; } function getGlobal2(global){ return ..
1. SRP - 단일책임원칙클래스나 메서드는 하나의 역할만을 하며 한가지 책임만을 진다.A 클래스가 존재하고 해당 A클래스는 B 클래스와 C 클래스에서 사용된다. 예)class B{ main(){ A a = new A(); a.getName(); }} class C{ main(){ A a = new A(); a.getId(); }} A 클래스는 B와 C에서 사용되지만 각각 다른 메서드를 호출하며 '다른 역할'을 하고있다.이경우 A클래스는 B에서 사용되는 역할때문에 수정될 수도 있고 C에서 사용되는 역할때문에 수정될 수도 있다.이런경우에는 A클래스를 나눠 한가지 역할만을 행하게 해야한다.메서드도 소스를 보다보면 if문같은 분기문으로 나뉘어서 완전히 다른 로직으로 진행되는 경우를 흔히 볼 수 있다.이런 경우..
- Total
- Today
- Yesterday
- javascript
- 정규표현식
- generics
- java8
- clean code
- go-core
- code
- java
- Design Pattern
- http
- Kotlin
- toby
- Git
- spring cloud
- db
- OOP
- JPA
- servlet
- frontcode
- backend개발환경
- TEST
- Spring
- programming
- frontend개발환경
- EffectiveJava
- Jackson
- JavaScript Core
- DesignPattern
- MySQL
- mariadb
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |