IT/Spring, 스프링(17.04.05~)

2. DB 연동 프로젝트(1) (1번 게시물 이어서)

만두토끼 2018. 4. 9. 18:02

오라클 실행 & 코드 작성


1. Sql 실행

-- 샘플 테이블 생성

create table goods(

code varchar2(100) primary key,

name varchar2(100),

manufacture varchar2(100),

price number(10));


-- 샘플 데이터 입력

insert into goods(code, name, manufacture, price) 

values('001', '구아바', '칠레', 5000);


-- 샘플 데이터 조회

select * from goods;


-- 작업 내용 데이터베이스 반영

commit;



2. domain.Good 클래스: 테이블의 데이터를 표현하는 VO(Value Object) 클래스

package domain;


public class Good {

//데이터 저장 변수, private: 객체가 사용 X

private String code;

private String name;

private String manufacture;

private int price;

//객체가 변수 사용하게 해주는 메소드

//일반변수 동기화 제어 X -> 메소드 가능

public String getCode() {

return code;

}

public void setCode(String code) {

this.code = code;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getManufacture() {

return manufacture;

}

public void setManufacture(String manufacture) {

this.manufacture = manufacture;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

//변수 값을 빠르게 확인 메소드

//Object 클래스의 메소드라 모든 클래스에 존재

//재정의 하지 않으면 클래스 이름과 hashcode 리턴

//출력하는 메소드에 객체의 이름만 대입하면 자동 호출

@Override

public String toString() {

return "Good [code=" + code + ", name=" + name + ", manufacture=" + manufacture + ", price=" + price + "]";

}



3. dao.GoodDao 클래스: Goods 테이블의 데이터를 조작하는 클래스, 하나의 데이터를 가져오는 메소드 생성

=> DB 접속 객체는 동시에 작업 불가능

=> 동시에 2개 이상의 객체가 존재할 필요가 없는 클래스의 경우, 싱글톤 패턴으로 디자인

package dao;


public class GoodDao {

//싱글톤을 만들기 위한 코드

private static GoodDao goodDao;

public GoodDao() {}

public static GoodDao sharedInstance() {

if(goodDao==null) {

goodDao=new GoodDao();

}

return goodDao;

}

}



* 싱글톤 패턴

인스턴스가 사용될 때에 똑같은 인스턴스를 만들어 내는 것이 아니라, 동일 인스턴스를 사용하게끔 하는 것이 기본 전략이다. 프로그램상에서 동일한 커넥션 객체를 만든다던지, 하나만 사용되야하는 객체를 만들때 매우 유용하다

출처: https://blog.seotory.com/post/2016/03/java-singleton-pattern


* 클래스, 객체, 인스턴스

클래스와 인스턴스는 설계도와 제품이라고 설명했다. 그럼 객체는 클래스일까 인스턴스일까? 다소 논란이 있지만 일반적으로 설계도인 클래스가 구체적인 실체인 인스턴스가 되었을 때 객체라고 부른다.



4.  main.Main 클래스: 해시코드 출력, 생성자 이용, 싱글톤 패턴의 메소드 이용

package main;


import dao.GoodDao;


public class Main {

//Java 응용 프로그램의 entry point(진입점)

//Java 응용 프로그램 실행 시 main 메소드 호출

public static void main(String[] args) {

//생성자 이용-> 객체 생성 -> 호출 때마다 새로 만들기

//클라이언트 프로그램을 만들 때 주로 이용

//dao.GoodDao를 import 해야 사용 가능

GoodDao dao1 = new GoodDao();

GoodDao dao2 = new GoodDao();

//해시코드(id): 객체를 구별하기 위한 코드

System.out.println("dao1: "+dao1.hashCode());

System.out.println("dao2: "+dao2.hashCode());

//생성자 이용 X -> sharedInstance를 이용한 경우

//한번 만들면 계속 사용 가능

//서버 프로그램을 만들때 주로 이용

GoodDao dao3 = GoodDao.sharedInstance();

GoodDao dao4 = GoodDao.sharedInstance();

System.out.println("dao3: "+dao3.hashCode());

System.out.println("dao4: "+dao4.hashCode());

}

}



=> dao3와  dao4는 동일한 hashcode를 지녔음을 확인 할 수 있다.