Test Driven Development 의 약자로 테스트 주도 개발이라는 뜻이다.기존에는 폭포수방식이라고해서 설계가 진행되면 구현, 구현 후 테스트, 테스트 후 인수 이런 방식으로 일단 설계한대로 모든 개발이 끝나고나면 테스트를 진행하는 방식이었는데 이런식으로 하다보니 에러가 발생했을때 해당 에러를 찾고, 수정하는데 있어 소모되는 시간과 비용이 너무 커져 이를 바꿔보고자하고 나온것이다. 개발이 완료되면 테스트를 하는것이 아니라 구현의 가장 아랫부분인 메서드 구현단계부터 지속적인 테스트를 통해 개발을 함으로서 지속적인 테스트를 하게되고 문제점을 보다 빨리 찾아내어 적은 비용으로 에러를 처리하고 완성도높은 소프트웨어를 개발하고자 하는것이다. '주도'라는 단어에 좀 더 집중을 해야하는데 메서드를 구현한 후..
업무시간내에 짬짬이 5분씩 내면서 개인맥북에 nodejs 설치하고 grunt 다운받고 bower 다운받았다. 이번주부터 angularjs 스터디를 시작하면서 기본세팅을 하고있는데... 제목은 거창하게 지었는데 짬짬이 하다가 하루종일 헤메는 일이 발생해 일단 블로그에 적어놓는다. nodejs grunt는 이상없이 잘 진행되는데 bower install angular 에서 갑자기 에러가 발생했다. sudo bower install angular 로 해도 뭐 이상한 뜬금없이 throw 코드부분을 보여주고... 대충 영어로된 에러문을 어렵게 봐보는데 --allow-root 옵션을 넣으라고하는거같다.중간중간 여기저기 옵션을 넣는데 해결이 안된다. 몇시간동안 삽질하다가 젤 뒤에 넣어야한단다ㅡㅡsudo bower i..
TDD라는 개발론이 있다. Test Driven Development 의 줄임말인데 우리말로는 테스트 주도 개발 이라고 한다.절차를 밟아가며 차례차례 진행 후 제품을 모두 개발한 후에 테스트를 진행하는 기존 폭포수방식에서 벗어나 모듈, 함수별로 즉각즉각 테스트를 진행하며 개발을 하자는 것이다.뼈대를 다 만든후 테스트를 진행하는 기존 폭포수 모델의 경우 에러 혹은 의도치 않은 값이 나올경우 디버깅을 하는것도 힘들뿐더러 비용도 많이 소모된다. 하지만 함수, 메서드 하나를 만드는 와중에도 테스트를 진행하기때문에 에러를 보다 빨리 발견할수있고 수정에 소모되는 비용도 줄어든다. 또한 그만큼 제품의 완성도도 올라가게된다. TDD에서 직접적으로 제안하는건 일단 실패코드를 작성하는 것이다. 최종적으로 원하는 함수를 먼..
이런저런사이트에서 이제막 자바를 배우기 시작한 분들이 많이 하는 실수중 하나가 문자열 비교이다. String 변수와 리터럴 문자열을 비교하는데 동일한 값인데 false가 떨어진다는 것이다. 이런 질문에 대한 답변은 주로 '문자열은 eqlaus()로 비교하세요.' 라는 답변이 주로 달리는데 이러다보니 equals()가 문자열 비교를 위해 존재하는 메서드인줄 아는 분들이 있는것같아 이번 포스팅을 작성하게 됐다. 일단 String 클래스의 특수성부터 확인해보자. 문자열은 무조건 equals()로 비교하라고 하지만 ==연산자가 항상 false를 반환하진 않는다. String str1 = "str"; System.out.println(str == "str"); String str2 = new String("str..
자바스크립트의 함수는 자바의 메서드와 다르게 오버로딩이 되지 않는다. 오버로딩이란 동일한 메서드명에 매개변수의 타입이나 개수만 바꿔 동일 명칭의 메서드를 여러개 정의하는것을 말한다. 그런데 이걸 잘 모르는 자바개발자들이 함수를 짤때 함수의 인자 개수를 근거로 오버로딩을 구현한걸 심심찮게 실무에서 접할 수 있다(나도 본적이 있다.). 아마 테스트를 안했거나 대충 한두번 돌려봤는데 에러가 없으니 성공적으로 오버로딩이 됐다고 생각하고 넘어갔으리라. 사실 여태 포스팅한걸 근거로 생각했을때 자바스크립트에서 함수 오버로딩이 지원되지않는다는건 쉽게 추적할 수 있다. 1. 함수는 변수로 취급된다. -동일한 명칭의 변수가 여러개로 선언될 수는 없으니 당연히 오버로딩은 안된다. 2. 모든 변수는 전역 객체(window)의..
메서드를 호출할때 호출 하는 메서드가 인자를 필요로 하는경우 () 안에 인자를 넣어 호출한다. 이때 메서드에서 파라미터를 받아 사용할때 호출하는 방법이 2가지가 있는데 그것이 call by value, call by reference 이다. 우리말로하면 값호출, 참조호출 정도가 될것이다. 호출방법을 프로그래머가 지정할 수는 없다. 동일한 인자를 여기선 값으로, 저기선 참조로 호출할수는 없다는 얘기다. 기본적으로 자바는 8가지의 기본형 데이터에 대해선 call by value로 호출하며 그 외에 사용자지정타입. 즉 객체에 대해서만 call by reference로 호출하게된다. 두가지의 차이점은 소스로 확인해보자 class TestClass{ int num1; int num2; public TestClas..
preference => appearence 에서 글꼴 변경하면 된다.변경후 재시작.
Impersonator 자신의 정체를 속여서 요청을 보내는 기법 Upgrader 자신의 등급을 속이는 기법 Eavesdropper 요청을 중간에 훔쳐보는 기법 서블릿보안 4요소 인증(Authentication) 인가(Authorization) 비밀보장(Confidentiality) 데이터무결성(Data Integrity) 인증과 인가가 좀 알쏭달쏭한데 인증은 일단 로그인 자체라고 생각하고 인가는 로그인 후 사용자의 등급이라고 생각하면 될듯하다. 아이디와 패스워드를 입력후 로그인하는것은 인증. 로그인 후 관리자, 특별회원, 우수회원, 일반회원의 등급을 정하는것은 인가. 인증 인증은 4가지 방식을 지원하는데 BASIC, DIGEST, CLIENT-CERT, FORM 방식이 있다. BASIC HTTP 표준 D..
프로젝트를 진행하는 와중에 팝업창에서 배열을 반환하고 부모창에서 그 배열을 가지고 값을 세팅하는 화면이 있었는데 기존 소스가 완성되어있는 상태에서 부모창에서 무조건 문자열만 반환이 가능한 상황이 생겼다.기존 소스를 최대한 건드리지 않는 상태로 진행을 해야 서로가 좋은 상황이었기에 배열을 문자열로 변환하고 다시 그 문자열을 배열로 변환하는 함수를 만들어봤다.그리 어려울건 없는 함수몇줄이지만 뭐랄까 처음으로 TDD에 입각한 방법으로 함수를 만들었고, 당장 프로젝트에서는 2차원배열이 끝이지만 기왕 만드는 김에 다차원 배열을 처리하기위해 개인적으로 어렵게 생각하는 재귀적 요소를 사용한게 내심 뿌듯해 블로그에 올리게됐다. 나중에 언제 다시 쓰게될지 모르니 사용방법을 미래의 나에게 전달하자면 첫번째 인자는 배열을,..
앞선 포스팅에서 프로토타입을 살짝 맛봤다. 함수를 정의하게되면 개발자의 의지와는 상관없이 프로토타입이라는 객체가 생성되게되고, 함수를 그냥 메서드 사용하듯 호출할때는 크게 신경쓸필요없지만 생성자로 사용하게될경우엔 해당 함수를 생성자로 생성된 객체가 해당함수의 프로토타입을 바라본다는것까지 포스팅을 했다. 그리고 동일한 생성자로 생성된 각각의 다른 인스턴스들이 모두 한 프로토타입 객체를 바라보기때문에 인스턴스들이 공유하는 자원은 생성자의 프로토타입 객체에 정의하게되면 자바의 static 변수와같이 메모리를 절약할수있다는것까지 알게되었다. 그럼 여기서 본질적인 궁금증을 가져보자. 인스턴스들은 어떤식으로 자신의 생성자의 프로토타입 객체를 바라보게되는것일까? function Undead(){ this.name =..
- Total
- Today
- Yesterday
- mariadb
- java
- Kotlin
- Design Pattern
- backend개발환경
- db
- generics
- programming
- JPA
- code
- OOP
- servlet
- frontcode
- Git
- 정규표현식
- DesignPattern
- http
- clean code
- Spring
- java8
- spring cloud
- toby
- TEST
- frontend개발환경
- EffectiveJava
- javascript
- go-core
- Jackson
- MySQL
- JavaScript Core
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |