개발/대덕인재개발원

대덕240910 자바:참조 타입,변수/DB:기타 연산자

월은 2024. 9. 10. 18:10

<1~4교시 자바>

참조 타입과 참조 변수

참조타입이란 객체라는 덩어리를 다른 주소에로 저장해놓고 해당 주소를 값 대신 주소값으로 가지는 변수이다

*문자열도 참조 타입이다, 기본 변수로 지정하기엔 단어가 길어질 수 있기에 

메모리 영역

메소드 영역:실제 코드 작성 영역

힙 영역: 참조형 데이터의 실제 데이터 저장공간

스택:입구와 출구가 같다=데이터가 차곡차곡 쌓인다(먼저 들어간 데이터가 제일 나중에 나온다)(first in last out)

         프레임마다 독립적인 영역을 가진다

 

 메소드를 호출할 때마다 프레임이 추가되고, 메소드가 종료되면 해당 프레임이 제거

정해진 범위(블록)을 벗어나면 사라지기 때문에 해당 블록에서만 사용가능

참조타입 변수간 동일 객체를 참조하는지, 다른 객체를 참조하는지 알아보고자 할 떄에는 

' == ', '  != ' 연산을 이용한다

참조변수를 작성하고는 싶은데 안에 아무 객체도 지정(참조)하고싶지 않을 때 null을 사용한다 

*null 값은 처음부터 지정할 수도 있고 나중에 객체의 값을 지우면서 지정도 가능하다

*참조를 잃은 String객체는 쓰레기 수집기(Garbage Collector)를 통해 메모리에서 자동 제거한다

 

*참조 대상이 없기에 해당 변수의 데이터를 사용하고자 할 때 에러 발생(NullPointException)

문자열 리터럴 동일한 경우 같은 String 객체를 공유

new 연산자 사용시 새로운 String 객체 생성 이 둘을 == 비교연산해보면 다른 것으로 나온다. 서로 객체가 다르기 때문이다

*equals 연산자 사용시 단순 문자열의 내용을 가지고 비교 가능, 따라서 문자열의 비교에 자주 사용된다

배열 

대괄호의 위치는 다음 두가지 가능

많은 양의 데이터를 적은 코드로 처리하면서 손쉽게 접근할 수 있게 해준다

데이터를 연속된 공간(heap)에 나열하고 각 데이터에 인덱스(Index)(첨자)를  부여한 자료구조 

같은 타입의 데이터만 저장할 수 있음 

*한 번 생성된 배열은 길이를 늘리거나 줄일 수 없음

값 록으로 배열 생성
new 연산자를 이용하여 배열 생성

new 연산자를 입력하면 기본값이 초기값으로 설정된다.

배열 변수 선언 후에는 변수값 변경 불가

배열 변수 미리 선언한 후 값 목록이 나중에 결정되는 경우  연산자를 사용하여 값 목록 지정 가능

배열 생성 후 다음과 같이 특정 인덱스 위치에 새 값 저장 가능

 

<5~8교시 DB>

연산자

기타 연산자 

 

1
2
3
4
5
6
7
8
<회원테이블에서 회원 중 '김'씨에서 '박'씨까지
       회원번호,회원명,마일리지>

    SELECT MEM_ID AS 회원번호,
           MEM_NAME AS 회원명,
           MEM_MILEAGE AS 마일리지
      FROM MJY.MEMBER
     WHERE SUBSTR(MEM_NAME,1,1) BETWEEN '김' AND '박' 
     ORDER BY 2;
cs

BETWEEN)

expr BETWEEN 값1 AND 값2

 

 

1
2
3
4
5
6
7
-2020년 6월의 판매정보를 조회하시오(날짜,상품코드,구매회원번호,수량)
    SELECT TO_DATE(SUBSTR(CART_NO,1,8)) AS 날짜,
           PROD_ID AS 상품코드,
           MEM_ID AS 구매회원번호,
           CART_QTY AS 수량
      FROM MJY.CART
     WHERE CART_NO LIKE '202006%';
cs

LIKE)

문자열 연산자(문자 전용), 패턴을 비교할 때 사용 

'%' : 길이와 상관없이 모든 문자 데이터을 의미(Null도 포함)

