데이터베이스
어제에 이어 단일행함수로 시작하였다.
SQL에서는 카운트를 1부터 하기에 함수가 결과를 찾지 못하면 0을 반환한다.
INSTR함수는 그 인자가 INSTR('대상문자열', '검색할문자', 검색시작인덱스, N번째) 와 같이 최대 네개까지 올 수 있어 헷갈릴수도 있지만 막상 사용해보면 매우 직관적이니 예제를 최대한 많이 해볼 것을 권한다.
LPAD, RPAD함수는 문자열이 일정한 크기가 될수 있게 왼쪽 또는 오른쪽에 지정한 문자를 삽입하는 함수이다.
HTML에서 패딩과 비슷하고 자바에서 우리가 포매터로 사용했던 convert메서드가 이와 비슷한 메커니즘이다.
LTRIM과 RTRIM은 문자열에서 특정 문자를 삭제하는 함수이다. L은 왼쪽부터, R은 오른쪽의 맨 끝이 지정된 문자와 일치할 경우 지정된 문자를 삭제한다.
숫자 함수의 경우 엑셀에서 사용되는 함수와 매우 비슷하다.
ROUND : 반올림 : ROUND(123.17, 1) = 123.1
TRUNC : 버림 : TRUNC(123.17, 1) = 123.1
MOD : 나머지 : MOD(12, 10) = 2
CEIL : 올림 : CEIL(123.17) = 124
FLOOR : 버림 : FLOOR(123.17) = 123
주의할 점은 FLOOR와 CEILD은 정수만 반환된다.
날짜함수는 DB에서의 날짜 계산이 왜 쉬운지에 대한 근거가 된다.
SYSDATE : 현재 날짜
MONTHS_BETWEEN : 날짜와 날짜 사이의 개월 계산
ADD_MONTHS : 날짜에 개월을 더한 날짜 계산
-->> 월에 대한 계산 함수만 따로 있는 이유는 매달 날짜가 일정하지 않기 때문이다.
NEXT_DAY : 날짜 후의 첫 요일의 날짜를 계산 : NEXT_DAY(SYSDATE, 1) : 오늘 이후의 첫 일요일을 반환한다.
LAST_DAY : 월의 마지막 날짜를 계산
ROUND와 TRUNC함수도 사용되는데 여기서 기준은 따로 정해주지 않으면 날짜가 기준이 된다.
날짜출력 형식
대문자 Y가 연도를, M이 월을, D는 일을 뜻한다.
이 개수에 따라서 자리수가 달라진다.
YYYY일 경우 2022년이 출력되고 YY일 경우 22년이 출력된다.
다만 월과 일의 경우 조금 의미가 달라지는데,
MONTH : 알파벳으로 월 표현
MON : 알파벳 월의 약자 표현
Q : 월을 분기로 표현 (생각보다 자주 쓰인다)
WW : 연을 주단위로 표현
W : 월을 주단위로 표현
DDD : 연중 일로 표현
DD : 월중 일로 표현
D : 주중 일로 표현 >> 요일
나머지 표현방법들은 그 사용 빈도가 매우 낮기 때문에 사용시에 알아보고 사용해도 무방하다.
포매터에서 문자열로 출력하고싶다면 ""로 감싸주면 된다.
위의 예제에서 ""로 감싸진 YYYY는 문자 그대로 출력될 것이다.
예제를 풀기만 한다면 SELECT문에서 맨 마지막의 것만 필요하겠지만 우리의 목적은 익숙해지는 것이므로 위의 예제에서 필자가 한 것처럼 한단계씩 진행하며 대조군을 만들어 경과를 확인해봐야한다.
맨 마지막 과정은 하지 않아도 결과는 같지만 마지막 형변환 까지 해주는것이 제대로된 문법임을 기억하자.
NVL함수같은 경우는 값이 NULL인가의 여부에 따른 결과를 제어하는 함수이다.
COALESCE함수는 중복적인 NVL의 연속일 뿐 그 사용빈도 및 중요도는 매우 낮다.
DECODE
오늘 한 것들 중 제일 중요하고 어려운 함수이다. 일치여부만을 따져서 결과값을 달리하는 일종의 조건문이라 생각하면 편하다.
DECODE( 칼럼 혹은 표현식, S1, R1, S2, R2, R3)
위의 경우 칼럼 혹은 표현식이 S1과 같을 경우 R1이, S2와 같을 경우 R2가, 이도저도 아닌 경우 R3이 출력된다.
이는 자바에서의 switch case문과 거의 같다.
위의 예제에서 DECODE의 표현식을 어떻게 제어하느냐에 따라 원하는대로 조건을 달리할 수 있다.
계절은 12개월인 1년에 4개가 존재하므로 기본적으로 /3을 이용할 생각을 먼저 해야한다.
이는 분기의 개념과도 일치하므로 분기를 이용한 방법으로도 충분히 구할 수 있다.
모든 예제에는 왕도가 없다. 답이 하나만 있는것도 없다.
많은 연습을 통해 이런 저런 방법이 있고 어떤 방법이 제일 효율적인지에 대한 고민이 개발자로의 성장을 부추길것이다.
자바스크립트
14장 전역변수의 문제점
변수는 생명주기를 가지고 있어 생병주기가 끝나면 소멸해 메모리공간을 반납한다.
보통의 경우 변수는 자신이 선언된 위치에서 생성되고 소멸한다.
하지만 함수 몸체 내부에서 선언된 지역변수의 생명주기는 함수의 생명주기와 대부분 일치하지만 지역변수가 함수보다 오래 생존하는 경우도 있다. >>> 클로저
클로저에 관해서는 24장에 보다 자세히 설명되어있으니 후에 하기로 한다.
자바스크립트의 가장 큰 문제점 중 하나는 파일이 분리되어 있다 해도 하나의 전역스코프를 공유한다는 것이다.
이는 전역변수를 최소한으로 사용해야하는 이유가 된다.
이 때문에 전역변수의 사용을 억제하는 방법들이 있는데,
그중 한 방법이 즉시실행함수이다.
정의와 동시에 실행하고, 함수 내부에만 선언함으로써 지역변수화 시키는 것인데 모든 코드를 즉시실행함수로 감싸면 모든 변수는 즉시실행함수의 지역변수가 된다.
이 방법을 사용하면 전역변수를 생성하지 않으므로 라이브러리등에 자주 사용된다.
또 다른 방법으로는 전역에 네임스페이스 역할을 담당할 객체를 생성하고 전역 변수처럼 사용하고 싶은 변수를 프로퍼티로 추가하는 네임스페이스 객체가 있다.
네임스페이스 객체 내에 또 다른 네임스페이스 객체를 프로퍼티로 추가해서 네임스페이스를 계층적으로 구성할 수도 있다.
마지막으로 오늘의 핵심.. 모듈패턴이 있다.
모듈 패턴은 클래스를 모방해서 관련이 있는 변수와 함수를 모아 즉시 실행함수로 감싸 하나의 모듈을 만든다.
모듈패턴은 전역변수의 억제는 물론 캡슐화까지 구현할 수 있다.
자바에서는 접근제어자와 getter 및 setter를 이용해 캡슐화 및 정보은닉을 했지만 자바스크립트에서는 클래스가 없기 때문에 모듈패턴을 이용한다.
즉시실행함수로 감싸고 이를 변수에 담았다.
위의 즉시실행함수는 반환값을 객체로 가지고 있으며 객체 내의 키와 밸류값을 이용해 즉시실행함수의 내부에 존재하는 지역변수와 지역함수에 접근하고있다.
모듈패턴에 대한 정확한 이해는 클로저를 먼저 이해해야하므로 지금은 클로저라는 기능을 통해 전역변수를 억제할 수 있다는 사실에 주목해야한다.
오늘은 여기까지!!
자바스크립트의 모듈패턴.. 마치 자바의 작은 클래스같은 느낌이다.
다만 좀더 자유롭고 가변적이고, 그 활용도가 무궁무진할것 같다는 느낌이 강하게 든다.
'과정평가형 정보처리산업기사' 카테고리의 다른 글
D - 42 데이터베이스 OUTER JOIN, SELF JOIN, SUBQUERY 자바스크립트 생성자함수, 함수객체의 프로퍼티들 (0) | 2022.03.06 |
---|---|
D - 41 데이터베이스 그룹함수, JOIN, ANSI JOIN 자바스크립트 const키워드와 let키워드, 생성자함수에 의한 객체생성 (0) | 2022.03.03 |
D - 39 데이터베이스 함수, 자바스크립트 스코프 (0) | 2022.02.28 |
D - 38 데이터베이스 기본키 개념, 자바스크립트 콜백함수 (0) | 2022.02.25 |
DAY - 24 (0) | 2022.02.24 |