본문 바로가기

Programming

(208)
자바스크립트 디자인 패턴 #1. Module 패턴 모듈패턴서버개발을 하거나 라이브러리, API등을 개발할 때 유용하게 사용할 수 있다.파일 단위로 관리할 수 있도록 자바스크립트를 모듈화해주고, 단위테스트를 모듈 단위로 실행할 수 있도록 하여 시험 계획에도 도움이 된다.글로벌 변수나 함수들을 최소화함으로써 다른 자바스크립트 라이브러리나 소스를 가져다 쓸 때 충돌이 일어날 확률을 최소화한다.또 모듈단위로 소스를 갭라하면 각 모듈 간의 의존성을 최소화하거나 의존성을 파악하기 쉽다.장기적이고 규모가 큰 자바스크립트 프로젝트를 관리하기가 좋다.자바스크립트 라이브러리나 API 등을 개발하여 다른 개발자들에게 제공할 때, 이를 활용하는 개발자들이 모듈단위로 함수나 변수들의 활용도를 예측할 수 있는 네임스페이스로도 활용 할수 있다. (function(window) {..
자바스크립트 상속(Object.create) 자바스크립트에서의 상속 기존의 상속 구현방법function Person() { this.name = "anonymous"; this.job = "none"; this.sayHello = function() { alert("Hello, my name is " + this.name); };} function Unikys() { var obj = new Person(); obj.name = "Unikys"; obj.job = "Programmer"; return obj;}var me = new Unikys();me.sayHello(); //Hello, my name is Unikys console.log(unikys instanceof Unikys); //falseconsole.log(unikys instan..
자바스크립트의 프로토타입 자바스크립트는 객체지향 개념을 지원하기 위해 프로토타입을 사용한다. 프로토타입prototype의 사전적 의미 '원형'자바스크립트에 투영해서 무엇의 원형을 나타내는지 생각하면된다.자바에서 객체를 class로 정의하지만자바스크립트에서는 function으로 정의한다. function Person(name, age);this.name = name;this.age = age;} var tomas = new Person("tomas", 15);alert(tomas.name); this 함수호출하는 방법1. 일반 함수로의 호출2. 멤버 함수로의 호출3. call() 함수를 이용한 호출4. apply() 함수를 이용한 호출 1)function say(something){alert(something);}say("Hell..
자바스크립트의 변수 자바스크립트의 기본형 typeof number(숫자)string(문자열)boolean(이진 값)undefinednullsymbol 자바스크립트느 기본형 변수들과 Object를 기초로하는 객체들로 구성된다.특정 변수가 어떤 형태 인지 확인하는 연산자로 typeof가 있다. undefined - 정의되지 않는 값 또는 해당 값을 가진 변수boolean - ture/false 값 또는 해당 값을 가진 변수number - 숫자 값 또는 해당 값을 가진 변수string - 문자열 값 또는 해당 값을 가진 변수object - 객체 또는 객체를 저장하는 변수function - 함수 또는 함수를 저장하는 변수symbol - Symbol() 함수로 생성한 키 변수형에 따른 분기 처리var myVariable = func..
자바스크립트 스코프와 클로저 스코프스코프란? 현재 접근할 수 있는 변수들의 범위를 뜻한다. 어떤 변수가 스코프 안에서 선언되었으면 해당 스코프 안에서 변수를 접근해서 읽거나 쓸 수 있다.스코프 밖에서는 해당 변수에 접근할 수 없다. 스코프의 생성자바스크립트의 스코프는 특정 구문이 실행 될때 새로 생성하여 스코프 체인을 생성하게 된다.스코프를 생성하는 구문functionwithcatch 스코프의 지속성새로운 스코프가 생성되고 스코프 체인을 참조하는 함수를 변수에도 넣을 수 있다.다른 함수의 인자로 넘겨줄수도 있다.함수의 반환값으로 활용할수도 있다. 즉, 함수가 선언된 곳이 아닌 전혀 다른 곳에서 함수가 호출될 수 있어서 해당 함수가 현재 참조하는 스코프를 지속할 필요가 있는 것이다. function () {} 함수리터럴이라고 한다. ..
리포지터리와 모델구현(JPA 중심) 리포지터리와 모델구현(JPA 중심) 애그리거트를 어떤 저장소에 저장하느냐에 따라 리포지터리를 구현하는 방법이 다르기 때문에 모든 구현 기술을 대해 알아볼 수는 없다.도메인 모델과 리포지터리를 구현할 때 선호하는 기술을 꼽자면 JPA를 들 수 있다.데이터 보관소로 RDBMS를 사용할 때 객체 기반의 도메인 모델과 관계형 데이터 모델 간의 매핑을 처리하는 기술로 ORM 만한 것이 없다.다양한 ORM기술이 존재하지만, 자바의 ORM 표준인 JPA를 이용해서 리포지터리와 애그리거트를 구현하는 방법을 살펴보자 모듈위치리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고, 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다. domain InfraModel ------> ModelRepository ..
트랜잭션 범위 트랜잭션 범위트랜잭션의 범위는 작을수록 좋다.DB 테이블 기준으로 한 트랜잭션이 한 개의 데이터베이스를 수정하는 것과 세 개의 테이블을 수정하는 것은 성능에서 차이가 발생한다. 한 트랜잭션에는 한 개의 애그리거트만 수정해야한다.애그리거트에서 다른 애그리거트를 변경하지 않는다는 뜻예) 배송지 정보를 변경하면서 동시에 배송지 정보를 회원의 주소로 설정하는 기능 public class Order {private Orderer orderer; public void shipTo(ShippingInfo newShippingInfo, boolean useNewShippingAddrAsMemberAddr) {verifyNotYetShipped();setShippingInfo(newShippingInfo);if(useN..
Aggregate 애그리거트 Aggregate 애그리거트 애그리거트 루트-총 금액인 totalAmounts를 갖고 있는 Order 엔티티-개별 구매 상품의 개수인 quantity와 금액인 price를 갖고 있는 OrderLine 밸류 구매할 상품의 개수를 변경하려면 한 OrderLine의 qunantity를 변경하고 totalAmount도 변경해야된다. 애그리거트는 여러 객체로 구성되기 때문에 한 객체만 상태가 정상이어서는 안된다.도메인 규칙을 지키려면 애그리거트에 속한 모든 객체가 정상 상태를 가져야한다.주문 애그리거트의 경우 OrderLine을 변경하면 Order의 totalAmounts도 다시 계산해서 총 금액이 맞아야한다. 애그리거트에 속한 모든 객체가 일관된 상태를 유지하려면 애그리거트 전체를 관리 할 주체가 필요한데, 이..