산술연산자

+ : 더하기
- : 빼기
* : 곱하기
/ : 나누기

ex)

-- 각 사원들의 급여액과 급여액에서 1000을 더한 값, 200을 뺀 값, 2를 곱한 값, 2로 나눈 값을 가져온다.
select sal,sal+1000,sal-200,sal*2,sal/2
from emp;

ex)

-- 각 사원의 급여액, 커미션, 급여 + 커미션을 가져온다.

select sal, nvl(comm,0), sal + nvl(comm,0)
from emp;

해당 컬럼의 값이 null 값인 경우 특정값으로 출력하고 싶으면 NVL 함수를 사용하고,
null 값이 아닐경우 특정값으로 출력하고 싶으면 NVL2 함수를 사용하면 된다.

Concat

  • 문자열을 합치는 연산자이다.
  • 문자열 ||컬럼||문자열||컬럼

ex)

-- 사원들의 이름과 직무를 다음 양식으로 가져온다.
-- 000 사원의 담당 직무는 xxx입니다.

select ename || '사원의 담당 직무는 ' || job||'입니다.'
from emp;

||는 CONCAT과 같은 기능을 보여준다.
하지만 세개이상의 문자열을 합칠때는 더 편하게 사용 할 수 있다.

Distinct

  • select문을 통해 가져온 모든 로우 중에서 중복된 로우를 제거하는 키워드
  • select distinct 컬럼명 from 테이블명

ex)

-- 사원들이 근무하고 있는 근무 부서의 번호를 가져온다.
select DISTINCT deptno
from emp;

Comment and share

Select

  • 데이터 베이스에 저장된 데이터를 가져오는 명령문이다.
  • 개발자가 가장 많이 사용하고 가장 중요한 명령문으로써 다양한 상황이나 조건에 맞는 데이터를 빠르고 쉽게 가져올 수 있도록 지원하고 있다.

모든 컬럼의 데이터 가져오기

  • select * from 테이블 명

ex)

-- 부서의 모든 정보를 가져온다.
select *
from dept;

ex)

-- 사원의 모든 정보를 가져온다.
select*
from emp;

특정 컬럼의 데이터 가져오기

  • select 컬럼명1, 컬럼명2 from 테이블명

ex)

-- 사원의 이름과 사원의 번호를 가져온다.
select ename,empno
from emp;

ex)

-- 사원의 이름과 사원번호, 직무, 급여를 가져온다
select ename,empno,job,sal
from emp;

ex)

-- 부서번호와 부서이름을 가져온다.
select deptno,dname
from dept;

Comment and share

SQL명령문

  • 관계형 데이터 베이스 관리 시스템에서 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
  • SQL문은 표준 언어와 비 표준 언어로 나뉘며 표준 언어는 모든 RDBMS(Relational DataBase Management System)제품군들이 지원하고 비 표준 언어는 특정 비 표준 언어는 특정 RDBMS에서만 지원되는 언어이다.

DDL

  • Data Definition Language(데이터 정의어)
  • 테이블과 인덱스의 구조를 관리하는 언어
  • create, drop, alter 등

DML

  • Data Manipulation Language(데이터 조작어)
  • 테이블 등에 데이터를 저장, 수정, 삭제, 추출 등을처리하는 언어
  • insert, update, delete, select 등

DCL

  • Data Control Language(데이터 제어어)
  • 사용자 권한, 작업의 취소 등을 처리할 수 있는 언어
  • grant, revoke, commit, rollback 등

Comment and share

데이터 딕셔너리

  • 시스템 카탈로그라고 부르기도 하며 사용 가능한 데이터 베이스 및 테이블의 정보를 가지고 있는 시스템 테이블이다.
  • 데이터 딕셔너리는 DBMS만이 추가, 수정, 삭제가 가능하며 사용자는 조회만 가능하다.

테이블 목록 조회하기

select * from tab;

테이블 정보 조회하기

desc 테이블명

Comment and share

Lamda

  • 람다 함수는 익명함수이다.
  • 그러므로 이름을 가질필요가 없다.
  • 두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화 될 수 있다.(커링)

익명함수

  • 일급객체이다. : 연산을 모두 지원하는 객체이다.

람다의 장단점

  • 장점
  1. 코드의 간결성 : 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있다.
  2. 지연연산 수행 : 람다는 지연연산을 수행 함으로써 불필요한 연산을 최소화 할 수 있다.
  3. 병렬처리 - 멀티쓰레드를 활용하여 병렬처리를 사용할 수 있다.
  • 단점
  1. 람다식의 호출이 까다롭다.
  2. 람다 Stream사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어진다.
  3. 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있다.

