본문 바로가기

study

2018월 5월 9일

애너테이션

 - 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서 다른 프로그램에게 유용한 정보를 제공하는 것

  → 컴파일러에게 유용한 정보를 제공하는 것

표준 애너테이션

 - 자바에서 기본적으로 제공하는 애너테이션

 @override

  - 조상의 메서드를 오버라이딩한다는 것을 컴파일러에게 알려주는 역할

  - 메서드의 이름을 잘못 입력했을 때 컴파일러가 알려준다. ex ) parentMethod(); 를 parentmethod(); //에러발생

 @Deprecated

 - 더 이상 사용되지 않는 필드나 메서드에 붙힌다. 

 ex) Date메서드로 구현한 것을 Calender메서드로 새롭게 구현했을 때 Date메서드는 필요없게된다.

      그럴 때 @Deprecated를 이용해서 더 이상 이 메서드를 사용하지말라고 경고를 준다.

  @FunctionalInterface

 - 함수형 인터페이스를 올바르게 선언했는지 확인해준다. (추상메서드가 하나인지 확인)→ 함수형 인터페이스의 규칙

  @SuppressWarnings

 - 경고메세지를 억제해준다. (경고메세지가 날 것을 알지만 묵인해야 할 경우)

 - 대표적으로 억제할 수 있는 경고메세지의 종류 

   ① Deprecated : '@Deprecated' 가 붙은 대상을 사용해서 발생하는 경고

   ② Unchecked : 지네릭스로 타입을 지정하지 않았을 때 발생하는 경고

   ③ rawtype : 지네릭스를 사용하지 않아서 발생하는 경고

   ④ 가변변인자의 타입이 지네릭 타입일때 발생하는 경고

  @SafeVarargs (p.709 참고) (설명하기 어렵다..)

  - 가변인자의 타입이 *non-reifiable 타입일 경우 .... 해당코드에 문제가 없을 때 경고를 억제하기 위해서 사용한다.

  - ex ) 메서드의 매개변수가 가변인자인 동시에 지네릭스 타입, 그런데 코드에는 문제가 없으나 경고가 나오는 경우

 → *@SafeVarargs와 @SuppressWarnings("varargs") 를 같이 써야한다.

   *non-reifiable : 컴파일 후 제거되는 타입(지네릭스)  /  @SafeVaarargs는 Unchecked도 같이 억제해준다.


메타 애너테이션

 - 애너테이션을 위한 애너테이션

 - 애너테이션을 정의할 때 애너테이션의 적용대상(target)이나 유지기간(retention) 등을 지정할 때 사용한다.

 @Target (p.711)

 - 애너테이션이 적용가능 한 대상을 지정하는데 사용된다.

 @Reention

 - 애너테이션이 유지되는 기간을 지정하는데 사용된다.

 - 유지정책으로는 Source , Runtime, Class가 있다.

 ① Source : '컴파일러'가 사용하는 애너테이션의 유지정책 , @override, @SupressWarnings 이 있다.

 ② Run : 실행시 '리플렉션(reflection)을 통해 클래스 파일에 저장된 애너테이션 정보를 읽어서 처리할 수 있다.

    → 실행시 사용가능한 애너테이션 정책

 ③ Class : 컴파일러가 애너테이션의 정보를 클래스 파일에 저장할 수 있게 한다.

              그러나, 클래스파일이 JVM에 로딩될때는 애너테이션의 정보가 무시되어 실행시 애너테이션의 정보를

              얻을 수 없다.


----------------------------------------------------------------------------------------------------------------------------

Database

select * --name,title,salary,start_date

from student.s_emp

where title='사원'and

salary between 1000 and 2000 and --비트윈 사이값 1000(포함) 2000(포함)

start_date < '16/12/31' and

dept_id IN (110,113); --둘 중 포함된값



select name, salary, dept_id

from student.s_emp

where (dept_id=110 or  dept_id= 113) --우선순위 : 1, 비교연산자, 2. and 3. or

and salary >= 2000;

--SQL에서 사용되는 함수는 2가지 형태

--1) 단일 행 함수 2) 다중 행 함수 : GROUP

--단일) 문자형 함수

select upper('ORACLE Server') from dual; --문자값을 대문자로

select lower('ORACLE Server') from dual; --문자값을 소문자로

select initcap('ORACLE Server') from dual; --문자값의 첫 문자를 대문자, 나머지 소문자로 (공백기준)

select concat('ORACLE','Server') from dual; --문자값을 연결

select substr('강남구 대치동',5,2)from dual; --문자열 추출 문자값에서 공백포함 5번째 자리부터 2글자

select substr('강남구 대치동',-6,2)from dual; --우측부터 추출하고싶은경우 

select length('홍길동') from dual; --문자열의 길이

select LPAD('홍길동',10,'*') from dual; --좌측의 자리수 만큼 채워주는 함수

