개인 공부/TIL

TIL #220607 #DB # JAVA

kaleb 2022. 6. 7. 22:13
728x90

Longtime no see!...

8월 전 마지막 연휴가 찾아왔었습니다. 저는 어디로 사라졌다가 이제 돌아왔을까요?

제 시간 보신분 혹시 계실까요?

힐링이 필요했다면 나름 잘 쉬다가 돌아왔습니다!! 쉰 만큼 이전보다 더 열심히하면 되지요! 파이팅입니다.

오늘은 오전 DB 오후 JAVA순으로 진행되었습니다. 복습을 열심히해도 스스로 평가하길 JSP비중만큼 열심히는 하지 않았는지 이제 슬슬 헷갈리는 부분이 많아서 여기저기 많이 찾아다니면서 추가로 공부를 하고 있습니다.

수업외적으로도 좋은 내용 많은 것 같아 도움이 많이 되셨으면 합니다.

 


 

오전 DB

 

이전에도 join을 공부했는데 조금 만족스럽지 못해서 조금 더 찾아 보았습니다.!

 

Join

: 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법입니다. 테이블들이 적어도 하나의 컬럼을 공유하고 있어야 사용이 가능합니다.

  • Inner join(simple join) : 내부조인
    교집합 조인의 조건에 만족한 값만을 출력하는 join
  • outer join : 외부조인, 합집합
    inner join의 확장이라고 설명되어있습니다. left, right의 outer, full outer으로 출력 할 수 있습니다.
  • left/right join : 부분집합

참고 : doc.oracle.com

Joins

 

Joins

A join is a query that combines rows from two or more tables, views, or materialized views. Oracle Database performs a join whenever multiple tables appear in the FROM clause of the query. The select list of the query can select any columns from any of the

docs.oracle.com

 


On 절과 Where절의 차이점

:

  • On : 조건으로 필터링 된 레코드들 간의 Join이 이루어집니다.
    조건에 따른 필터링이 join 보다 먼저
  • Where : Join 한 결과에서 Where 절 조건으로 필터링이 이루어집니다.
    조건에 따른 필터링이 join 보다 이후


Subquery

: 쿼리구문을 보조하는 역할입니다. 다른 구문의 내부에 위치하는 구문을 말합니다.

// Abel의 급여보다 더 많은 급여를 받는 사원은?
SELECT employee id, last_name, salary
FROM employees
WHERE salary > (
	SELECT salary
	FROM employees
	WHERE last_name = 'Abel'
);

 

Inline View

view : view는 가상의 테이블을 만드는 문법입니다.

따라서 inline view 는 view를 구성하는 문법을 서브쿼리로 구현하는 문법입니다.

서브쿼리의 출력 결과가 가상의 테이블 형태로 사용되는데 이 경우 table alias를 활용해주는 것이 좋습니다.

SELECT last_name, salary, salavg_view.department_id, salavg
FROM employees e 
JOIN (
	SELECT department_id, AVG(salary) salavg
	FROM employees 
	GROUP BY department_id
	) salavg_view
ON e.department_id = salavg_view.department_id
WHERE salary > salavg;

 

데이터 조작어 DML (Data Manipulation Language)

where 절과 같이 쓰이면서 다양한 조건을 설정할 수 있습니다.

  • INSERT : 테이블에 새로운 데이터를 추가하는 문법입니다.
  • INSERT INTO 절 : 데이터가 입력 될 테이블, 컬럼을 지정해줍니다.
  • VALUES 절 : 입력될 실제 값의 목록을 작성해줍니다.
INSERT INTO departments(department_id, department_name, manager_id, location_id)
															1      ,        2       ,     3     ,      4
VALUES (280, 'Lunch', 100, 1700);
         1 ,     2  ,  3 ,   4

 

  • UPDATE : 테이블의 기존 데이터를 갱신하는 문법입니다.
UPDATE employees
SET department_id = 50
WHERE employee_id = 113;

// employees 테이블의 employee_id가 113 인 사원에 대해 department_id의 값을 
// 50으로 갱신합니다.



  • DELETE : 테이블의 기존 데이터를 삭제하는 문법입니다.
DELETE FROM departments
WHERE department_name = 'Lunch';
// department 테이블에서 department_name의 값이 'Lunch'인 값을 삭제합니다.

 


 

오후 JAVA

 

java역시 상속, 생성자, 인스턴스 등등 을 복합적으로 사용하면서 좀 더 개념을 꼼꼼히 해야되겠다는 필요성을 느끼게 되었습니다.  

상속(Inheritance)

: 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다.

상속을 이용하면 기존에 정의되어 있는 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스를 생성할 수 있습니다.

기존에 정의 되어있던 클래스를 부모/상위클래스 (Parent/Super class)라고합니다.

그리고 상속을 통해 새롭게 작성되는 클래스를 자식/하위클래스(Child/ Sub class)라고합니다.

 

상속의 장점

  • 클래스의 재활용이 가능합니다.
  • 다형성의 문법적 토대를 마련할 수 있습니다.

부모 클래스의 기본 생성자 호출

인스턴스를 생성하기 위해서는 반드시 생성자를 호출해야합니다.

