[Java 코드로만 데이터베이스를 사용 ]

=>Connection, Statement, ResultSet을 이용해서 사용 

=> 프레임워크를 이용하지 않기 때문에 프레임워크의 변화에 아무런 영향도 받지 않습니다. 

=> 디자인 패턴이나 코드 최적화를 하지 않으면 비효율적이 프로그램이 만들어집니다. 

=> 디자인 패턴이나 알고리즘 및 자료구조 공부를 많이 한 경우에 사용합니다. 


[프레임워크를 이용하는 방법 ]

=> 알고리즘이나 디자인 패턴 및 자료구조를 심도있게 공부하지 않아도 무난한 데이터베이스 연동 프로그램을 만들수 있습니다. 


1) SQL Mapper Freamwork : SQL을 별도로 작성하고 실행해서 결과를 가져오는 방식으로 파라미터 매핑이나 결과 매핑은 프레임워크가 대신 해줍니다. 

이 방식의 대표적인 프레임워크는 MyBatis(iBatis)가 있습니다.  

구현 방법이 쉽기 때문에 현재 우리나라 공공기관 프로젝트나 금융기관 프로젝트가 많이 사용하고 있습니다. 


2) Object Relationship Mapping Framework :테이블과 클래스를 매핑시켜서 SQL 없이 데이터 베이스 작업을 수행하는 방식입니다. 

이 방식의 대표적이 프레임워크는 Hibernate - JPA가 있습니다. 

구현은 어렵지만 성능 SQL Mapper보다 우수합니다. 

SI(시스템 통합)에는 부적합하고 일반 application 개발에 주로 이용 



[나중에 찾아보기 위한 공부내용 ]


GCD (최대 공약수 )


유클리드 알고리즘 


1) v가 u보다 크다면 u와 v의 값을 바꾼다 

2) u= u-v

3) u가 0이면 v가 최대 공약수 

0이 아니면 (1)돌아갑니다. 


GCD (250, 30)

GCD (230, 30)

GCD (200, 30)

GCD (170, 30)


.........

GCD (10, 30)

GCD (30, 10)

GCD (20, 10)

GCD (0, 10)

GCD = 10 ;



[풀이 방법 ]


package algoridem;


public class Gcd {


public int get_gcd(int su, int su2) {

int t = 0 ; // 임시저장 변수 

//su가 0보다 크면 while문은 실행된다. 

while (su>0) {

// 만약 su2가 su보다 더 크다면 

// 두수의 자리를 체인지 해준다.

if (su<su2) {

t = su; su = su2; su2=t;

}

//su -su2를 통해 최대 공약수를 찾기 

su = su-su2;

}

return su2;

}

public static void main(String[] args) {

Gcd g = new Gcd();

System.out.println(g.get_gcd(280, 30));


}


}


[그러나]

[유클리드 알고리즘 개선 방법] 


뺄셈 기반 알고리즘의 문제는 너무 많은 뺄셈을 요구 하기 때문에 

나눗셈의 나머지를 구해 풀이를 해보자 

GCD (su, su2) = GCD(su%su2,v) =GCD(v,u%v)


- su%su2 < su2 



v가 0이 아니면 

su = su% su2 

su와 su2를 교환 

처음으로 돌아감 


su2가 0이면 su가 GCD(최대공약수)



[개선된 풀이 방법 ]


package algoridem;


public class Gcd {


public int get_gcd(int su, int su2) {


int t = 0; // 임시저장 변수


// su가 0보다 크면 while문은 실행된다.


while (su2 > 0) {


t = su % su2;


su = su2;


su2 = t;


}


return su;


}


public static void main(String[] args) {

Gcd g = new Gcd();

System.out.println(g.get_gcd(280, 30));


}


}



[재귀함수]


public int get_gcd(int su, int su2) {

if (v==0)
    return=0;
else{
 return get_gcd(su2,su%su2)
}
}

[생각하며 코딩을 정리 해보기 ]]


1.su가 0이면 su2 가 최대공약수 이기에 