'_':어떤 값이든 상관없이 한 개의 문자 데이터를 의미

 

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
2024-0910-03)기타연산자(IN, ANY, SOME, ALL)
 - 불규칙적이거나 불연속적인 복수개의 값을 비교할때 사용
  1) IN
  . '=' 기능을 보유한 연산자
  . OR 연산자로 바꾸어 기술할 수 있음
  사용형식)
    컬럼명 IN(값1,값2,... 값n)
    - '컬럼명'의 값이 '값1'이거나, '값2'이거나 또는 '값n'이면 참(true)를 반환
 사용예)HR 계정에서 2040, 90번 부서에 속한 사원을 조회하시오(사원번호,사원명,부서번호,직책)
 (OR 연산자 사용)
    SELECT EMPLOYEE_ID AS 사원번호,
           EMP_NAME AS 사원명,
           DEPARTMENT_ID AS 부서번호,
           JOB_ID AS 직책
      FROM HR.EMPLOYEES
      
    --WHERE DEPARTMENT_ID=20
       --OR DEPARTMENT_ID=40
       --OR DEPARTMENT_ID=90
       
    --WHERE DEPARTMENT_ID IN(20,40,90)  
     
      WHERE DEPARTMENT_ID = ANY(20,40,90);
    
     ORDER BY 3;
cs

다중행연산자!

IN)

'='으로서의 기능뿐

 

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
2) ANY(SOME)
  . 관계 연산자와 같이 사용해야 함
  . '=' 연산자를 사용한 ANY(SOME)연산자는 IN으로 바꾸어 기술할 수 있음
  사용형식)
    컬럼명 관계연산자 ANY|SOME(값1,값2,... 값n)
    - '컬럼명'의 값이 어느 하나라도 '관계연산자'를 만족하면 참(true)를 반환
    
사용예) 마일리지가 200030004000 중 어느 하나보다 많은 회원정보 조회
        Alias는 회원번호,회원명,마일리지
        
    SELECT MEM_ID AS 회원번호,
           MEM_NAME AS 회원명,
           MEM_MILEAGE AS 마일리지      
      FROM MJY.MEMBER
     WHERE MEM_MILEAGE >ANY(2000,3000,4000)
     ORDER BY 3;
     
 (OR 연산자 사용)   
       SELECT MEM_ID AS 회원번호,
           MEM_NAME AS 회원명,
           MEM_MILEAGE AS 마일리지      
      FROM MJY.MEMBER
     WHERE MEM_MILEAGE >2000
        OR MEM_MILEAGE > 3000           
        OR MEM_MILEAGE > 4000 
     ORDER BY 3;
cs

ANY,SOME)

여러개 중 하나만 만족하면 성립(OR와 비슷)

=ANY은 IN과 같다

관계연산자가 필수이며, 이 관계연산자는 ANY,SOME 왼편에 붙여 사용한다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
3) ALL
 - 기술된 필드가 여러 개의 값 전부와 사용된 관계연산자를 만족하는지 살펴보기 위한 연산자
 - 관계 연산자 중 '=' 사용할 수 없다.
 
 사용예) 사원테이블에서 20,30,70번 모든 부서를 가진 사원정보
  SELECT *
    FROM HR.EMPLOYEES
   WHERE DEPARTMENT_ID = ALL(20,30,70); 
   
  SELECT MEM_ID, MEM_NAME, MEM_MILEAGE
    FROM MJY.MEMBER
   WHERE MEM_MILEAGE < ALL(2000,3000,4000)
   ORDER BY 3 DESC;
   
   SELECT MEM_ID, MEM_NAME, MEM_MILEAGE
    FROM MJY.MEMBER
   WHERE MEM_MILEAGE <2000
     AND MEM_MILEAGE <3000       
     AND MEM_MILEAGE <4000          
   ORDER BY 3 DESC;
   
 
 
cs

ALL)

전부 만족하면 성립(AND와 비슷)

'='기호 성립불가

 

연산자 왼쪽에는 컬럼이기 때문에 딱 하나밖에 올 수밖에 없다. 때문에 서브쿼리를 이용해 연산자 오른쪽의 여러 값과 비교할 떄에는 다음과 같은 다중행 연산자를 사용한다