저번주 토비의 스프링 3.1의 Vol.1 을 다 읽었다.. 엄청 오래 걸렸다. 원래 금방 읽을수 있었는데..보기 귀찮아서 미루다보니 뭔 책 한권 보는데몇달이 걸린건지... 원래는 토비의 스프링을 보면서 중간중간 좋은 부분들을블로그에 정리하려했는데 이건 뭐 내용이 계속 이어져있어서정리를 못했다. 일단 토비의 스프링 Vol.1을 읽으면서느낀건 "참.. 오래된 책이다..." 라는것이다. okky 에서도 많은 분들이 스프링 공부를 할때이제 토비의 스프링을 추천하지 않는다.너무 오래된 책이고 책안에 많은 내용들이이제는 쓰이지 않거나 너무 심오있게 필요없는 것까지깊게 알려주기 때문이란다. Vol.1을 읽고 저 말에 동의했다.너무 오래된듯한 느낌이다. 그리고 너무 내용이 깊다JDBC 커넥션을 뭐그렇게 깊게 설명하는지..
예외 처리 - 자바 개발자가 가장 신경 쓰기 귀찮아하는 것정상적인 결과와 흐름을 보여주는 것도 힘든데예외상황까지 처리해야 한다. 그래서 예외와 관련된 코드는 자주 엉망이 되거나무성의하게 만들어지기 쉽다. 아래는 자바 기초를 배울때 만들어내는 JDBC 코드에서흔히 볼 수 있다. 예외를 잡고 아무것도 하지 않는다. 예외 발생을 무시해버리고 정상적인상황인 것처럼 다음 라인으로 넘어가겠다는의도가 있는게 아니라면 절대 만들어서는안되는 코드이다. 예외가 발생하면 catch로 잡아내는 것까지는 좋은데아무것도 하지않고 넘어가는것은 정말 위험한 일이다.왜냐하면 프로그램 실행 중에 어디선가오류가 있어서 예외가 발생했는데 그것을 무시하고 계속진행해버리기 때문이다. 최종적으로 오작동을 하거나 시스템 오류가 나서 운영자가알아차..
스프링은 IoC/DI 를 이용해 객체지향 프로그래밍 언어의 근본과 가치를 개발자가 손쉽게 적용하고사용할 수 있게 도와주는 기술이다.동시에 스프링은 복잡한 엔터프라이즈 애플리케이션을효과적으로 개발하기 위한 기술이다. 애플리케이션은 계속 변하고 복잡해져간다.그 변화에 대응할 수 있는 것이기술, 테스트이다. 스프링으로 개발을 하면서 테스트를 만들지 않는다면이는 스프링이 지닌 가치의 절반을 포기한 셈이다. 테스트는 스프링을 학습하는데 있어 가장 효과적인 방법의 하나이다. 보통의 웹 프로그램에서 사용하는 DAO를테스트하는 방법은 DAO를 만들고서비스 계층, MVC 프레젠테이션 계층 까지포함한 모든 입출력 기능을 만든후,웹 화면을 띄어 폼을 열고 값을 입력하고버튼클릭하여 값을 컨트롤러로 보내고 서비스 걸쳐서 DAO..
제어의 역전 - 프로그램의 제어 흐름 구조가 뒤바뀌는 것 일반적 프로그램의 흐름은 main() 메소드와 같이프로그램이 시작될때 다음에 사용할 오브젝트를 결정하고결정한 오브젝트를 생성하고 생성된 오브젝트의메소드를 호출하고 그 오브젝트 메소드 안에서 다음에 사용할것을 결정하고 호출하는 식의 작업이 반복됨 제어의 역전은 오브젝트가 자신이 사용할 오브젝트를스스로 선택하지 않음.생성하지도 않음. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 떄문이다. 제어의 역전 개념은 이미 많이 적용되어있다.대표적으로 서블릿 서블릿은 개발을해서 서버에 배포할 수는 있지만그 실행을 개발자가 직접 제어할 수 있는 방법이 없다대신 서블릿에 제어 권한을 가진 컨테이너가 적절시점에 서블릿 클래스의 오브젝트를 만들고그 안의 메소드..
객체지향 설계 원칙(SOLID)객체지향 기술은 어느 날 한 번에 만들어진 것이 아니다. 오랜시간에 걸쳐 점진적으로 발전 해온 기술이다.때문에 객체지향 기술을 받아들이고 적용하는 관점과기법에 차이가 조금씩 있다. 객체지향 설계 원칙은 객체지향의 특징을잘 살릴 수 있는 설계의 특징을 말한다.예외는 있겠지만 대부분의 상황에 잘 들어맞는가이드라인과 같은 것이다.디자인 패턴은 특별한 상황에서 발생하는 문제에 대한 좀 더 구체적인솔루션이라고 한다면 객체지향 설계 원칙은 좀 더 일반적인상황에서 적용 가능한 설계 기준이라고 볼 수 있다. 높은 응집도와 낮은 결합도응집도가 높다는 것은 하나의 모듈, 클래스가 하나의책임 또는 관심사에만 집중되어 있다는 것. 높은 응집도응집도가 높다는 것은 변화가 일어날 때 해당 모듈에서변..
추상화란 어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업이다.자바가 추상화를 위해 제공하는 가장유용한 도구는 인터페이스이다. 인터페이스는 자신을 구현한 클래스에 대한구체적인 정보는 모두 감춰버린다. 인터페이스는 어떤 일을 하겠다는 기능만 정의해놓은 것이다.이말은 인터페이스는 "어떤 기능을 하겠다." 하는 구현체가 없다구현은 인터페이스를 구현할 클래스들 안에서 해야한다. 아래처럼 인터페이스를 정의하자.DB커넥션을 가져오는 메소드 이름을 makeConnection()이라고 정했다. 위 인터페이스를 사용하는UserDao 는 ConnectionMaker 인터페이스 타입의오브젝트라면 어떤 클래스로 만들어졌든지makeConnection() 메소드를 호출하면 Connection타입의오브젝트를 만들어서..
리팩토링은 기존의 코드를 외부의 동작방식에는변화없이 내부 구조를 변경해서 재구성하는 작업 또는 기술을 말함.리팩토링을 하면 코드 내부의 설계가 개선되어코드를 이해하기 좋아지고 변화에 효율적으로 대응할 수 있다. 코드의 품질이 올라가고 유지보수가 용이해진다.ex) 중복코드를 없에는 작업 상속을 통한 확장추상메소드 사용하기추상클래스로 만든 나의 UserDao 클래스를옆에 친구에게 준 후 이 친구도 내가 만든UserDao클래스를 사용할 수 있게 해줘야한다. 그럼 이친구는 나의 UserDao 클래스를 상속해서자기 마음대로 서브클래스를 만들어 사용하면 된다.서브클래스에서 내 UserDao클래스 안에 있는 추상메소드로 선언한 getConnection() 메소드를원하는 방식으로 구현해 사용할 수 있다. 이렇게 함으로..
UserDao-사용자 정보를 DB에 넣고 관리할 수 있는 DAO클래스이다.스프링을 공부할 정도라면 JSP로 게시판 한번쯤은 다 짜봤을것이다.Dao를 한번씩 다 사용해봤을거란 말이다.그럼 Dao에서 JDBC를 연결해보는 작업도 해봤을것이다. JDBC를 이용하는 작업의 일반적인 순서 -DB 연결을 위한 Connection 가져오기-SQL을 담은 PreparedStatement 생성-만들어진 PreparedStatement 실행-조회의 경우 SQL 쿼리의 실행 결과를 ResultSet으로 받아 저장한다.-작업중에 생성된 Connection, Statement, ResultSet 반환하기. ex)위 소스에서 2,3,4 line을 기억하자. main()을 이용한 테스트 만들어진 코드의 기능을 테스트 해볼때는 오브..