728x90
반응형

JavaScript의 내부 프로퍼티와 외부 프로퍼티의 차이

 그리고 캡슐화

아래는 ECMA Script5 스펙에 정의되어있는 Internal Properties(내부 프로퍼티) 이다. 


내부 프로퍼티는 앞뒤로 [[프로퍼티명]] 으로 되어있으며 개발자가 직접적으로 해당 프로퍼티의 속성을 접근할 수가 없다. 

이에반해 외부 프로퍼티는 개발자가 직접 접근이 가능한 속성이다. 

객체지향적인 개념으로 볼때 내부 프로퍼티는 블랙박스(외부에 자신의 모습을 보여주지않는) 라고 할 수 있다. 

자바에서는 블랙박스를 private 접근제어자를 통해 구현하지만 JavaScript에서는 접근제어자가 따로 있지 않다.

하지만 제어자가 없을뿐이지 코드를 캡슐화 할수 없다는 뜻은아니다.

아래와 같이 객체안에서 var 로 선언한 property 나 method는 내부에서만 사용이 가능하다. 이것이 자바스크립트의

캡슐화라 볼수 있을것이다. 

[ 캡슐화 코드 ]

1
2
3
4
5
6
   blackBox=function(){
          var i=30;
          var ii=function(){
                return a;
          }
     }


 


728x90
반응형
728x90
반응형

JavaScript의 Object 인스턴스 사용방법과 이해

JavaScript 는 기본적으로 OOP(Object Oriented Programming) 의 특징을 가지고 있기 때문에 여타 OOP언어에서 Object 를 사용하기 위해

인스턴스를 생성하는 것과 마찬가지로 new 키워드를 통해서 Object 를 생성할 수 있다. 

그러나 JavaScript 는 Built-In이라는 개념이 있기때문에 궂이 new 키워드를 통해서 인스턴스를 생성하지 않아도 해당 Object를 호출할 수 있다. 

Built-In Object에서만 인스턴스없이 호출이 가능하다는것을 기억하자 !!

1. new 키워드를 통한 Object 인스턴스 화 이후에 concat() 을 호출

Colored By Color Scripter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 *   기본 적인 객체지향 프로그램은 new 키워드를 이용한 인스턴스를 생성한 후에
 *   해당 오브젝트의 메서드를 찾아간다.
 *   자바스크립트에는 빌트인 개념이 있기때문에 new 로 인스턴스를 생성하지 않아도된다.
 *   불필요 행사코드가 많아짐 비추..
 *
 * */
var obj, result;
 
obj = new String();
result = obj.concat('sports''soccer', 11);
 
console.log(result);
 
obj = new Array();
result = obj.concat(['sports','soccer',11]);
 
for(var i = 0; i < result.length; i++) {
    console.log(result[i]);
}
 



2. new 를 사용하지 않고 Object 의 concat() 을 바로사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 *  JavaScript 에서는 객체지향언어에서의 기본 규칙인
 *  인스턴스를 생성하지 않고도 해당 오브젝트의 메서드를
 *  호출할 수 있다.
 *  이렇게 간단하게 호출할 수 있게 하여 행사코드를
 *  언어적인 측면에서 없애주고 코드의 유연성을 올려준다.
 *  이는 빌트인 오브젝트 덕분이다!!!
 * */
var obj, result;
 
result = 'sports'.concat('soccer', 11);
console.log(result);
console.log(typeof result);
 
 
result = ['sports','soccer'].concat(11);
 
console.log(result);
console.log(Array.isArray(result));
 




728x90
반응형
728x90
반응형

Quartz 라이브러리 연동을 통한 스케쥴러 구현

Apache Camel 프로젝트의 하위 프로젝트인 Quartz 이용하면 Unix 나 Linux 에서 사용하는 crontab 과 같은 스케쥴러를 손쉽게 구현하고 제어 할 수 있다. 

Quartz 는 기본적으로 log4j 를 사용하여 로그를 출력하기때문에 Quartz 사용시 log4j 라이브러리를 먼저 연동해줘야 정상적으로 사용이 가능하다 .

이번에 나름 독자적인 배치 모듈을 개발하다 보니 Quartz 를 상당히 유용하게 사용하였다. 

참조 라이브러리



1. JobScheduler 클래스를 구현 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
 
 /**
 * Quartz 를 사용한 CronScheduler 구현
 * 
 * @author digimon1740
 * */
public class JobScheduler {
 
    String cronExp;                    
    Class<extends Job> clazz;
    
    public JobScheduler(Class<extends Job> clazz, String cronExp) {
        this.clazz = clazz;
        this.cronExp = cronExp;
    }
 
    public void triggerJob() {
        
        Scheduler sch = null;
        SchedulerFactory schFactory = null;
        
        // schedule the job
        //    this.clazz 는 기본적으로 JobExecuter 클래스이다.
        JobDetail job = JobBuilder.newJob(this.clazz)
                .withIdentity(this.clazz.getName()).build();
 
        // batch.properties 에서 크론 표현식을 가져와 Trigger를 생성
        CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                .withIdentity("crontrigger""crontriggergroup1")
                .withSchedule(CronScheduleBuilder.cronSchedule(this.cronExp))
                .build();
 
        try {
            schFactory = new service.StdSchedulerFactory();
            sch = schFactory.getScheduler();
            sch.start();    //    JobExecuter.class Start
            sch.scheduleJob(job, cronTrigger);
        } catch (SchedulerException e) {
        }
        
    }
 
     public static void main(String[] args) {
         // 매일 오전 2시에 수행
        JobScheduler js = new JobScheduler(JobExecuter.class"0 0 2 * * ?");
         js.triggerJob();
     }
 
}
 
 
cs


2.Job 인터페이스를 구현하여 execute() 메서드에 스케쥴링에 수행되는 코드를 작성한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
 
/**
 *         Job 인터페이스의 execute() 를 구현함으로써 
 *         Quartz 의 스케쥴링을 이용할 수있다.
 * 
 *         @author digimon1740 
 * */
public class JobExecuter implements Job {
 
    @Override
    public void execute(JobExecutionContext jec) throws JobExecutionException {
        // / 스케쥴러에 의해 실행될 Job
        System.out.println("스케쥴러 수행중..");
    }
 
}
cs


728x90
반응형
728x90
반응형

JavaScript 의 Built-In 의 간단한 설명

Built-in(빌트인) : 자바스크립트 랜더링엔진에서 이미 포함하고 있는 Object  를 말한다.

- 구분 : 데이터 타입, 오브젝트,연산자

1) 빌트인 연산자 ( ++,--,+,-,*,/,% )

2) 빌트인 데이터 타입 ( Undefined, Nulll, Boolean ,Object ,Number, String )

3) 빌트인 오브젝트 ( Global,Object, Function, Array,String,Boolean,Number,Math,Date,RegExp,JSON,Eval,Error...... )


728x90
반응형

+ Recent posts