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

serializable

자바에서 입출력에 사용되는 것은 스트림이라는 데이터 통로를 통해 이동한다.하지만 객체는 바이트형이 아니기 때문에 스트림을 통해 파일에 저장하거나 네트워크로 전송할 수 없다. 따라서 객체를 스트림을 통해 입출력하려면 바이트 배열로 변환하는 것이 필요한데, 이를 직렬화라고 한다. 반대로 스트림을 통해 받은 직렬화된 객체를 원래 모양으로 만드는 과정을 역직렬화라고 한다.
직렬화2

직렬화 조건

  1. 기본형 타입은 직렬화가 가능하다.
  2. Serializable인터페이스를 구현한 객체여야 한다.
  3. transient가 사용된 멤버는 전송되지 않는다.
    transient : Serializable에서 제외시키고 싶을 때 사용하는 keyward.
  4. 생성자나 메소드는 직렬화 대상에 속하지 않는다.

선언해야하는 이유

JVM은 직렬화와 역직렬화를 하는 시점의 클래스에 대한 버전 번호를 부여한다. 만약 그 시점에 클래스의 정의가 바뀌어 있다면 새로운 번호를 할당한다. 그래서 직렬화할 때의 버전 번호와 역직렬화를 할 때의 버전 번호가 다르면 역직렬화가 불가능해 질수도 있다. 이런문제를 해결하기 위해 SerialVersionUID를 사용한다.
간단명료하게 SerialVersionUID값을 저장할 때 클래스 버전이 맞는지 확인하기 위한 용도이다. 만약 직렬화할 때 사용한 SerialVersionUID의 값과 역직렬화 하기 위해 사용했던 SerialVersionUID값이 다르다면 InvalidClassException이 발생할 수 있다.

Comment and share

Exception

예외는 error의 일종이며 프로그램이 수행시 또는 컴파일시에 불능상태를 만들어 버린다. Exception이 방생하는 이유는 여러가지다.
근데 만약 금융시스템 또는 365일 24시간 항상 구동되어야 할 시스템이 Exception으로 인해 시스템이 불능이 되거나 프로그램이 죽어버리게 되면 상당히 곤란할 것이다. 따라서 이를 막기 위해 자바에서는 Exception예외처리라는 방법을 통해 Exception erroe를 처리한다.

종류

컴파일 시점에서 발생하는 예외를 Exception(일반예외)라고 하고,
프로그램 실행시에 발생하는 예외를 RuntimeException(실행예외)라고 한다.
즉, 예외가 발생하는 시점에 프로그램이 실행 전 후 상태에 따라 이를 구분하면 된다.

이 2가지 종류의 Exceoption을 처리하기 위해 자바에서는 java.lang.Exception이라는 최상위 부모 클래스를 제공한다. 따라서 모든 Exception들의 조상을 결국 java.lang.Exception이다.
예외
하늘색 Exceoption들은 단순 Exception이다.(일반예외)
초록색 RuntimeException은 프로그램 실행시 발생하는 런타임 Exception이다.(실행예외)

예외처리 코드 및 실행순서

예외 처리 코드에는 크게 3가지 블록이 존재한다.

  • Try : 실제 코드가 들어가는 곳, 예외 Exception 발생으로 인해 시스템 및 프로그램이 불능상태에 빠지지 않고 시스템 및 프로그램이 정상실행 되도록 유지시켜 준다.
  • Catch : Try블록에서 Exception이 발생하면 코드 실행 순서가 Catch쪽으로 오게 된다. 즉 예외에 대한 후 처리 코드
  • Finally : Try블록에서 Exception과 발생 유무와 상관 없이 무조건 수행되는 코드(옵션이므로 생략 가능)

실행순서

  • Exception 발생!
    Try블록 수행 -> Catch블록 수행 -> Finally블록 수행(생략가능)

  • Exception 미 발생!
    Try블록 수행 -> Finally블록 수행(생략가능)

Comment and share

Hyeon Soo Ahn

author.bio


author.job