2.0 이되면 최대공약수의 값이 나온것으로보고 

3.반복문을 멈추기 위해서 

4.while의 조건은 su>0을 만들어서 반복문을 돌리고 

5.su 가 작아지면 false를 만들어서 

6.앞의 조건의 su가 0임을 만들어낸다. 


7. if 만약 v가 u보다 크면 두 수의 자리를 바꾸고 

계산한다 


그러나 이러한 방식은 뺄셈을 통해 계속적으로 계산해서 

마지막의 값을 얻어내기 때문에 효과적이지 못하다 



[개선된 알고리즘]


이 연산에서 su-su2로 su가 0이 될때까지 계산하는 것이므로 

su2값이 공통되게 뺄셈이 되기 때문에 su%su2 계산을 하면 

더 빠르게 연산을 진행할 수 있다. 


1. su% su2의 나머지 값을 t에 저장하고 

su 에 su2의 값을 저장한다.

su2에 t의 값을 저장하고 

while su2가 false가 될때까지 계속 연산한다. 

false가 되면 while문을 빠져나가게 되고 결국에는 

su값을 리턴하면된다.


[재귀함수]


v==0 이되면 리턴 값은 su로한다 . 

재귀 함수를 통해 

v가 0이 아닐 때까지 리턴하는 방법으로 

매개변수의 값을 su2 값과 su%su2값을 매개변수로 넣어서 


먄약 su의 값이 280이고 su2값이 30이면 

public int gcd(int su, int su2){


// 생략 

else gcd ( su2, su%su2);


}

값을 교차해서 넣어서 su2의 매개변수값을 나머지로 만든다 

public int gcd(int su, int su2){


if 문을 이용해 su2 가 나머지를 구하는 방식이므로 

su2가 0이 되면, 

su의 값을 리턴하면된다. 

else gcd ( su2, su%su2);


}


'알고리즘 공부' 카테고리의 다른 글

삽입 정렬  (0) 2018.03.28
선택정렬 정리  (0) 2018.03.06
피보나치수열 공부  (0) 2018.01.23
최대값, 최소값  (0) 2018.01.21

[Close()]

=> Java 코드가 메모리에 생성한 것이 아닌 것과 

작성을 할 때는 사용이 끝나면 사용이 종료 되었다는 것을알려주어야합니다. 


=> 이때 사용되는 메소드 이름은 대부분 close, disconnect, release(자원에 대한 해제, 이거 다썼다 ) 


어떤 문제가 생기는가 ? 


이 이유로 인해서 대부분의 코드가 아래처럼 작성됩니다. 


자원을 사용하는 클래스에 변수를 만들고 null을 대입합니다. 

try를 만들어서 안에서 자원을 사용 

try안에서 클로즈를 할 수 없는 이유는 

클로즈를 하기전에 문제가 발생하면 클로즈를 못함 

그렇기에  finally를 만들어서 finally에서 자원을 해제 합니다. 



클래스 s =  null;


try{


}catch(Exception e ) {


System.out.println("예외" + e.getMessage());


}finally {


try {

if (ois != null) {

// 종료

s.close();

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

  }

}






**AutoCloseable 인터페이스 

- java 1.7 에서부터 사용됨 

=> 일정시간동안 사용하지 않으면, 자동으로 Close 해주는 메소드를 소유한 인터페이스

이 인터페이스가 implements 클래스는 close()하지 않아도 자동으로 연결해제 됩니다. 



[사용방법]


**try ~ with ~ Resourece

//괄호 안에서 생성한 객체는 예외가 발생하지 않으면 try 끝에서 close()를 호출하고 

//예외가 발생하면, 즉시 close()를 부릅니다. 

try(객체생성 ){

}

catch(    ) {  } 





버퍼가 출력되지 못한 상태에서 프로그램이 종료되버리면, 끝까지 데이터가 출력되지 못할 수 도 있다. 

그러므로 Close() 호출해주어서 버퍼에 남아있던 모든 내용이 출력되도록해주어야한다.

+ Recent posts