프로젝트를 진행하다 보면, 클래스 생성에 필요한 초기값들이 점점 추가되고 옵션 값들이 많아지면서 생성자 오버로딩이 점점 많아지는 경우를 볼 수 있습니다. 생성자는 method 명으로 기능을 특정지을 수 없기 때문에, 가지고 있는 파라미터의 타입과 갯수만으로 구분해야 합니다. 주석으로 어느정도 가독성을 확보할 수 있지만, 많은 수의 오버로딩을 가진 생성자는 사용도 불편하고 보기에도 영 안 좋습니다. 클래스 생성 시에 다양한 옵션값을 사용해야 할 경우 적용 가능한 패턴이 바로 Builder 패턴 입니다. 객체 생성 시에 필수값만 입력하여 객체를 생성하고, 옵션값들은 필요시에만 설정 가능합니다. 다음과 같은 방식으로 사용 가능합니다.* Main.java public class Main { public stat..
Static factory method의 장단점 Static factory method란 객체의 인스턴스를 생성하는 방법 중에 하나입니다. public 생성자를 private으로 가려 놓고, 생성자로 사용하고자 하는 static method를 public으로 선언하여 해당 method만 이용해서 인스턴스를 생성하도록 하는 방식 입니다. 이런 방식을 사용함으로 인해 얻을 수 있는 이점이 몇 가지 있습니다. 1. 객체 생성에 대한 별도의 의미를 부여해 줄 수 있습니다. 생성자는 class 이름과 동일하기 때문에 특별한 의미를 부여하기 힘듭니다. 클래스의 생성자 시그너처를 여러개 만들어 각 시그너처 별로 기능을 다르게 하고 주석으로 의미를 설명해 줄 순 있지만, 클래스를 사용하는 입장에서 시그너처로 기능이 구..
시간이 날 때 마다 오픈소스를 분석해 볼 생각입니다.뛰어난 개발자들이 작업 한 소스를 훑어 보는 건실력 향상에 굉장히 큰 도움이 된다고 생각합니다. 아직 저 스스로의 역량이 부족하여큰 프로젝트의 소스를 분석하기에는 많은 어려움이 있습니다.그래서 좀 작은 프로젝트 부터 하나씩 해볼 생각입니다. 첫번째로 분석해 볼 오픈소스는 js.cookie 입니다.https://github.com/js-cookie/js-cookie개인 프로젝트 진행 중에 cookie를 다룰 일이 있었는데,아무래도 직접 컨트롤 하는 것 보다는잘 만들어진 오픈소스를 사용해 보는 것이 좋을 것 같아 찾아본 프로젝트 입니다. 사용 방법도 다음과 같이 간단합니다. Cookies.set('name', 'value', { expires: 7 });C..
Spring 사용 시 @Value 어노테이션을 이용해서쉽게 프로퍼티를 읽어 올 수 있습니다. 아래와 같은 방식으로 프로퍼티 파일의 내용을 주입시켜줄 수 있습니다. @Value("${property_name}") private String propertyName; 단, 참고해야 할 사항이 있습니다.@Value 어노테이션 web proejct 안에서 사용 시에는 sevlet context에 다음 내용이 필요합니다. Appliction Context에만 property로딩을 처리해서는Web project의 @Value로 해당 내용을 읽어올 수 없습니다.
Ajax를 이용해서 개발을 하다 보면, 사용자가 실제로 url 이동을 하지 않은 상태에서 주소창의 url을 변경해야 할 경우가 있습니다. html5에 적용된 기술로 아래와 같은 코드로 페이지 이동 없이 주소창 변경이 가능합니다. function changeUrl(title, url, state) { if (typeof (history.pushState) != "undefined") { //브라우저가 지원하는 경우 history.pushState(state, title, url); } else { location.href = url; //브라우저가 지원하지 않는 경우 페이지 이동처리 } } pushState에 넘겨주는 state는 해당 히스토리에 저장하는 object로 history.state; 코드를 통..
Decorator, Adapter, Facade 패턴은 서로 비슷한 점을 가진 디자인 패턴입니다.세 패턴 모두 새로운 클래스로 기존의 클래스를 감싸는 방식이라는 공통점이 있습니다.기존 코드를 감싸는 방식은 상속이 아닌 구성(프로퍼티로 기존의 클래스의 인스턴스를 가지고 있음)을 사용합니다. 서로 비슷한 이 패턴들의 차이점을 정리해 보도록 하겠습니다. - Decorator 패턴기존 클래스를 감싸지만, 인터페이스는 그대로 유지하면서 새로운 기능을 추가하는 방식입니다.http://haloper.tistory.com/11 - Adapter 패턴기존 클래스의 인터페이스를 새로운 인터페이스로 변경할 때 사용합니다.기존의 개발된 클래스를 다른 인터페이스를 사용하는 클라이언트에서 사용 가능하도록중간에서 인터페이스를 변환..
커맨드 패턴의 주요 목적은 작업을 요청하는 쪽과 작업을 처리하는 쪽을 분리하여서로 의존관계가 없도록 하는 것 입니다. (서로 상대방의 존재 여부를 알지도, 알 필요도 없습니다.) 또한, 커맨드 패턴 적용 시 연속된 작업의 이력 관리와 작업 취소 로직을 쉽게 적용할 수 있습니다. 샘플 코드를 작성하기에 앞서 기본적인 용어를 정리하도록 하겠습니다. Invoker : 작업을 요청하는 객체 Receiver : 작업을 처리하는 객체 Command : 작업 클래스들이 구현해야 하는 인터페이스 간단하게 원과 네모를 그리는 로직으로 샘플을 구현해 보겠습니다. x,y 좌표를 가진 원과 네모를 그리거나 지우는 작업을 합니다. 작업 이력을 stack에 넣어 보관하고, 필요시 undo 할 수도 있습니다. 우선 Command ..
싱글턴 패턴은 클래스의 인스턴스 갯수를단 하나만 생성 가능 하도록 제한하는 방법입니다. 중요한 상태값 정보를 가지고 있는 클래스일 경우인스턴스가 여러 개 생성되어다양한 상태값을 갖게 되면프로그램에 큰 문제를 발생 시킬 수 있어싱글턴 클래스 사용이 필요합니다.또는 불필요하게 인스턴스의 수가 많이 생성되어메모리를 쓸데 없이 잡아먹고 있는 것이 싫은 때에도싱글턴 클래스를 사용할 수 있습니다. 싱글턴 패턴의 구현 방법은 다음과 같습니다.기본적으로 default 생성자를 private으로 선언하여new 키워드를 이용한 객체 생성을 막습니다.그리고 public static method인 getInstance를 만들고해당 method만 이용하여 인스턴스를 전달 받도록 합니다.getInstance method 안에서 ..
개인 프로젝트에서 Jenkins를 통해 지속적 통합(CI)를 구현하고자 합니다.그런데, 제가 사용하는 Git Server에 기본적인 속도 제한이 있어서Jenkins에서 소스코드를 다운받는데 timeout이 자꾸 발생하였습니다. 기본적으로 Jenkins는 git 관련 명령어에 timeout을 10분으로 설정하고 있어해당 설정을 변경하는 방법을 공유하고자 합니다. Project > Configuration > Git 설정에서Additional Behaviours의 Advenced checkout behaviours, Advanced clone behaviours 의 timeout 설정 변경이 가능합니다.
이번에 개인 프로젝트를 진행 하면서,평소 업무에서 사용해 보지 못한다양한 기술들을 최대한 적용해 보고자마음 먹고 프로젝트를 진행 중입니다. 요즘 Frontend 개발에 많은 새로운 기술들이도입되고 자리를 잡아가고 있는 것 같습니다.Backend 개발은 어느정도 대세가 자리 잡고 있는 것에 반하여Frontend에는 새롭고 배워야 할 것들이 넘처나고 있었습니다. 현재 개인 프로젝트에서 적용하고자 공부 중인Fonrt-end 개발 환경에 대해 간략하게 정리하고자 합니다. * 의존성 & 빌드 프로세스 관리 도구 : npmNode Package Modules의 약자로node js 개발에 사용되고 있는 패키지 관리 도구 입니다.Javascript계의 메이븐이라고 할 수 있을 것 같습니다.프로젝트 루트의 package..