728x90
반응형

JavaScript String Object 의 메서드 사용방법 예 

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
// charAt() : 해당 하는 인덱스의 케릭터를 반환한다.
console.log('charAt() =======================');
var value = 'SPORTS';
console.log(value.charAt(1));
console.log(value[3]); //  ECMA Script5 이후 부터 사용이 가능하다.
 
// charCodeAt() : 해당 하는 문자열의 인덱스의 유니코드를 반환한다.
console.log('charCodeAt() =======================');
var value = 'abAB',
    len = value.length;
 
for (var k = 0; k < len; k++) {
    console.log(value.charCodeAt(k));
}
console.log(value.charCodeAt(7)); // NaN 이 출력됨.
 
// fromCharCode() : 해당 하는 유니코드의 문자열을 반환한다.
console.log('fromCharCode() =======================');
console.log(String.fromCharCode(65669798)); // fromCharCode()는 메서드가 아닌 함수이다. !!
//var str = new String();
//str.fromCharCode(); 로 사용하지 못한다. 함수는 오브젝트를 모르기때문에 오브젝트.함수명으로 사용한다.
 
// concat() : 문자열을 합칠때 사용함.
console.log('concat() =======================');
var value = 'sports: ';
console.log(value.concat(' soccer :',' 11'));
 
// indexOf() : 문자열에 일치하는 인덱스 반환 존재하지 않으면 -1 를 반환함
console.log('indexOf() =======================');
var str = '가나다가나다';
console.log(str.indexOf('다'));
console.log(str.indexOf('다'), 4);
console.log(str.indexOf('나다'));
console.log(str.indexOf('다'15));
 
// lastIndexOf() : 문자열에 일치하는 마지막 인덱스를 반환한다.
console.log('lastIndexOf() =======================');
var value = '12341234';
console.log(value.lastIndexOf('3'));
console.log(value.lastIndexOf('3',5));
console.log(value.lastIndexOf('34'));
 
// match() : 정규표현식으로 매치되는 결과를 반환한다
console.log('match() =======================');
var value = 'Sports';
console.log(value.match(/s/)); // 소문자 s를 찾음
console.log(value.match('S')); // 대문자 S를 찾음
console.log(value.match(/s/ig)); // ig: ignore global 대소문자를 구분하지 않음. 배열로 반환 s가 2개이니까.
console.log(value.match('spt')); // null 이 반환됨
console.log(/S/.test(value));  // 속도가 더 빠름
 
// replace() : 매치결과를 지정한 값으로 대체 후 반환한다
console.log('replace() =======================');
var value = 'abcabc',
    trimExp = /^\s+|\s+$/g,// 정규표현식을 통하여 trim을 수행한다 ie6~8 ES3에선 trim()이 없음
    base = ' abcd ';
 
console.log(base.replace(/a/g, 'A'));
console.log(value.replace(trimExp, ''));
console.log(base.length);
console.log(value.length);
 
// search() : 검색된 첫번째 인덱스를 반환한다.
console.log('search() =======================');
var value = 'cbacba';
console.log(value.search(/a/g));
console.log(value.search('K'));
 
// substring() : 시작에서 끝 직전까지 인덱스의 문자열 값을 반환한다. 수식으로 나타내면 begin == idx < end
console.log('substring() =======================');
var value = '01234567';
console.log(value.substring(26));
console.log(value.substring(5-1));
console.log(value.substring(-72));
console.log(value.substring(51));
console.log(value.substring());
console.log(value.substring(2));
console.log(value.substring(320));
 
// substr() : 시작위치에서 문자길이만큼의 값을 반환한다. 수식으로 나타내면 begin == idx <= end
console.log('substr() =======================');
var value = '01234567';
console.log(value.substr(03));
console.log(value.substr(3));
console.log(value.substr());
console.log(value.substr(-33));
 
// split() : 구분자로 분리하여 배열로 반환한다.
console.log('split() =======================');
var result,
    value = '_012_345';
 
result = value.split('_');
console.log(result);
console.log(result.length);
 
console.log(value.split('_',2)); // 2번째 인자는 엘리먼트수이다.
console.log(value.split('AA'));
console.log(value.split());
 
// 모두 분리
console.log(value.split(''));
 
// toLowerCase() : 문자를 소문자로 반환한다.
console.log('toLowerCase() =======================');
var value = 'ABCDE';
console.log(value.toLowerCase());
 
// toUpperCase() : 문자를 대문자로 반환한다.
console.log('toUpperCase() =======================');
var value = 'abcde';
console.log(value.toUpperCase());
 
 
cs

[ 출력결과 ]
1. charAt() =======================
2. P
3. R
4. charCodeAt() =======================
5. 97
6. 98
7. 65
8. 66
9. NaN
10. fromCharCode() =======================
11. ABab
12. concat() =======================
13. sports: soccer : 11
14. indexOf() =======================
15. 2
16. 24
17. 1
18. -1
19. lastIndexOf() =======================
20. 6
21. 2
22. 6
23. match() =======================
24. s
25. S
26. S,s
27. null
28. true
29. replace() =======================
30. Abcd
31. abcabc
32. 6
33. 6
34. search() =======================
35. 2
36. -1
37. substring() =======================
38. 2345
39. 01234
40. 01
41. 1234
42. 01234567
43. 234567
44. 34567
45. substr() =======================
46. 012
47. 34567
48. 01234567
49. 567
50. split() =======================
51. ,012,345
52. 3
53. ,012
54. _012_345
55. _012_345
56. _,0,1,2,_,3,4,5
57. toLowerCase() =======================
58. abcde
59. toUpperCase() =======================
60. ABCDE


728x90
반응형
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
반응형

+ Recent posts