select ltrim('XXAXBA','X') from dual; -- 왼쪽부터 해당 철자인경우 지우는 함수 rtrim은 오른쪽부터

select translate('AABBA','B','X') from dual; --해당 문자열의 해당문자를 해당문자2로 변경

select replace('JACK and JUE','J','BL') from dual; -- translate는 문자만 가능, replace는 문자,문자열가능


--단일) 숫자형 함수

select round(35.735,2) from dual;  --소수 2(n)번째 자리 반올림(버림) n이 양수면 소수n번째 이하자리, 음수면 정수부분 자리, 생략하면 0

select mod(7,4) from dual; -- 나머지 구하는 함수

select power(3,2) from dual; -- (a,b) a의b제곱

select sqrt(25) from dual; -- 루트a

select sign(-15) from dual; --숫자값이 양수면 1, 음수면-1, 0이면 0

select chr(65) from dual; --숫자값을 해당하는 아스키코드로 


select name from student.s_emp  

where name between nchr(44032) and nchr(50499) --ㄱ부터 ㅅ까지

order by 1 asc;


--날짜형함수

select sysdate from dual; -- 현재날짜

select last_day(sysdate) from dual; -- 이번달 마지막날

select last_day('17/02/01') from dual; --지정한 날짜의 해당월 마지막 날짜

select months_between('17/01/01','17/03/01') from dual; --두 날짜사이의 개월수를 구함

select add_months('17/01/01', 2) from dual; --지정한 날자로부터 몇개월 후의 날짜를 구함

select round(sysdate,'month') from dual; --날짜를 반올림, 15일 이후이면 다음달로 출력

select trunc(sysdate,'year') from dual; -- 


-- Q : 이번달 마지막날까지 몇일 남았는지 계산하시오

select last_day(sysdate) -sysdate from dual;


--변환형함수

select to_char(350000,'$999,999') from dual;--숫자를 문자로 변환

select to_char(sysdate,'yyyy/mm/dd') from dual; --날짜를 문자로 변환

select to_number('1234') from dual; --문자를 숫자로 변환

select to_date('19951024','yyyy/mm/dd')from dual; --문자를 날짜로변환 (형식에 맞아야함)

--그룹함수

--count,avg,sum,min,max,stddev,variance ...

----김씨만 카운트

select count(name) 

from student.s_emp

where name like('김%')

order by 1 asc;


select dept_id,avg(salary) --SALARY

from student.s_emp

where title = '사원'

group by dept_id

order by dept_id;


----Q : 각 부서별 평균 급여율을 보이시오 . (그룹 : 부서)

select dept_id, avg(salary) as 평균급여율

from student.s_emp

group by dept_id

order by 2 asc; --평균급여율 내림차순


--Q : 직책이 사원인 직원들의 평균 급여를 계산해서 보여주시오

select dept_id as 부서, title, avg(salary)

from student.s_emp

where title ='사원'

group by dept_id,title

order by 3 asc;


----Q : 각 부서별로 평균 급여를 구하되 평균 급여가 2000이상인 부서만 나타내시오

select dept_id as 부서, avg(salary) as 평균급여

from student.s_emp

GROUP by dept_id

having avg(salary) > 2000 --그룹의 조건.

order by 2 asc;


select title, avg(salary), count(*) -- 직책, 직책의 평균, 직책의 개수

from student.s_emp

group by title

having count(*) > 2;


--일반) 직책별 급여의 총합

select title, sum(salary)

from student.s_emp

group by title;


--각 직책별로 급여의 총합을 구하되 직책이 부장인 사람은 제외,

--단, 급여 총합이 8000만원 이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬

select title, sum(salary)

from student.s_emp

where title not in('부장')

group by title

having sum(salary)>8000

order by 2 asc;


--각 부셔별로 직책이 사원인 직원들에 대해서만 평균 급여를 구하시오.

select dept_id,title,avg(salary)

from student.s_emp

where title='사원'

group by dept_id, title

order by 3 asc;


--각 부서내에서 각 직책별로 몇 명의 인원이 있는지 나타내시오

select dept_id as 부서, title as 직책 ,count(title)

from student.s_emp

group by dept_id,title;


--각 부서내 몇 명의 직원이 근무하는지를 나타내시오

select dept_id,count(*)

from student.s_emp

group by dept_id;


--각 부서별로 급여의 최소값과 최대값을 나타내시오. 단, 최소값과 최대값이 같은 부서는 출력하지 마시오

select dept_id, min(salary), max(salary)

from student.s_emp

group by dept_id

having min(salary)<> max(salary);



  

   

 

'study' 카테고리의 다른 글

2018년 5월 15일  (0) 2018.05.15
2018년 5월 14일  (0) 2018.05.14
2018년 5월 11일  (0) 2018.05.13
2018년 5월 10일  (0) 2018.05.10
2018년 5월 8일  (0) 2018.05.09