하지만 생성자는 상속되지 않습니다.
대신 자식클래스로 인스턴스를 생성할 때 부모 클래스의 기본 생성자를 자동으로 호출하게 됩니다.

하지만 파라미터를 갖는 부모 클래스의 생성자는 자동으로 호출되지 않습니다.

**super()**라는 키워드를 통해서 괄호 안에 파라미터를 전달하여 부모를 의미하는 생성자를 호출합니다.

super() 는 반드시 자식 클래스 생성자의 첫 줄에 위치하여야 하며 부모 생성자의 매개변수와 동일한 타입을 매개 값으로 작성해야합니다.


다형성(Polymorphism)

: 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다.
자바에서는 다형성을 위해서 부코믈래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하고 있다고합니다.

class Parent {...}
class Child extends Parent {...}

Parent p = new Parent();      
Child c = new Child();        
Parent p2 = new Child();
Child c2 = new Parent();  // Error

자식 클래스 타입의 참조 변수로는 부모크래스 타입의 인스턴스를 참조 할 수 없습니다.

 

참조 변수가 사용할 수 있는 개수가 실제 인스턴스 멤버 개수보다 많기 때문입니다.
클라스는 상속을 통해서 확장될 수는 있지만 축소될 수는 없습니다.
자식 클래스에서 사용할 수 있는 멤버의 개수는 언제나 부모클래스와 같거나 많게 됩니다.

 

Casting

: 타입변환을 의미합니다. 형변환

  • Upcasting (업캐스팅) : 서브클래스가 슈퍼클래스의 참조변수 타입으로 형변환합니다. 재사용해야하는 반복된 메서드를 업캐스팅을 통해서 호출하여 사용할 때 사용합니다. 다형성
public class Test {

	public static void main(String[] args) {

		// 레퍼런스 형변환 
		SmartPhone sp = new SmartPhone();
		
		//서브클래스로 타입 참조가능한 메서드는 3개 입니다.
		sp.katalk();
		sp.text();
		sp.call();
		
		//슈퍼클래스 타입 인스턴스 생성
		CellPhone cp = new CellPhone();
		
		// 슈퍼클래스로 타입 참조가능한 메서드는 2개 입니다.
		cp.text();
		cp.call();

		System.out.println("========================================");
		// 슈퍼클래스 <- 서브클래스  타입으로 변환하는 경우 자동 형변환 Upcasting
		CellPhone cp2 = new SmartPhone();
		
		// 형변환할시 참조가능한 메서드는 2개입니다.
		cp2.text();
		cp2.call();

class TelePhone {
	
	public void call() {
		System.out.println("전화걸기");
	}
}

class CellPhone extends TelePhone {
	
	public void text() {
		System.out.println("문자전송");
	}
}

class SmartPhone extends CellPhone {
	
	public void katalk() {
		System.out.println("카톡전송");
	}
}



  • Downcasting(다운캐스팅) : 슈퍼클래스가 서브클래스의 참조변수 타입으로 형변환합니다.
    서브클래스의 객체를 다시 복구 시켜주는 것입니다. 따라서 업캐스팅이 선행되어야 합니다.
// 업캐스딩된 cp2를 서브클래스 <- 슈퍼클래스 로 형변환하는 명시적 형변환 Downcasing
		SmartPhone sp2 = (SmartPhone) cp2;
		
		// 업캐스딩된 참조변수를 다시 다운캐스팅하여 참조가능한 메서드가 3개로 돌아오게됩니다.
		sp2.katalk();
		sp2.text();
		sp2.call();



캡슐화(Encapsulation)

: 변수와 메서드를 하나의 클래스로 묶고 외부에서 쉽게 전근하지 못하도록 은닉하는 것을 말합니다.

접근제어자와 Setter & Getter를 통해서 외부에서의 접근을 제한하고 은닉할 수 있습니다.

 

Instanceof

: 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알기 위해 사용합니다.

boolean type으로 true / false 를 리턴합니다.

// "object instanceof type"

class Parent{...}
class Child extends Parent{...}

public class InstanceofEx {
    public static void main(String[] args){

        Parent p = new Parent();
        Child c = new Child();

        System.out.println( p instanceof Parent );  // true
        System.out.println( c instanceof Parent );   // true

        System.out.println( p instanceof Child );   // false
        System.out.println( c instanceof Child );   // true
    }
}

 

instanceof 의 경우 각 객체가 무엇인지 어떤 점수를 돌려주어야 하는지 불필요한 외부의 객체가 그 정보를 알게 됩니다.
따라서 캡슐화가 깨지게 됩니다. 캡슐화가 보장되지 않는다면 그 의미가 없어지기 때문에 instanceof의 사용을 지양해야한다고 합니다.!

 


 

 

반응형

'개인 공부 > TIL' 카테고리의 다른 글

TIL #220613 #JSP # JAVA  (0) 2022.06.13
TIL #220608 #JSP # DB  (0) 2022.06.08
TIL #220603 #JSP  (0) 2022.06.03
TIL #220602 #DB #WEB  (0) 2022.06.02
TIL #220531 #DB # JAVA  (0) 2022.05.31