람다표현식

  1. 람다는 매개변수 화살표(->) 함수몸체로 이용하여 사용할 수있다.

  2. 함수몸체가 단일 실행문이면 괄호를 생략할 수 있다.

  3. 함수몸체가 return문으로만 구성되어 있는 경우 괄호를 생략할 수 없다.

     //정상적인 유형
     () -> {}
     () -> 1
     () -> { return 1; }
    
     (int x) -> x+1
     (x) -> x+1
     x -> x+1
     (int x) -> { return x+1; }
     x -> { return x+1; }
    
     (int x, int y) -> x+y
     (x, y) -> x+y
     (x, y) -> { return x+y; }
    
     (String lam) -> lam.length()
     lam -> lam.length()
     (Thread lamT) -> { lamT.start(); }
     lamT -> { lamT.start(); }
    
    //잘못된 유형 선언된 type과 선언되지 않은 type을 같이 사용 할 수 없다.
    (x, int y) -> x+y
    (x, final y) -> x+y 

Comment and share

Spring

  • 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
  • 종속 객체를 생성해주고, 조립할 수 있는 프레임워크
  • 자바 SE로 된 자바객체(POJO)를 자바 EE에 의존적이지 않게 연결해 준다.

Comment and share

IOC

  • 일반적인 의존성에 대한 제어권은 개발자가 직접 의존성을 만들지만 Spring은 외부에서 의존성을 가져온다.

  • 즉 밖에서 나에게 의존성을 주입해주는 것을 DI라고 하는데 이것은 IOC의 일종이다.

      public OwnerController(OwnerRepository clinicService, VisitRepository visits) {
              this.owners = clinicService;
              this.visits = visits;
      }
    

스프링에서 의존성을 주입하는 방법

스프링에서 의존성을 주입하는 방법은 세가지이다.
@Autowired 어노테이션은 field, 생성자, setter메소드 등에 붙여서 사용할 수 있다.

    public OwnerController(OwnerRepository clinicService, VisitRepository visits) {
            this.owners = clinicService;
            this.visits = visits;
        }

스프링 레퍼선스에서는 생성자를 통해 주입하는 것을 권장하고 있다.
그 이유는 필수적으로 사용해야 하는 레퍼런스 없이는 인스턴스를 만들지 못하도록 강제하는 역할을 할 수 있기 떄문이다.

Comment and share

Stream

  • 스트림은 데이터의 흐름이다.
  • 배열 또는 컬렉션 인스턴스에 함수 여러개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다.
  • 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다.
  • 병렬처리, 즉 쓰레드를 이용해서 빠르게 처리할 수 있다.

Comment and share

Thread

  • 메모리를 할당받아 실행 중인 프로그램을 프로세스라고 한다.
  • 프로세스 내의 명령어 블록으로 시작점과 종료점을 가진다.
  • 실행중에 멈출 수 있으며 동시에 수행 가능하다.
  • 어떠한 프로그램내에서 특히 프로세스 내에서 실행되는 흐름의 단위.

멀티스레딩

여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법.
장점

  • 메모리 공유로 인한 시스템 자원 소모가 줄어든다.
  • 동시에 두가지 이상의 활동을 하는 것이 가능해진다.
    단점
  • 서로 자원을 소모하다가 충돌이 일어날 가능성이 존재
  • 코딩이 난해해져 버그생성확률이 높아진다.

스레드의 생명주기

스레드

  1. Runnable(준비단계)
    스레드가 실행되기 위한 준비단계이다. CPU를 점유하고 있지 않으며, 실행을 하기 위해 대기하고 있는 상태이다. 코딩 상에서 start()메소드를 호출하면 run()메소드에 설정된 스레드가 Runnable상태로 진입한다.

  2. Running(실행상태)
    CPU를 점유하여 실행하고 있는 상태이며, run()메소드는 JVM만이 호출가능하다. Runnable에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면 JVM이 자동으로 run()메소드를 호출하여 스레드가 Running 상태로 진입한다.

  3. Dead(종료상태)
    Runnig상태에서 스레드가 모두 실행되고 난 후 완료 상태입니다. “Done”상태라고도 한다.

  4. Blocked(지연상태)
    CPU점유권을 상실한 상태이다. 후에 특정 메소드를 실행시켜 Runable로 전환한다.
    wait() 메소드에 의해 Blocked 상태가 된 스레드는 nofify() 메소드가 호출되면 Runnable 상태로 간다. sleep(시간) 메소드에 의해 Blocked상태가 된 스레드는 지정된 시간이 지나면 Runnable상태로 간다.

쓰레드 구현과 실행

쓰레드를 구현하는 방법은 두가지가 있다.

  • Thread클래스를 상속
  • Runnable인터페이스를 구현
    Runnable을 사용하는 것이 낫다.
    그 이유는 Thread클래스를 상속받으면 다른 클래스를 상속 받지 못하기 때문이다
    Runnable을 구현하는 방법은 재사용성이 높고 코드의 일관성을 유지 할 수 있다는 장점이 있기 때문에 보다 객체지향적인 방법이라 할 수 있다.

Comment and share

Hyeon Soo Ahn

author.bio


author.job