스프링은 IoC/DI 를 이용해 객체지향 프로그래밍 언어의 근본과 가치를 개발자가 손쉽게 적용하고사용할 수 있게 도와주는 기술이다.동시에 스프링은 복잡한 엔터프라이즈 애플리케이션을효과적으로 개발하기 위한 기술이다. 애플리케이션은 계속 변하고 복잡해져간다.그 변화에 대응할 수 있는 것이기술, 테스트이다. 스프링으로 개발을 하면서 테스트를 만들지 않는다면이는 스프링이 지닌 가치의 절반을 포기한 셈이다. 테스트는 스프링을 학습하는데 있어 가장 효과적인 방법의 하나이다. 보통의 웹 프로그램에서 사용하는 DAO를테스트하는 방법은 DAO를 만들고서비스 계층, MVC 프레젠테이션 계층 까지포함한 모든 입출력 기능을 만든후,웹 화면을 띄어 폼을 열고 값을 입력하고버튼클릭하여 값을 컨트롤러로 보내고 서비스 걸쳐서 DAO..
인터넷을 돌아다니다 좋은 글을 발견해내 블로그로 퍼왔다. 개발Tip 과는 거리가 멀고인생과 관련이 있지만 내 블로그에 딱히 글을 쓸만한 카테고리가 없기에 개발Tip에 쓴다.어떻게 생각해보면 개발과도 관련이 있다고 생각된다.(인생 -> 내인생 -> 개발자 -> 개발) 원문 : (https://www.buzzfeed.com/mikespohr/37-things-youll-regret-when-youre-old)글 쓴이는 BuzzFeed 의 부 편집장이자 블로거이고 세 아이의 아빠이다. =============================== 1.기회가 왔을 때 여행하지 않았던 것당신이 나이들수록 여행하는 것은 점점 더 어려워진다.특히 가족이 있다면 적어도 세 사람의 비용을 고려해야 한다. 2.외국어를 배우지 ..
제어의 역전 - 프로그램의 제어 흐름 구조가 뒤바뀌는 것 일반적 프로그램의 흐름은 main() 메소드와 같이프로그램이 시작될때 다음에 사용할 오브젝트를 결정하고결정한 오브젝트를 생성하고 생성된 오브젝트의메소드를 호출하고 그 오브젝트 메소드 안에서 다음에 사용할것을 결정하고 호출하는 식의 작업이 반복됨 제어의 역전은 오브젝트가 자신이 사용할 오브젝트를스스로 선택하지 않음.생성하지도 않음. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임하기 떄문이다. 제어의 역전 개념은 이미 많이 적용되어있다.대표적으로 서블릿 서블릿은 개발을해서 서버에 배포할 수는 있지만그 실행을 개발자가 직접 제어할 수 있는 방법이 없다대신 서블릿에 제어 권한을 가진 컨테이너가 적절시점에 서블릿 클래스의 오브젝트를 만들고그 안의 메소드..
자바스크립트를 공부했을때Date를 사용해 오늘 날짜를 구했을때가 있었다.new Date()를 사용했는데오늘 회사에서 새로운 사실을 알았다. Date 에서 난 연도를 가져올때 당연히 getYear()로값을 가져올 줄 알았는데getYear() 이 아닌 getFullYear()로연도를 가져온다는 것이였다. 지금까지 공부해오면서 사실 new Date() 를 사용해본적이자바스크립트를 공부할 때 처음에 한 번 써본게 다 였던것같다. 왜냐하면 현재 연도나 오늘 날짜를 가져올 일 이 없었기 때문이다.게시판같은걸 만들때 오늘 날짜와 현재 시각을 insert할때는그냥 DB에서 바로바로 넣을 수 있었기 때문에new Date() 같은게 필요없었다. 근데 오늘 오랜만에 자바스크립트로오늘날짜를 구해오는 부분을 봤다.오늘 날짜가 ..
객체지향 설계 원칙(SOLID)객체지향 기술은 어느 날 한 번에 만들어진 것이 아니다. 오랜시간에 걸쳐 점진적으로 발전 해온 기술이다.때문에 객체지향 기술을 받아들이고 적용하는 관점과기법에 차이가 조금씩 있다. 객체지향 설계 원칙은 객체지향의 특징을잘 살릴 수 있는 설계의 특징을 말한다.예외는 있겠지만 대부분의 상황에 잘 들어맞는가이드라인과 같은 것이다.디자인 패턴은 특별한 상황에서 발생하는 문제에 대한 좀 더 구체적인솔루션이라고 한다면 객체지향 설계 원칙은 좀 더 일반적인상황에서 적용 가능한 설계 기준이라고 볼 수 있다. 높은 응집도와 낮은 결합도응집도가 높다는 것은 하나의 모듈, 클래스가 하나의책임 또는 관심사에만 집중되어 있다는 것. 높은 응집도응집도가 높다는 것은 변화가 일어날 때 해당 모듈에서변..
추상화란 어떤 것들의 공통적인 성격을 뽑아내어 이를 따로 분리해내는 작업이다.자바가 추상화를 위해 제공하는 가장유용한 도구는 인터페이스이다. 인터페이스는 자신을 구현한 클래스에 대한구체적인 정보는 모두 감춰버린다. 인터페이스는 어떤 일을 하겠다는 기능만 정의해놓은 것이다.이말은 인터페이스는 "어떤 기능을 하겠다." 하는 구현체가 없다구현은 인터페이스를 구현할 클래스들 안에서 해야한다. 아래처럼 인터페이스를 정의하자.DB커넥션을 가져오는 메소드 이름을 makeConnection()이라고 정했다. 위 인터페이스를 사용하는UserDao 는 ConnectionMaker 인터페이스 타입의오브젝트라면 어떤 클래스로 만들어졌든지makeConnection() 메소드를 호출하면 Connection타입의오브젝트를 만들어서..
이번 포스팅에서는 StringBuilder와 StringBuffer의 차이에 대해 알아보자. StringBuilder와 StringBuffer의 차이는 대표적인 면접 단골 질문이기 때문에 면접 준비를 해봤던 사람이라면 누구나 한번쯤 들어봤을거라 생각한다. StringBuffer, StringBuilder 클래스는 String 클래스와는 다르게 값이 변한다. 예를 들어 String aaa = ""; 선언을 하고 aaa 에 반복문을 이용해 aaa += 1 과 같이 값을 계속 넣어준다면 aaa 는 1,2,3,4,5. . . 값을 계속 해서 가지게 된다. aaa 가 4에서 5가 됐을때도 4라는 값을 계속 가지고 있기 때문에 메모리 낭비가 된다. 반복문을 이용해 적은양의 데이터를 String에 저장한다면 큰 문제..
리팩토링은 기존의 코드를 외부의 동작방식에는변화없이 내부 구조를 변경해서 재구성하는 작업 또는 기술을 말함.리팩토링을 하면 코드 내부의 설계가 개선되어코드를 이해하기 좋아지고 변화에 효율적으로 대응할 수 있다. 코드의 품질이 올라가고 유지보수가 용이해진다.ex) 중복코드를 없에는 작업 상속을 통한 확장추상메소드 사용하기추상클래스로 만든 나의 UserDao 클래스를옆에 친구에게 준 후 이 친구도 내가 만든UserDao클래스를 사용할 수 있게 해줘야한다. 그럼 이친구는 나의 UserDao 클래스를 상속해서자기 마음대로 서브클래스를 만들어 사용하면 된다.서브클래스에서 내 UserDao클래스 안에 있는 추상메소드로 선언한 getConnection() 메소드를원하는 방식으로 구현해 사용할 수 있다. 이렇게 함으로..